我们正在将一系列 DPX 图像转换为 MP4 视频:
ffmpeg -start_number 101 -i dpx/example.%04d.dpx ./example.mp4 # minimal conversion
ffmpeg -y -start_number 101 -i dpx/example.%04d.dpx -b12100k
-minrate 12100k -maxrate 12100k -bufsize 12100k -vf colormatrix=bt601:bt709
-pix_fmt yuv420 ./example.mp4 # conversion with colour correction
但是,在 Adobe Premiere Pro 中打开此 MP4 时,它似乎缺少前两帧(前两帧无法访问,第三帧可以访问,总帧数为 2)。在其他应用程序(Quicktime Player 和 VLC)中打开时,同一文件没有丢失帧。在 Premiere 中打开其他视频文件时没有丢失帧。
以下转换不能解决问题(参考文献 1) (参考文献 2) (参考 3“-timecode”):
ffmpeg -start_number 101 -i dpx/example.%04d.dpx -filter_complex "[0] fps=fps=25"
./example.mp4 # force fps with filter_complex
ffmpeg -start_number 101 -i dpx/example.%%04d.dpx -timecode 00:00:00:01 ./example.mp4
# force timecode (tried drop and non-drop format)
以下转换(继承批发)确实有效。为什么?哪个参数可以解决问题?
ffmpeg -start_number 101 -i dpx/example.%%04d.dpx -crf 15.0 -y -vcodec libx264
-b:a 128k -b:v 4000 -intra -s 1280x720 -r 25 -ar 48000 -ab 192000 -coder 1 -flags +loop
-me_method hex -subq 6 -me_range 16 -g 1 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71
-b_strategy 1 -threads 0 ./example.mp4 # mystery meat
(显然,我们正在调整工作版本以满足我们的其他要求。)
答案1
测试了几个场景后,发现多个 B 帧的存在似乎才是罪魁祸首。正是它们的存储超出演示序列以及 Adobe H264 比特流解析器中的新错误导致了此问题。
因此,添加-x264opts bframes=1
(或0
) 即可解决问题。据我所知,这不是 FFmpeg 的问题,因为其他应用程序(包括 NLE,如 Vegas)无需此选项即可正确读取 MP4。甚至旧版本的 Adobe CC 也可以,如您的链接所示。
编辑:-x264opts b_pyramid=0
看起来是直接的解决方案。