当我在 Ubuntu 18 上使用 ffmpeg 编码时,默认编码器h264 (libx264)
默认使用像素格式yuvj420p
。
但是https://ffmpeg.org/doxygen/trunk/pixfmt_8h_source.html说 AV_PIX_FMT_YUVJ420P 是“全尺寸(JPEG),不推荐使用,而建议使用 AV_PIX_FMT_YUV420P 并设置 color_range。”
https://trac.ffmpeg.org/wiki/Encode/H.264还建议“使用 -vf format=yuv420p(或别名 -pix_fmt yuv420p)。”
没有“j”。我们来试试吧。
ffmpeg -i in.mov -movflags +faststart -crf 18 -preset slower \ -pix_fmt yuv420p \ -vf "scale=in_range=mpeg:out_range=full" \ -color_range 2 out.mov
该命令报告:encoder : Lavf57.83.100
,Video: h264 (libx264) ... yuv420p(pc, progressive)
...。
但ffplay out.mov
抱怨“使用了弃用的像素格式,请确保您正确设置了范围。”
ffprobe out.mov
同意结果是yuvj420p
,不是我要求的yuv420p
。
甚至diff
报告结果与省略 pix_fmt、vf 和 color_range 选项的命令的结果按位相同。
ffmpeg -h encoder=libx264
報告Supported pixel formats: yuv420p yuvj420p ...
。
对全色彩范围的 yuv420p 进行编码的正确方法是什么?
ffmpeg version 3.4.6-0ubuntu0.18.04.1 configuration: ... --extra-version=0ubuntu0.18.04.1 ... --enable-libx264