Ubuntu18.04 x264命令行实操
1 源码下载编译
https://code.videolan.org/videolan/x264/-/branches
克隆命令失败,这里采用的是官网的最新stable版本
tar -xvf x264-stable.tar.gz
cd x264-stable
./configure
make -j 4
2 基本参数介绍
2.1 profile参数详解
从低到高分别为:Baseline、Main、High。
Baseline(最低Profile)级别支持I/P 帧,只支持无交错(Progressive)和CAVLC,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等;
Main(主要Profile)级别提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC 和CABAC 的支持,用于主流消费类电子产品规格如低解码(相对而言)的mp4、便携的视频播放器、PSP和Ipod等;
High(高端Profile,也叫FRExt)级别在Main的基础上增加了8x8 帧间预测、自定义量化和更多的YUV 格式(如4:4:4),用于广播及视频碟片存储(蓝光影片),高清电视的应用。
- baseline
- main
- high
- high422
- high444
2.2 tune参数详解
tune的参数主要配合视频类型和视觉优化的参数,或特别的情况。如果视频的内容符合其中一个可用的调整值又或者有其中需要,则可以使用此选项,否则建议不使用(如tune grain是为高比特率的编码而设计的)。
film: 电影、真人类型;
animation: 动画;
grain: 需要保留大量的grain时用;
stillimage: 静态图像编码时使用;
psnr: 为提高psnr做了优化的参数;
ssim: 为提高ssim做了优化的参数;
fastdecode: 可以快速解码的参数;
zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。
2.3 preset参数详解
preset的参数主要调节编码速度和质量的平衡。
- ultrafast
- superfast
- veryfast
- faster
- medium
- slow
- slower
- veryslow
- placebo
2.4 速率控制
QP
量化参数(Quantization Parameter,QP)控制着压缩大小。QP越大压缩率越高同时质量越低,QP越小压缩率越低同时质量越高。在H.264和H.265中,QP的范围是0-51间的整数。你可以很容易的在x264和x265中设置固定QP来编码。
ABR
平均比特率(Average Bitrate,ABR)x264的主要开发者之一说你应该永远不要使用它。为什么?因为编码器不知道后面还未编码的内容,所以它不得不猜测如何达到给定码率。这意味着码率要一直变化,尤其是在开始时。对于 HAS-type流,这会导致在短时间内质量巨大波动。
CBR
恒定码率(Constant Bitrate,CBR)输出文件必须是MPEG-2 TS文件,因为mp4不支持NAL填充。注意这种模式对于简单的视频会浪费带宽,但是它保证整个流的码率一致。你可以在这里找到更多用例。在某些应用中使用这种模式是有意义的,但是你可能希望在可能的时候码率更低。
2-Pass ABR
如果允许编码器两遍(或更多)编码那么它就可以预先估计未来还未编码的内容。它可以在第一遍编码是计算编码代价,然后在第二遍编码是更高效的利用比特。这种模式使得在特定码率下输出的质量最好。
CRF
Constant Rate Factor (CRF)CRF可以保持整个视频流质量恒定。在H.264和H.265中,CRF取值为0到51间的整数(和QP类似)。x264默认值是23,x265默认值是28。CRF增减6会导致码率减半或加倍。对于VP9,CRF取值范围0到63,推荐值为15-35。
VBV
VBV(Video Buffering Verifier)对于VBV可以确保码率不超过某个最大值。这对于流媒体非常有用,你现在可以确定你不会发送比你承诺的更多的比特。VBV可以和2-pass VBR(在两遍编码中都使用)或CRF一起使用。
3 命令行实践
3.1 查看帮助
这里查看详细帮助,里面列举了基本命令包括参数的使用范围,很详细。
x264 --fullhelp
3.2 输入文件
根据帮助文档支持几种格式输入:YUV4MPEG,Avisynth,libav* formats
输入文件生成,这里采用FFmpeg 生成输入文件,支持的类型比较少,采用*.y4m格式文件。
ffmpeg -y -t 5 -i Titanic.ts -pix_fmt yuv420p Titanic.y4m
3.2 输出文件
根据文档输出支持的文件格式包括:.264,.mkv,.flv, .mp4
3.3 基本命令
#生成的yuv文件
./x264 -o Titanic.yuv Titanic.y4m
#生成264文件
./x264 -o Titanic.264 Titanic.y4m
#控制码率
x264 -B 1024 -o Titanic.264 Titanic.y4m
#控制质量
x264 -crf 12 -o Titanic.264 Titanic.y4m
#控制压缩率
x264 --qp 12 -o Titanic.264 Titanic.y4m
x264 --profile baseline --preset superfast --bframes 0 --vbv-maxrate 1024 --crf 23 -o Titanic.264 Titanic.y4m