ffmpeg -pattern_type glob -- 未按正确顺序加载文件

Tor*_*xed 7 ffmpeg wildcards numbering

我有一个进退两难的问题.. 我有一个脚本一段时间了,它每隔几分钟就从网络摄像头下载图片。命名约定就是这样new_image((len(files(dir))+1) + '.jpg'),一切都很好......直到今天......

我有一个 Python 脚本,它根据创建日期加载图像并渲染它们,然后我将 OpenGL 数据转储到电影中,这并不难,而且一切正常.. 除了现在我有几千个图像并且以这种方式继续下去是非常无效的(即使它很酷,因为我可以构建自己的 GUI 和覆盖等)..无论如何,我正在使用 ffmpeg 将图像组合成幻灯片,如下所示:

ffmpeg -f image2 -r 25 -pattern_type glob -i '*.jpg' -qscale 3 -s 1920x1080 -c:v wmv1 video.wmv

ffmpeg 工作正常,除了-pattern_type glob按命名顺序获取图像这不起作用,因为文件获取的方式与 相似,如果不相同ls,看起来像:

user@host:/storage/photos$ ls
0.jpg     1362.jpg  1724.jpg  2086.jpg  2448.jpg  280.jpg   3171.jpg  3533.jpg  3896.jpg  4257.jpg  4619.jpg  4981.jpg  5342.jpg  5704.jpg  6066.jpg  650.jpg
1000.jpg  1363.jpg  1725.jpg  2087.jpg  2449.jpg  2810.jpg  3172.jpg  3534.jpg  3897.jpg  4258.jpg  461.jpg   4982.jpg  5343.jpg  5705.jpg  6067.jpg  651.jpg
Run Code Online (Sandbox Code Playgroud)

0, 1000, 1, 2000, 2...这是逻辑,ls所以图像序列(游戏中时光倒流)将被全部搞定..

关于如何使用 ffmpeg 以更有序的方式加载图像的任何想法?

slm*_*slm 7

ffmpeg 连接相同的文件类型

您可以使用这样的命令以任何您想要的方式连接文件列表:

ffmpeg -f concat -i <( for f in *.wav; do echo "file '$(pwd)/$f'"; done ) \
         output.wav
Run Code Online (Sandbox Code Playgroud)

以上仅当您连接的文件都是相同的编解码器时才有效。例如,它们都必须是 .wav 或 .mpg。

注意:您需要有 ffmpeg v1.1 或更高版本才能使用 concat demuxer,您可以阅读有关上述示例的更多信息,以及如何在ffmpeg 网站上使用此技术连接不同的编解码器。

ffmpeg 使用 printf 格式化程序

Ffmpeg 还可以使用 printf 格式化程序(例如%d. 这匹配从 0 开始并按顺序从那里上升的数字。如果数字的结构是这样的,000 - 099,你可以使用这个格式化程序,%03d,这意味着一系列 3 位数字,用零填充。

所以你可以做这样的事情:

ffmpeg -r 25 -i %d.png -qscale 3 -s 1920x1080 -c:v wmv1 video.wmv
Run Code Online (Sandbox Code Playgroud)

以上对我来说不太奏效,ffmpeg是在抱怨这个选项-c:v。我只是省略了那个选项,这个版本的命令按预期工作。

ffmpeg -r 25 -i %d.png -qscale 3 -s 1920x1080 video.wmv
Run Code Online (Sandbox Code Playgroud)


cam*_*amh 5

最简单的方法是使用该rename工具将短文件名重命名为前导零。然而,有两种标准的重命名工具——我所描述的一种是从手册页中的 Perl 程序员参考指南中描述的。这是 Debian 和派生发行版上的版本。

rename 's/^/000/' [0-9].jpg
rename 's/^/00/' [0-9][0-9].jpg
rename 's/^/0/' [0-9][0-9][0-9].jpg
Run Code Online (Sandbox Code Playgroud)

然后应该使用 glob 正确整理文件名。

但是,如果您不想重命名文件,则不能使用 globs,因为按字典顺序展开,而不是数字。

所以,不要使用 glob。摆脱-pattern_type glob并使用-i %d.jpg代替-i *.jpg. 这使用了数字模式,在我的快速测试中可以满足您的需求。