VLC冻结了使用ffmpeg从图像创建的低1 FPS视频

问题描述 投票:9回答:3

我正在使用ffmpeg从100个图像序列中创建一个短视频。有几篇文章帮我组合了一个命令,但我正在使用的那篇文章直接来自ffmpeg images-to-video script anyone?

以下命令生成的视频文件在我拥有的所有视频播放器(OS X)中都能很好地播放。

cat input/*.jpg | ffmpeg -f image2pipe -r 10 -vcodec mjpeg -i - out.mp4

但如果我改成它,

cat input/*.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - out.mp4

除了VLC媒体播放器之外,它在所有播放器中都表VLC显示最初的1到3张图像,然后在帧上冻结。我已经测试了几种不同的帧速率,看起来打破VLC中视频播放的截止点介于1.125和1.175之间。

关于我在这里处理什么的任何建议都将非常感激。

video ffmpeg vlc
3个回答
3
投票

同时使用-framerate-r

例如,有一个看起来像1FPS的最终视频:

ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
    -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

这在wiki上提到:http://trac.ffmpeg.org/wiki/Slideshow#Framerates

它将输出帧速率设置为VLC可以处理的30,并将每个图像复制30次,以使输出视频显示为1 FPS。

然后VLC能够正常播放视频。

另见:https://unix.stackexchange.com/questions/68770/converting-png-frames-to-video-at-1-fps

在具有10个PNG的目录中测试Ubuntu 16.10,VLC 2.2.4,ffmpeg 3.0.5。

ffplay

我也尝试用ffmpeg的ffplay播放视频,我希望它能够更强大并且能够处理这样的帧速率。这是非常简单的骨头,但对于你可能在2 FPS使用的测试视频类型应该没问题。 TODO测试出来。


2
投票

这是VLC中一个众所周知的错误:https://trac.videolan.org/vlc/ticket/3625https://trac.videolan.org/vlc/ticket/214

许多用户已经报告过它具有各种阈值,但是根据我自己发现和体验的情况,阈值大约是几个FPS。

目前我很遗憾地看到2 FPS视频的冻结第一帧不能在当前版本的VLC(2.2.4)中播放我记得它在一些1.1.x版本上工作(尽管早先报道了这个bug)但在更新到2.x后,它停止了为我工作。

我和我的同事实际上已经将这种行为与前一段时间相同的视频文件(2 FPS)进行了比较,而我可以在没有问题的情况下使用1.1.x(我认为它是1.1.1但我不是100%)肯定了,他不能用2.x玩任何一个。在他将VLC降级到1.1.x之后,他也可以玩它们。

因此,如果您迫切希望使用VLC并且不会遗漏2.x中的任何内容,那么降级是可行的方法。否则我会说自己省去摆弄VLC设置的痛苦时间,只需使用其他玩家。

更新:现在似乎在VLC 3.0.4中修复了(参见https://trac.videolan.org/vlc/ticket/214)我自己没有测试过。


1
投票

这是VLC中的一个错误(版本3.0.6中仍然存在)。经过一些实验后,我意识到VLC会因FPS小于10的视频而崩溃。所以所有10 FPS或更高的视频都不应该成为问题。因此,目前还没有一种干净的方法可以获得可在VLC中播放的1 FPS视频(不要放弃,继续阅读)。

一个解决方法是 - 如上面的答案所示 - 通过复制图像伪造1 FPS的效果(当我们实际上有一个FPS等于10或更多,这对于VLC是好的)。

示例:如果您有一个包含12个图像的文件夹,并且您希望生成1 FPS的视频(可以在VLC中播放),那么您需要多次复制每个图像(比方说10次),然后告诉FFMPEG生成10 FPS视频。通过这种方式,我们将获得总帧数为120的视频,其中每个图像将播放1秒(因为它重复10次),这对于1 FPS来说简直是假的。

我更喜欢使用fps参数而不是-r(在另一个答案中显示),这可能在某些情况下是有问题的(根据official documentation)。

ffmpeg -framerate 1 -i "img (%d).jpg" -c:v libvpx-vp9 -vf "fps=10,format=yuv420p" out.mkv

由于输入-framerate低于输出fps,FFMPEG将复制帧以达到所需的输出帧速率(根据上述命令为10)。

同样重要的是要注意-framerate-vf fps的顺序很重要,因为这种配置将应用于下一个提到的视频(输入或输出)。这是根据official docs

选项应用于下一个指定的文件。因此,订单很重要......

© www.soinside.com 2019 - 2024. All rights reserved.