x264编码指南——码率控制
来源:互联网 发布:mac草莓红试色cockney 编辑:程序博客网 时间:2024/06/05 00:35
,使用一个比普通预设稍慢的预设,这样可以得到比默认设置稍好一点的视频质量。
ffmpeg -i input -c:v libx264 -preset slow -crf 22-c:a copy output.mkv
注意在这个例子中,输入文件的音频流被简单地拷贝到输出,并没有重编码。
两遍模式:
如果你的目标是一个确定大小的文件而且帧与帧之间的视频质量并不重要,这个方法很适用。这通过一个例子可以得到很好地解释。你的视频有10分钟(600秒)的时长同时要求输出为50MB,因为比特率=文件大小/时长,
50MB*8192(MB转kilobits)/600秒=683 kbps(全局比特率)
,683kbps-128kbps(音频比特率)=555kbps(视频比特率),
两边编码的例子:
ffmpeg -y -i input -c:v libx264 -preset medium -b:v 555k -pass 1 -an -f mp4 /dev/null &&
ffmpeg -i input -c:v libx264 -preset medium -b:v 555k -pass 2 -c:a libfdkaac -b:a 128k mp4 output.mp4
注意 windows 用户应该使用NUL来取代/dev/null
当使用CRF时,请选择使用你所能容忍的最慢预设。
同时建议你看一下《制作高质量的 MPEG4 DVD电影视频剪辑》,这是一篇 MPEG4 编码器编码指南,它会让你深刻的了解当你面临存储空间受限时,两边编码模式对于有效的使用每一个bit是多么的重要。
无损H.264
你可以使用-qp 0或者-crf 0 来编码一个无损输出,对于无损压缩我们提倡使用-qp 胜过-crf。因为8 bitx264和10 bitx264中的 crf 针对无损模式使用了不同的值。对此ultrafast和veryslow是两个非常有用的预设,因为飞快的编码速度和出色的压缩比通常是两个非常重要的因素。大部分的非 ffmpeg播放器不能播放无损模式,所以如果考虑到兼容性问题,你可能不能使用无损模式。
无损压缩的例子(快速编码)
ffmpeg -i input -c:v libx264 -preset ultrafast -qp 0 output.mkv
无损压缩的例子(高压缩比)
ffmpeg -i input -c:v libx264 -preset veryslow -qp 0 output.mkv
重写缺省预设
你可以使用-x264opts来重写预设或者使用 libx264的私有选项(可以通过ffmpeg -h来完整的查看 libx264选项)。我们并不建议你这么做除非你知道你在做什么。所有预设均是由x264的开发者创建的,想通过微调参数来提高输出质量通常是在浪费时间。
例子:
ffmpeg -i input -c:v libx264 -preset slow -crf 22 -x264opts keyint=123:min-keyint=20 -c:a copy output.mkv
附加信息:
ABR(Average Bit Rate)
ffmpeg -i input -c:v libx264 -b:v 1000k ....
它提供了某种“运行均值”的目标,终极目标是最终文件大小匹配这个“全局平均”数字(因此基本上来说,如果编码器遇到大量码率开销非常小的黑帧,它将以低于要求的比特率编码,但是在接下来几秒内的非黑帧它将以高质量方式编码方式使码率回归均值)使用两边编码模式是这个方法变得更加有效,你可以和“max bit rate ”配合使用来防止码率的波动。
CBR(Constant Bit Rate)
事实上根本就没有CBR这种模式,但是你可以通过补充ABR参数“模拟”一个恒定比特率设置,比如:
ffmpeg -i input -c:v libx264 -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
在这个例子中,-bufsize是一个“码率控制缓冲区”,因此它会在每一个有用的1835k视频数据内强制一个你所要求的均值(此处为4000k),所以基本上我们会认为接收端/终端播放器会缓冲那么多的数据,因此在这个数据内部波动是没有问题的。
当然,如果只有黑帧或者空白帧,它所花费的的比特率将少于需求位率(但它会尽可能的提高质量水平,直到crf)。
最大比特率的CRF模式
你可以通过声明-crf和-maxrate设置来使用带有最大比特率crf模式,比如:
ffmpeg -i input -c:v libx264 -crf 20 -maxrate 400k -bufsize 1835k
这将会有效的将crf值锁定在20,但是如果输出码率超过400kbps,在这种情况下编码器会将质量降低到低于crf 20。
低延迟
x264提高了一个 -tune zerolatency 选项。
兼容性:
如果你想让你的视频最大化的和目标播放设备兼容(比如老版本的的ios或者所有的android 设备),那么你可以这做:
-profile:v baseline
这将会关闭很多高级特性,但是它会提供很好的兼容性。也许你可能不需要这些设置,因为一旦你用了这些设置,在同样的视频质量下与更高的编码档次相比会使比特率稍有增加。
关于profile列表和关于它们的描述,你可以运行x264 --fullhelp
要牢记apple quick time 对于x264编码的视频只支持 YUV 420颜色空间,而且不支持任何高于 mian profile编码档次。这样对于quick time 只留下了两个兼容选项baseline和 main。其他的编码档次qucik time均不支持,虽然它们均可以在其它的播放设备上回放。
使用-ss和-t选项可以编码一个段落而不是整个视频,这样可以快速的了解视频编码输出情况。
-ss 从起始值算起的偏移时间,这个值可以以秒为单位或者HH:MM:SS格式
-t 输出时延,这个值可以以秒为单位或者HH:MM:SS格式
问题与解答:
1 两遍编码模式能够比CRF模式提供更好的质量吗?
不能,但它可以更加精确地控制目标文件大小。
2 为什么 placebo 是一个浪费时间的玩意儿?
与 veryslow相比,它以极高的编码时间为代价换取了大概1%的视频质量提升,这是一种收益递减准则,veryslow 与 slower相比提升了3%;slower 与 slow相比提升了5%;slow 与 medium相比提升了5%~10%。
3 为什么我的无损输出看起来是无损的?
这是由于rgb->yuv的转换,如果你转换到yuv444,它依然是无损的。
4 显卡能够加速x264的编码吗?
不,x264没有使用(至少现在没有),有一些私有编码器使用了GPU加快了编码速度,但这并不意味着它们经过良好的优化。也有可能还不如x264,或许速度更慢。总的来说,ffmpeg到目前为止还不支持GPU。
翻译注释:x264在2013版中已经开始支持基于opencl的显卡加速,用于帧类型的判定。
5 为Quick time 播放器压制视频
你需要使用-pix_fmt yuv420p来是你的输出支持QT 播放器。这是因为对于H.264视频剪辑苹果的Quick time只支持 YUV420颜色空间。否则ffmpeg会根据你的视频源输出与Quick time 不兼容的视频格式或者不是基于ffmpeg的视频。
- x264编码指南——码率控制
- x264编码指南——码率控制
- x264编码指南——码率控制
- x264编码指南——码率控制
- x264编码指南——码率控制
- x264编码----码率控制
- x264编码-码率控制
- x264编码----码率控制
- X264码率控制总结2——x264码率控制方法概述
- X264码率控制总结2——x264码率控制方法概述
- X264码率控制总结2——x264码率控制方法概述
- X264码率控制总结2——x264码率控制方法概述
- X264码率控制总结2——x264码率控制方法概述
- x264码率控制
- x264码率控制
- x264码率控制
- [码率控制] x264实时编码的码率控制--一个简单的QP调节方法
- ffmpeg与x264编码指南
- git仓库之间同步
- MVC 导出excel
- 添加搜索路径到FileUtils
- js代码的调试
- java 中== equal hashcode()什么的之间的关系
- x264编码指南——码率控制
- x264参数 中文说明
- Android ColorStateList使用的坑:透明度的问题
- x264 参数详解【很强大、很细致,不再为不懂啥意思很烦恼】
- 用mysql表分区来优化大数据量的表
- 从一个队列中取出一个元素再放回去同时保持原来的顺序,不申请非必需的空间存储队列中的元素
- 人生不如意十之八九
- 汇总内表数据:at end of方法和collect方法
- LeetCode 016 3Sum Closest