各种持续时间的FFMPEG图像序列


16

假设我有一个1分钟长的mp3文件。我有20个png图像。我想将这些图像和音频合并到一个视频文件中,但是我不希望每个图像在屏幕上持续3秒,我希望某些图像持续5秒,其他图像持续1秒,等等。

我能想到的唯一方法就是复制应该持续更多时间的图像,例如使image1,image2,image3完全相同,这使我在视频中的停留时间增加了3倍。

然而,这是非常耗时和占用空间的。ffmpeg中是否有任何开关/参数允许我这样做?


如您所见,ffmpeg应该以相同的长度显示每个图像。如果要更改长度,则必须事先复制图像或创建每个所需持续时间的单独视频,然后将它们连接起来。也许有些其他用户有更好的想法,但这种类型的任务可能是用编辑器如Kdenlive等容易
llogan

我是从php脚本执行此操作的,所以编辑器不是我想要的。
Flot2011 2013年

Answers:


21

使用ffmpeg 2.0,有两种方法可以做到这一点:

  1. 一种方法是使用文件修改时间。首先设置图像文件的修改时间,以使每个图像文件的修改时间都大于之前的修改时间。时间差是上一张图片的持续时间(分辨率为1秒)。然后使用image2 demuxer选项-ts_from_file 1。例如:

    touch -t 01010000.00 image01.png
    touch -t 01010000.03 image02.png
    touch -t 01010000.08 image03.png
    ...
    ffmpeg -ts_from_file 1 -i image%2d.png -i audio.mp3 -c:a copy -vf fps=25 out.avi
    
  2. 另一种方法是使用concatdemuxer,它使用要连接的文件列表,并带有可选的持续时间。首先创建一个文件,列出您的图像和持续时间,如下所示:

    ffconcat version 1.0
    file image01.png
    duration 3
    file image02.png
    duration 5
    file image03.png
    

    然后将此文件作为ffmpeg的输入。例如:

    ffmpeg -i in.ffconcat -i audio.mp3 -c:a copy -vf fps=25 out.avi
    

在最后期限之后,您可能需要复制最后一个文件。 -c:a copy照原样复制mp3音频;如果要将其转换为另一个音频编解码器,则可以指定而不是copy。您可能还希望使用来指定其他视频编解码器-c:v或来指定像素格式-pix_fmt,例如-c:v libx264 -pix_fmt yuv420p-vf fps=25将使输出帧速率为25 fps。如果音频较长,并且您希望在图像后将其切断,请使用该-shortest选项。


知道为什么这似乎不起作用(我的意思是,我跟随字母的第二个(并尝试第一个)选项,但是它只是输出没有图像的黑色视频或者图像只是闪烁一帧,而不是几帧) ffconcat文件中指定的秒数。–
sup

@sup:这仍然适用于我。如果视频为黑色,则播放器可能不支持您使用的视频格式;请尝试-c:v libx264 -profile:v baseline -pix_fmt yuv420p out.mp4而不是out.avi,或尝试使用其他播放器,例如mpv或ffplay。另外,请确保您使用的是FFmpeg的当前版本,并在最后期限后复制最后一个图像文件名。
mark4o

嗯,很奇怪,您使用mpv和从ffmpeg.org下载的ffmpeg静态版本,它只是忽略了持续时间。无论如何,我找到了另一种方法来做到这一点,所以它并不那么重要:ffmpeg.org/pipermail/ffmpeg-user/2015-July/027702.html
供应

1

假设 ffmpeg -i in.ffconcat -vf fps=25 out.avi

(2018:in.ffconcat文件内容)-可以工作:

ffconcat 1.0版
文件text.png
持续时间30.0
文件text.png

虽然这不是

ffconcat 1.0版
文件text.png
持续时间30.0

即在第二种情况下

ffprobe out.avi -show_entries format=duration -v 0

[格式]
持续时间= 0.040000
[/格式]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.