从MP4/FLV中提取帧?

40

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

2个回答

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

将从第25秒开始[-ss 00:00:25]提取帧,

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

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

虽然从未尝试过裁剪(损坏?)的输入文件。值得一试。


4
我们如何指定提取出的JPG图像的质量? - Rasoul
谢谢,这已经成为我的mediadrop插件的一部分了(https://github.com/docdawning/mediadrop-handbrake-bot)。 - James T Snell
9
使用“-q:v 2”以获得最佳质量。(来源:https://dev59.com/5mkv5IYBdhLWcg3w91dF) - chiliNUT
1
如果磁盘空间充足且您计划进一步操作帧,请考虑使用 YOURIMAGE%4d.bmp - rymo
您可以使用'ffprobe -v error -show_format -show_streams input.mp4'命令来检查视频的属性,包括帧率。[https://trac.ffmpeg.org/wiki/FFprobeTips] - CCJ

2
这可能会非常困难。MP4文件格式包含一个“moov”原子,其中包含指向音频和视频“样本”的指针。如果您拥有的mp4文件片段没有moov原子,则您的工作将更加复杂。您需要开发逻辑来检查“mdat”原子(其中包含所有音频和视频样本),并使用合理的猜测来找到音频和视频边界。
更糟糕的是,如果没有moov原子,您将没有解码切片所需的SPS和PPS。您需要合成替代品;如果您知道用于创建MP4的编解码器,则可以从类似编码的文件中复制SPS和PPS;如果不知道,则可能需要进行痛苦的试错过程,因为切片的语法(H.264编码的图片)取决于在SPS和PPS中指定的值。

1
尽管您的回答很有见地,但使用像FFMPEG这样的工具提取帧和/或编辑视频实际上非常简单。 - Dayne Mentier
3
Dayne,请重新阅读问题中关于源文件缺少开头或结尾的部分。 - Mutant Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接