FFmpeg:省略 -filter_complex 会导致某些播放器中的视频丢失

FFmpeg: omitting -filter_complex results in missing video in some players

我创建了一个不太简单的 ffmpeg 命令,它带有一个复杂的过滤器,用于将 opening/closing 字幕添加到视频中。在同一过程中,视频会调整大小并重新编码。这在我测试过的所有播放器中都运行良好。

当我省略 -filter_complex arg 和图像输入时,生成的文件在 VLC 中按预期播放,但在 Windows 媒体播放器中只有音频(没有视频)。

这一切都是在 Windows 10 上完成的,使用标准 windows 批处理文件。

有人知道这是怎么回事吗?我的 ffmpeg foo 非常有限。

ffmpeg.exe ^
 -i "..\videos\film.mov" ^
 -y ^
 -codec:a aac ^
 -s:v 1280x720 ^
 -codec:v libx264 -preset slower -tune animation -crf 22 ..\videos\film.mov.m4v"

ffmpeg.exe ^
 -i "..\videos\film.mov" ^
 -i OpeningCredits.de.png -i ClosingCredits.de.png ^
 -filter_complex "[0:v][1:v] overlay=0:0:enable='between(t,0,3.5)',drawtext=enable='between(t,0,3.5)':fontfile=fonts/Roboto-Bold.ttf:text=Test:fontcolor=white:fontsize=104:x=(w-text_w)/2:y=(h-text_h)/2+45,drawtext=enable='between(t,0,3.5)':fontfile=fonts/Roboto-Bold.ttf:text=:fontcolor=white:fontsize=104:x=(w-text_w)/2:y=(h-text_h)/2+45+text_h+20 [tmp]; [tmp][2:v] overlay=0:0:enable='between(t,39-5.2,39)'" ^
 -y ^
 -codec:a aac ^
 -s:v 1280x720 ^
 -codec:v libx264 -preset slower -tune animation -crf 22 "..\videos\film.mov.m4v"

叠加滤镜默认输出YUV420P,所有播放器都支持。所以当它被使用时,这种格式转换是一个隐含的副作用。

在这种情况下,您的输入似乎不是 YUV420P。因此,当省略 filter_complex 时,不会发生到 4:2:0 的转换,并且 WMP 显然没有过滤器来解码非 4:2:0 YUV 格式。

添加 -pix_fmt yuv420p 以强制转换。