我无法转换此视频文件,因为它总是错误地:
根据编辑列表重新排序索引时缺少关键帧
我甚至无法阅读详细信息:
ffmpeg -i missingKeyFrameProblem.mp4
就是这个文件: https://www.quadcam.ch/missingKeyFrameProblem.mp4
使用 Windows 上的“免费 MP4 视频转换器”软件,我可以对其进行转换,然后就可以使用了,但为什么 ffmpeg 不能这样做呢?
编辑:作为比较,这是来自同一台相机的工作文件: https://www.quadcam.ch/workingFile.mp4
答案1
使用 Windows 上的“免费 MP4 视频转换器”软件,我可以对其进行转换,然后就可以使用了,但为什么 ffmpeg 不能这样做呢?
请不要冒犯我们喜爱的 FFmpeg 软件 :-)
您的“免费 MP4 视频转换器”只是在底层使用了 FFmpeg……
I can't even read the details with: ffmpeg -i missingKeyFrameProblem.mp4
它与你的输入文件无关——真正的错误是
必须指定至少一个输出文件。
你可能想要的ffprobe
是ffmpeg
:
ffprobe -i missingKeyFrameProblem.mp4
并且运行良好。
这个简单的命令
ffmpeg -i missingKeyFrameProblem.mp4 output.mp4
确实转换您的视频。但是
- 输入文件(
missingKeyFrameProblem.mp4
)的持续时间约为 58 秒 - 输出文件(
output.mp4
)的持续时间只有大约 39 秒
原因是视频开头缺少关键帧:
ffprobe -hide_banner -select_streams v -skip_frame nokey -\
show_frames -show_entries frame=pkt_pts_time,pict_type missingKeyFrameProblem.mp4
输出:
.... .... Duration: 00:00:58.45, start: 0.000000, bitrate: 1463 kb/s Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none, 1280x960, 1459 kb/s, SAR 1:1 DAR 4:3, 32.99 fps, 36 tbr, 10k tbn, 20k tbc ( default) Metadata: creation_time : 2019-09-08T08:56:38.000000Z handler_name : VideoHandler [FRAME] pkt_pts_time=19.417500 pict_type=I [/FRAME] [FRAME] pkt_pts_time=21.417400 pict_type=I [/FRAME] .... ....
正如您所看到的,第一个关键帧(又称帧内帧、I 帧)位于 cca19 秒从视频开头开始。因此转换从此帧开始(跳过前 19 秒),这就是输出文件缩短的原因(58 秒 - 19 秒 = 38 秒)。