从MP4 / FLV中提取帧?

时间:2011-11-27 18:09:53

标签: ffmpeg flv mp4 video-encoding mpeg-4

我知道FFMPEG是可能的,但如果我有一个部分文件(比如没有开头和结尾)该怎么办。是否可以从中提取一些帧?

2 个答案:

答案 0 :(得分:77)

命令

ffmpeg -ss 00:00:25 -t 00:00:00.04 -i YOURMOVIE.MP4 -r 25.0 YOURIMAGE%4d.jpg

将提取帧

  • 从第二十五开始[-ss 00:00:25]
  • 在0.04秒后停止[-t 00:00:00.04]
  • 从输入文件YOURMOVIE.MP4中读取
  • 每秒只使用25.0帧,i。即每1/25秒一帧[-r 25.0]
  • 作为名称为YOURIMAGE%04d.jpg的JPEG图像,其中%4d是带有前导零的4位自动增量数字

在应用选项[-r]之前检查电影的帧速率,同样适用于[-t],除非您想要使用自定义速率提取帧。

虽然没有尝试使用裁剪(损坏的?)输入文件。 值得一试。

答案 1 :(得分:2)

这可能非常困难。 MP4文件格式包括一个' moov'原子,它指向音频和视频'样本'。如果您拥有的mp4文件的片段没有moov原子,那么您的工作将会复杂得多。你必须开发逻辑来检查“mdat”。 atom(包含所有音频和视频样本)并使用有根据的猜测来查找音频和视频边界。

更糟糕的是,如果没有moov原子,您将无法获得解码切片所需的SPS和PPS。你必须合成替代品;如果您知道用于创建MP4的编解码器,那么您可以从类似编码的文件中复制SPS和PPS;如果不是,那可能是一个痛苦的尝试和错误过程,因为切片的语法(H.264编码图片)取决于SPS和PPS中指定的值。