在装有 FFmpeg 版本的 Windows 机器上:
ffmpeg version N-93532-g772c73e61f Copyright (c) 2000-2019 the FFmpeg developers
视频转换missingKeyFrameProblem.mp4作品。
但是,在具有以下版本的 Linux 机器上
ffmpeg version 3.2.14-1~deb9u1 Copyright (c) 2000-2019 the FFmpeg developers
它失败:
ffmpeg -i missingKeyFrameProblem.mp4 output.mp4
在 Linux 机器上我收到此错误:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55c2106c8c00] Missing key frame while reordering index according to edit list
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x55c2106c8c00] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 1280x960, 1459 kb/s): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
如何在 Linux 机器上转换文件?
答案1
考虑:将 Linux ffmpeg 升级到至少 3.3,并包含选项:-ignore_editlist 1
我使用您的文件的结果:
(1)WSL(适用于 Linux 的 Windows 子系统)Ubuntu:
ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers
ffmpeg -ignore_editlist 1 -i missingKeyFrameProblem.mp4 output1.mp4
(2)Raspberry Pi 4 上的 Raspbian Buster:
ffmpeg version 4.1.4-1+rpt1~deb10u1 Copyright (c) 2000-2019 the FFmpeg developers
ffmpeg -ignore_editlist 1 -i missingKeyFrameProblem.mp4 output2.mp4
两个系统均未报告任何错误。WSL 机器是配备 16 GB RAM 的 i7,成功以约 110 fps 的速度编码,Raspberry Pi 是配备 4 GB RAM 的型号 4 B,以约 18 fps 的速度编码(!):文件如下:
-rwxrwxrwx 1 root root 11M Sep 8 19:57 missingKeyFrameProblem.mp4
-rwxrwxrwx 1 root root 9.0M Sep 8 20:12 output1.mp4
-rwxrwxrwx 1 root root 9.0M Sep 8 20:02 output2.mp4
电影是一堵煤渣砌块墙,上面有木栅栏,长 39 秒。
答案2
看来编解码器无法从损坏的输入视频中获取像素格式。
尝试添加-pixel_format yuv420p
选项:
ffmpeg -i missingKeyFrameProblem.mp4 -pixel_format yuv420p output.mp4