视频编解码器 (Video Codec)
常用的编解码器
- libx264: H.264(AVC) 的实现
- libx265: H.265(HEVC) 的实现,Chromium 不支持硬解
- libvpx-vp9: Google 家的
- libaom-av1: AOMedia 出的开源免费 AV1 编码器,主要 Google 维护
- libdav1d: VideoLAN、VLC、FFmpeg 联合开发,AOMedia 资助
使用
以 libx264 在 FFmpeg 命令行使用为例
代码语言:javascript复制ffmpeg -i input.mp4 -c:v libx264 -x264-params threads=1:br:1000:maxrate=1000:minrate=1000:bufsize=1000 out.mp4
-x264-params
编码器私有参数要通过类似这样的字段传入,每个编码器的不同
libx264
- x264-params
libx265
- x265-params
libaom-av1
- aom-params
杂谈
相同参数转码结果不一定相同
编码器在编码时,开启多线程会导致编码效果不稳定,常常出现相同参数两次编码结果,PSNR 可能会相差 1dB。 请教过编码器专家,给出的原因是:
- 多线程编码时,可能会产生编码顺序的竞争关系,导致区块面积不同
- 多帧多线程编码时,vbv 码控的每帧编码速度不同,导致码控点看到编码状态有差异,做出不同的编码策略
所以在做测评的时候,要保证单线程转码
References
- [1] FFmpeg Codecs Documentation https://ffmpeg.org/ffmpeg-codecs.html
- [2] libaom AV1 Encoding Guide https://trac.ffmpeg.org/wiki/Encode/AV1