ffmpeg 将 avi 拆分为具有已知帧速率的帧

Posted

技术标签:

【中文标题】ffmpeg 将 avi 拆分为具有已知帧速率的帧【英文标题】:ffmpeg split avi into frames with known frame rate 【发布时间】:2011-04-24 11:22:53 【问题描述】:

我将此作为 cmets 发布在 this related thread 下。然而,他们似乎没有被注意到 =(

我用过

ffmpeg -i myfile.avi -f image2 image-%05d.bmp

myfile.avi 拆分为存储为.bmp 文件的帧。它似乎工作,除了不完全。录制视频时,我以1000fps 的速率录制,结果视频长度为2min29sec。如果我的数学是正确的,那么整个视频的总帧数应该是 149,000 帧。然而,当我跑的时候

ffmpeg -i myfile.avi -f image2 image-%05d.bmp

我只获得了 4472 个文件。如何获取原始的 149k 帧?

我还尝试通过这样做将原始 AVI 的帧速率转换为 1000fps

ffmpeg -i myfile.avi -r 1000 otherfile.avi

但这似乎并没有解决我的担忧。

【问题讨论】:

【参考方案1】:

我在 ubuntu 18.04 终端上试过这个。

ffmpeg -i input_video.avi output_frame_path_images%5d.png

在哪里,

-i = 输入

【讨论】:

【参考方案2】:

我认为,这里存在一个误解:HS 视频系统的输出不太可能具有 1000 fps 的输出帧速率,而是 30(或 50/60)fps 的正常值。除了以这种速度使大多数视频播放器过载之外,以与记录相同的速度显示序列会适得其反。 基本上:1 sec @ 1000 fps 输入类似于 33 sec @ 30 fps 输出。

场景的持续时间是真的 2:29 分钟(导致视频以正常速率约 82 分钟)还是大约 4.5 秒(4472 帧),即正常播放时 2:29 分钟?

【讨论】:

【参考方案3】:

你的数学第一部分很好,2 分 29 秒大约是 149 秒。以 1000 fps 生成 149000 帧。但是,您的输出文件名只有 5 个位置,而 149000 有 6 个位置,因此请尝试“image-%06d.bmp”。

然后是磁盘大小:您的图像是否适合磁盘?使用 bmp,每个图像都使用自己的大小。您可以尝试使用 jpeg 图片,它们的压缩效果要好 10 倍左右。

另一个想法:如果 ffmpeg 没有找到(合理的)帧速率,它会下降到每秒 25 或 30 帧。您可能需要指定它。对源和目标都这样做,请参阅手册页(unix 上的man ffmpeg):

   To force the frame rate of the input file (valid for raw formats
   only) to 1 fps and the frame rate of the output file to 24 fps:
           ffmpeg -r 1 -i input.m2v -r 24 output.avi

为了它的价值:我使用ffmpeg -y -i "video.mpg" -sameq "video.%04d.jpg" 将我的视频分割成图片。 -sameq 是强制 jpeg 质量合理, -y 是避免允许覆盖问题。给你:

ffmpeg -y -r 1000 -i "myfile.avi" -sameq "image.%06d.jpg"

【讨论】:

-sameq 现已弃用【参考方案4】:
ffmpeg -i myfile.avi -r 1000 -f image2 image-%07d.png

我不确定输出 150k bmp 文件是否是个好主意。也许 png 就足够了?

【讨论】:

这适用于我用笔式相机录制的视频 使用 -r 1000 将强制 ffmpeg 简单地复制(或在输入 fps 较高时丢弃帧)帧达到 1000。可能不是你想要的。

以上是关于ffmpeg 将 avi 拆分为具有已知帧速率的帧的主要内容,如果未能解决你的问题,请参考以下文章

libav 生成具有极高帧速率的 MP4 文件

还有另一种方法可以将ffmpeg中的帧导出到texture2d吗?我的代码在Windows中运行但不在Linux上运行

在Powershell中忽略来自FFMPEG控制台输出的特定警告

在 c++ 中以可变帧速率使用 FFmpeg 库(不是 libav 分支)以编程方式捕获视频

与 ffmpeg 的音视频同步

x264编码时基计算