【问题标题】:FFMpeg generates still videoFFMpeg 生成静态视频
【发布时间】:2012-09-11 15:47:06
【问题描述】:

我正在对 ffmpeg 做一个简单的测试。我想将它用于我正在开发的网站的缩略图生成/视频抓取。我目前正在使用 VLC 抓取单帧然后生成缩略图,但它相当慢而且有点麻烦。

问题是我正在使用的视频(来自我自己的电脑)是由安全摄像头软件生成的,它的视频格式很奇怪。当我在 VLC 中打开它(.bvr)时,它播放得非常非常快。一个 10 秒的视频大约需要 2.5 秒。此外,使用 ffmpeg "ffmpeg -i test.bvr output.avi" 进行简单转换会生成适当长度的视频(10 秒),但视频帧永远不会改变。 (这是静止图像)

测试文件和测试输出文件:

我认为这主要是因为 IP 摄像头可能只能生成 5-7 fps,但安全软件不知道更好,并把它写成好像应该是 24/30 fps。

FFMpeg 报告:[m4v @ 00000000002cec60] 估计持续时间 比特率,这可能是不准确的输入#0,m4v,来自“test.bvr”: 持续时间:N/A,开始:0.000000,比特率:N/A 流 #0:0:视频:mpeg4 (简单配置文件),yuv420p,640x480 [SAR 1:1 DAR 4:3],5 tbr,1200k tbn, 5 tbc 输出#0,avi,到“output.avi”:元数据:ISFT
: Lavf54.25.104 流#0:0: 视频: mpeg4 (FMP4 / 0x34504D46), yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 5 tbn, 5 tbc 流映射:

Stream #0:0 -> #0:0 (mpeg4 -> mpeg4) 按 [q] 停止,按 [?] 寻求帮助 帧= 50 fps=0.0 q=2.0 Lsize= 244kB 时间=00:00:10.00 比特率= 199.7kbits/s 视频:237kB 音频:0kB 字幕:0 全局标题:0kB 复用开销 2.877066%**

感谢任何帮助!

【问题讨论】:

  • 也许它无法确定帧率但知道如何解码流。您是否尝试过强制保持 6 fps 的恒定帧速率?
  • 问题是,虽然在 this 的情况下是我自己的视频,但通常是客户上传自己的内容。我不知道帧率应该是多少。

标签: video ffmpeg thumbnails ffprobe


【解决方案1】:

不是真正的编程问题。但无论如何,这是我的输入。产生的内容是 mpeg4 基本流。因此,vlc 无法以正确的帧速率播放。

其次,您的视频是一个静态帧,只有一次照明变化,时间码在右下角从 21 秒增加到 32 秒。那你是说你的输出视频右下角的时间码没有变化?

编辑:vlc 也无法为我播放。但是 ffplay 可以在我的最后播放它,你也可以使用 ffmpeg 在任何你想要的地方抓取缩略图。

编辑:这也适用于 vlc:

ffmpeg -i input.dvr -vcodec mpeg4 output.avi

这也可以在 vlc 中播放。一件事是你也应该给出目标比特率和分辨率。

【讨论】:

  • 当我打开 'output.avi' 文件时,计时器保持不变,视频永远不会改变。我有最新版本的 VLC。这很重要的原因是我必须以编程方式抓取大约一半的帧以生成缩略图,但用户的视频可能有各种各样的问题。在尝试深入研究更深入的内容(获取总帧数等)之前,我一直在问这些问题。
  • 是的,vlc 无法播放。但是 ffplay 可以在我的最后播放它,你也可以使用 ffmpeg 在任何你想要的地方抓取缩略图。
  • @JasonMuchow,你只需要一个 avi 吗?如果您将 avi 替换为 mp4,它在 vlc 中也可以正常工作。我可以在明天的某个时候检查一下 avi 出了什么问题
  • 似乎没有任何效果。我试过转换另一个视频,以及使用你对 vcodec mpeg4 的建议,但 VLC 只是保持在一个帧上。我应该注意到 ffmpeg 是 Windows 编译版本......不过,我真正想要的最后是获得总帧数,然后除以 2 并抓取它作为缩略图。 (50% 通过视频)
  • @JasonMuchow,我的 ffplay 可以很好地播放您生成的视频。 Vlc 显示第一帧。如果我将它转换为 mp4 也可以在 vlc 和 ffplay 中正常播放。所以我不确定你面临什么问题。请尝试以下操作: ffprobe inputfile 这应该打印文件的持续时间。您可以使用简单的脚本简单地解析此输出并获取持续时间/2。接下来直接在输入上尝试此命令。您也可以在 ffmpeg 命令的输出中执行此操作。它是双向的。 ffmpeg -i -vframes 1 -ss -f image2 -s widthxheight out.jpg.
猜你喜欢
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 2017-12-10
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
相关资源
最近更新 更多