ffmpeg优化mp4以及hls参数设置

ffmpeg是开源的音频视频编解码工具
然而默认的参数对MP4不友好,需要自己设置
这里记录一下简单的优化参数

优化MP4使moov atom位于文件开头


moov atom是mp4的索引信息.
浏览器获得moov atom后,可以随机搜索文件位置,让拖动自由
ffmpeg默认是将moov atom放在文件末尾,我们需要前置moov atom
-movflags faststart关键参数

ffmpeg -i input.mp4 -movflags faststart -acodec copy -vcodec copy output.mp4

优化HLS自定义切片时间(非定长切片时间)


ffmpeg默认HLS切片时间是2秒. 我们需要实现前5块都是1秒切片时间,剩下的切片时间为5秒一块
下面的代码可以实现(需要为ffmpeg打补丁),具体详情请看末尾参考文章
-hls_init_time 1 -hls_time 5 -hls_flags split_by_time -hls_list_size 0 -hls_allow_cache 1

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 -s 1280x720 -hls_init_time 1 -hls_time 5 -hls_flags split_by_time -hls_list_size 0 -hls_allow_cache 1 -f hls index.m3u8

其他优化


自定义码率/分辨率,使用HTTP2等等,以后收集到再更新
开源软件Handbrake可以使用'Web Optimized'选项,它将移动moov atom到文件开头
收集的压缩参数

M:\bin\ffmpeg.exe -i M:\bin\input.mp4 -preset slower -c:v libx264 -r 30 -crf 28 -c:a copy crf28.mp4

  ffmpeg -i input.mp4 -c:v libx264 -s 1280x720 -r 30 -preset medium -g 60 -keyint_min 60 -sc_threshold 0 -bf 3 -b_strategy 2 -b:v 1000k -maxrate 1100k -bufsize 1000k -c:a aac -b:a 64k -ac 2 -ar 44100  output.mp4


参考文章 http://ffmpeg.org/pipermail/ffmpeg-devel/2016-August/198357.html
https://streaminglearningcenter.com/wp-content/uploads/2016/11/Cloud_encoder_with_FFmpeg-1.pdf
问题地址 https://trac.ffmpeg.org/ticket/7305
补丁地址 https://patchwork.ffmpeg.org/patch/9653/
http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160827/281eb87c/attachment.obj
推荐工具 https://axiomui.github.io/
https://handbrake.fr/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏热更新:游戏客户端热更新那点事

前言 热更新的内容可以是美术资源,可以是代码,但相对来说,美术资源的更新不会受到约束,代码实际上是重灾区。本文介绍的主要是客户端代码热更新。 热更新对于开发者来说是一件麻烦事,特别对于看重效率、便捷性和结构的程序员来说,热更新就是运营人员的不懂技术的…

Unity客户端开发优化要点

脚本方面1、不需要高频率调用的函数,使用InvokeRepeating(或Time.frameCount%n)代替Update2、SetParent、Instantiate、Find、IO操作、SetActive、GetComponent等耗时较长的接口应在loading的时候做3、Update尽量减少代码逻辑、减少临时变量、…

leetcode214. 最短回文串

214. 最短回文串 难度困难114 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入: "aacecaaa" 输出: "aaacecaaa"示例 2: 输入: "abcd" 输出: "…

Java对象的序列化

对象序列化就是把一个对象变为二进制数据流的一种方法。 一个类要想被序列化,就行必须实现java.io.Serializable接口。虽然这个接口中没有任何方法,就如同之前的cloneable接口一样。实现了这个接口之后,就表示这个类具有被序列化的能力。 先…

游戏服务器架构:网络服务器端程序线程划分

服务器端高性能网络编程的核心在于架构,而架构的核心在于进程-线程模型的选择。 作为服务器需要做网络数据的收发,需要做数据库拉取和保存,需要做日志存储,需要做常规的游戏逻辑处理.....在这里我把这些功能划分为三个大的线程类型:IO线程,事件线程,第三方库线程。 …

游戏中的常见概率设计分析

前言游戏中的概率真的是让人又爱又恨,很多玩家因为自己的屌丝气质(白嫖)而弃坑玩不下去的,比如人尽皆知的某阴阳师,除了氪金,还肝,而且如果你的脸真的非常的黑,那也是打不过那些0氪金…

一个通用游戏后台的设计模式实践总结

搞业务开发的时候,发现有一些代码的开发会让人感觉非常简便舒服,有一些代码的开发却有时候会让人感觉心智负担比较大。逐步总结的过程中,发现让开发人员写起来感觉舒服的代码,大概率是因为当前模块与其他模块代码耦合度低&#xf…

leetcode103. 二叉树的锯齿形层次遍历

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 …

大型游戏后台实践浅谈

国家新闻出版署8月30日下发切实防止未成年人沉迷网络游戏的通知,要求从今天(9月1日)起,所有网络游戏企业仅可在周五、周六、周日和法定节假日每日20时至21时向未成年人提供1小时服务,其他时间均不得以任何形式向未成年人提供网络游戏服务。通知发布后,各大游戏厂商火速回…

如何使用弱网环境来验证游戏中的一些延迟问题

关于弱网 在当今移动互联网盛行的时代,网络的形态除了有线连接,还2G/3G/Edge/4G/Wifi等多种手机网络连接方式。不同的协议、不同的制式、不同的速率,使移动应用运行的场景更加丰富。 从测试角度来说,需要额外关注的场景就远不止断网、网络故障等情况了。对于弱网的数据定义…

使用nginx分片功能提升缓存效率,支持可拖拽式播放视频

Nginx的slice模块可以将一个请求分解成多个子请求,每个子请求返回响应内容的一个片段,让大文件的缓存更有效率。 HTTP Range请求 HTTP客户端下载文件时,如果发生了网络中断,必须重新向服务器发起HTTP请求,这时客户端已经有了文件的一部分,只需要请求剩余的内容,而不需要…

Nginx 配置TCP和UDP负载均衡

前言 Nginx除了以前常用的HTTP负载均衡外,Nginx增加基于TCP协议实现的负载均衡方法。 HTTP负载均衡,也就是我们通常所有“七层负载均衡”,工作在第七层“应用层”。而TCP负载均衡,就是我们通常所说的“四层负载均衡”,工作在“网络层”和“传输层”。例如,…

leetcode116. 填充每个节点的下一个右侧节点指针

116. 填充每个节点的下一个右侧节点指针 难度中等128 给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&am…

你的代码是否按照高内聚、低耦合的原则来设计的?

我们一直强调软件开发中要按照高内聚、低耦合的设计原则来做代码结构设计。c语言和c++不同,c语言面向过程、c++面向对象。 真正的项目中,要对业务升级,原来的业务函数需要保留,要保证老的功能继续维持,不能直接删除,这时候c语言面向过程,通常使用回调的方法。c+…

leetcode117. 填充每个节点的下一个右侧节点指针 II

给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被…

你担心大家会滥用的全局变量,大家(包括你自己)一定会滥用

前言 不要使用全局变量的道理大家都懂,基本上在大家学习编程过程中很早就会被教育到,但是有时候我们也会禁不住诱惑用到一些似非实是的全局变量,只不过这些全局变量会穿上马甲,让你不会一下看穿它的巨大危害,滥用全局变量会引申带来其它更为严重的结构性系统问题。…

Android Studio下载安装教程及开发环境搭建

Android Stuio是本次Google io的一大亮点啊,一大早起来就赶紧下载来玩玩了。。。 如果你不幸被墙了,可以去这个帖子下载,我已经上传到百度盘里面了。 [Android利器]Android Studio下载地址来啰 。。http://www.eoeandroid.com/thread-275380-…

leetcode124. 二叉树中的最大路径和

难度困难314 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 示例 1: 输入: [1,2,3]1/ \2 3输出: 6示例 2: 输入: …

深入剖析阻塞式socket的timeout

前言 网络编程中超时时间是一个重要但又容易被忽略的问题,对其的设置需要仔细斟酌。 本文讨论的是socket设置为阻塞模式,如果socket处于阻塞模式运行时,就需要考虑处理socket操作超时的问题。 所谓阻塞模式,是指其完成指定的操作之前阻塞当前的进程或线程,直到操作…

leetcode165. 比较版本号 超级重要的细节

比较两个版本号 version1 和 version2。 如果 version1 > version2 返回 1&#xff0c;如果 version1 < version2 返回 -1&#xff0c; 除此之外返回 0。 你可以假设版本字符串非空&#xff0c;并且只包含数字和 . 字符。 . 字符不代表小数点&#xff0c;而是用于分隔数…