使用ffmpeg将图像序列转换为视频及文件列表

11

我有一台相机每隔2-3秒拍摄一次延时摄影,我会保留几天的滚动记录。由于这是很多文件,我按照日期和小时将它们保存在子目录中:

images/
    2015-05-02/
        00/
            2015-05-02-0000-02
            2015-05-02-0000-05
            2015-05-02-0000-07
        01/
            (etc.)
    2015-05-03/

我正在编写一个脚本,每天自动上传日出时间的延时摄影到YouTube。我可以提前从网络获取日出时间,然后在日出后返回并使用find获取在那段时间拍摄的文件列表:

touch -d "$SUNRISE_START" sunrise-start.txt
touch -d "$SUNRISE_END" sunrise-end.txt
find images/"$TODAY" -type f -anewer sunrise-start.txt ! -anewer sunrise-end.txt

现在我想使用ffmpeg将这些文件转换为视频。理想情况下,我希望不复制所有文件的情况下完成此操作(因为我们正在处理每小时约3.5 GB的图像),而且我不想将它们重命名为像image000n.jpg这样的名称,因为其他用户可能需要访问这些图像。如果无法实现,我会考虑复制这些图像。
但是,我在将find的结果发送到ffmpeg时遇到了问题。我知道ffmpeg可以在内部扩展通配符,但我不确定在文件不都在一个目录中的情况下是否能够正常工作。我还看到一些人使用find--exec选项与ffmpeg进行批量转换,但我不确定这是否适用于图像序列输入(例如将1000个图像转换为1000个单帧视频)。
有什么想法可以将这两个连接起来吗?或者,如果无法实现,有更好的方法可以将几个子目录中的日期范围内的文件作为图像序列传递给ffmpeg吗?
3个回答

28

使用 concat 分离器与文件列表。列表格式如下:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

基本的ffmpeg使用:

`ffmpeg -f concat -i mylist.txt ... <output>`

串联 [FFmpeg维基]


2
请参见我在此处的答案 - aergistal
1
这听起来正是我需要的!不过可能需要我几天时间来验证;我运行这个程序的机器上有 ffmpeg 0.6.5 版本(concat 是在 1.1 版本中引入的),而且我不确定是否有权限更新它。 - jimjamslam
您应该升级,当前版本为2.6.x。 - aergistal
是的,这是一个部门服务器,在大学主要用于科学计算;我猜几年来没有人真正需要使用 ffmpeg :P - jimjamslam
3
对于 mylist.txt,请注意 file 不是文件名的占位符。每次在每个文件路径前面都应该写上它的字面意思 file - SteveLambert
第一行:未知关键字 'f'。 - jjxtra

5

使用 pattern_type glob 来实现此功能。

ffmpeg -f image2 -r 25 -pattern_type glob -i '*.jpg' -an -c:v libx264 -r 25 timelapse.mp4

1
只是为了完整起见,还有另一种使用格式化字符串而不是glob的方法。https://superuser.com/a/1462082/204468“ ffmpeg -f image2 -framerate 25 -i img /%05d.jpg -vcodec libx264 -crf 22 video.mp4” - Nande

1

FFmpeg可能使用与shell相同的文件名globbing工具,因此所有有效的文件名globbing模式都应该起作用。在您的情况下,一个模式images/201?-??-??/??/201?-??-??-????-??将扩展到所有相关的文件,例如。

ls -l images/201?-??-??/??/201?-??-??-????-??
ffmpeg ... 'images/201?-??-??/??/201?-??-??-????-??' ...

请注意在ffmpeg调用中模式周围的引号:您希望将模式逐字传递给ffmpeg以将模式扩展为文件名,而不是由shell执行扩展。

注意:它不使用相同的通配符工具和更复杂的模式,这可能会破坏事情 :) - j6m8
@j6m8:有趣... 你能指出支持你说法的代码或文档吗? - aqn

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