x264/5 教程 HTML 版 附录

欢迎阅读!本教程仅算盲人摸象的业余分析,仅具备业余参考价值。若有什么不会的可以加群691892901点击图片即可更改桌面和移动端的适配排版

打印支持

推荐设置:彩色模式、不打印背景、0.04 英寸边距、打印页眉页脚

页数:A4 纸与 US Letter 信纸都需要打印 4 页。建议使用双面打印 + 侧面钉装,或只打印需要的部分以节约纸张。

处理图像序列

顾名思义,图像序列是一组分辨率对等,画面(应该)连贯的单图。图像格式不限,但要注意两点:

  1. 图片的有损压缩会与视频的有损压缩相叠加(因此应该用无损图片格式,如 PNG、BMP)
  2. 图片格式大多支持奇数分辨率,但视频格式一般只支持偶数分辨率
  3. 图片格式下 8bit 位深体积永远更小,但会产生色带;而视频编码反而往往因为 10bit 位深的高精度而提高了压缩率,这种惯性会产生“意外默认值”,因此在不支持自动色彩管理的工具中需要注意位深

导入序列

自带 FFMS2,Lavf 的 x264/5 可根据 Win/Linux 中的序号表达式,设定输入文件名 %0Nd 序号范围实现文件导入,0 指编号前有空白补位 0;N 即位数。Win/Linux 区别(应该)只有路径不同:

ffmpeg 还可以用 image2 解码器,搭配 start_number(起始序号)和 pattern_type(表达式类型)两个命令,以编解码图像序列。

其中,-pattern_type sequence 代表使用序号表达式 %0Nd-pattern_type glob 代表使用通配符 * 来匹配“部分文件名 + 通配符”,或者如上例仅使用通配符来选择所有匹配的文件

由于 Windows 系统对序号表达式 %0Nd 的支持略差,而批量修改几百个文件名也有搞乱顺序的风险,所以 ffmpeg 还可以用 concat 滤镜实现。首先创建 txt 列表并假设所有图片都是 2560x1440 分辨率:

注:实际情况下应注意图片的分辨率全部一致

帧率未知,以及不确定能不能跑通时,先做一个长 10 帧左右的列表副本来生成一段未压缩视频流排查:

然后运行该命令,确认了帧率后就能用 ffmpeg pipe x264 或 x265,ffmpeg 内置的 libx264 或 libx265 编码了。以下为 ffmpeg 内置 libx264 的例子:

ffmpeg.exe -loglevel 16 -hwaccel auto -y -hide_banner -f concat -safe 0 -r 15 -i "C:\导入图片列表.txt" -video_size 2560x1440 -an -pix_fmt yuv420p -x264-params "rc-lookahead=33: me=umh:bframes=12:b-adapt=2: subme=9:merange=48:fast-pskip=0:direct=auto:weightb=1:keyint=230:min-keyint=3:ref=3: crf=19:qpmin=9:chroma-qp-offset=-3:aq-mode=3:aq-strength=1.1:trellis=2:deblock=0,-1:psy-rd=0.5:0.3:nr=4" "C:\导出视频帧列表_x264_帧率15.mp4"

以及 libx265 的例子:

ffmpeg.exe -loglevel 16 -hwaccel auto -y -hide_banner -f concat -safe 0 -r 15 -i "C:\导入图片列表.txt" -video_size 2560x1440 -an -pix_fmt yuv420p -x265-params "ctu=64:tu-intra-depth=4:tu-inter-depth=4:limit-tu=1:me=star:subme=3:merange=48:weightb=1:ref=3:max-merge=4:open-gop=0:min-keyint=3:keyint=230:fades=1:bframes=8:b-adapt=2:radl=3:constrained-intra=1:b-intra=1:crf=22.8:qpmin=8:crqpoffs=-3:ipratio=1.2:pbratio=1.5:rdoq-level=2:aq-mode=4:aq-strength=1:qg-size=8:rd=3:limit-refs=0:rskip=0:rc-lookahead=33:rect=1:amp=1:psy-rd=2:qp-adaptation-range=3:deblock=0,-1:limit-sao=1:sao-non-deblock=1:selective-sao=3:hash=2:allow-non-conformance=1" "C:\导出视频帧列表_x265_帧率15.mp4"

导出序列

如果是要从视频导出图片序列,则可以用 ffmpeg-image2 解码器导入视频,指定图片格式导出。以下为 Linux 路径,1fps 的例子:

ffmpeg.exe -loglevel 16 -hwaccel auto -y -hide_banner -i ./导入视频.avi -r 1 -f image2 -start_number 0 -pattern_type sequence -fps_mode cfr /home/tmp/图片%03d.jpg

Windows 路径,30fps 的例子:

ffmpeg.exe -loglevel 16 -hwaccel auto -y -hide_banner -i .\导入视频.avi -r 30 -f image2 -start_number 0 -pattern_type sequence -fps_mode cfr X:\文件夹\图片%03d.jpg

注:从视频导出图片序列能够帮助快速地制作高清 GIF 图片