转换缺少关键帧的文件

转换缺少关键帧的文件

我无法转换此视频文件,因为它总是错误地:

根据编辑列表重新排序索引时缺少关键帧

我甚至无法阅读详细信息:

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

它与你的输入文件无关——真正的错误是

必须指定至少一个输出文件。

你可能想要的ffprobeffmpeg

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 秒)。

相关内容