一次对多组图像执行批处理(ffmpeg)命令[新手]

2024-09-29 19:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我对浏览Python库、Windows批处理和整体编码相对较新。以下是我的情况:

我有多个文件夹,每个文件夹中有n个图像,其中n是一个可被7整除的数字。 在每个文件夹中,图像以7个为一组,按名称分组。如果其中一组图像被命名为“apple”,我将拥有以下七个具有以下命名结构的图像:

Apple.0_aspect-gigapixel-art-scale-4_00x.png,Apple.1_aspect-gigapixel-art-scale-4_00x.png,Apple.2_aspect-gigapixel-art-scale-4_00x.png,Apple.3_aspect-gigapixel-art-scale-4_00x.png,Apple.4_aspect-gigapixel-art-scale-4_00x.png,Apple.5_aspect-gigapixel-art-scale-4_00x.pngApple_aspect-gigapixel-art-scale-4_00x.png (请注意,顺序很重要,无编号的文件应该是最后一个,但如果文件按字母/日期排序,应该已经是这样了。)

对于其中一个文件夹中的每一组图像,我使用ffmpeg制作一个视频文件,其准则如this post所述。在那篇文章中,我从用户Gyan那里得到了很大的帮助,他给了我这个命令:ffmpeg -framerate 10 -i %d.png -vf "split=2[head][loop];[head]trim=end_frame=4[head];[loop]trim=start_frame=3,setpts=PTS-STARTPTS,loop=6:4:0,shuffleframes=1 2 3 2[tail];[head][tail]concat=n=2:v=1:a=0" out.mp4。我想在我的每个图像文件夹中批量执行这个命令,让它为7组中的每一组创建一个视频文件

TLDR;如何一次对多组图像批量执行ffmpeg命令(如上所述)

非常感谢大家。我非常感谢迄今为止我得到的帮助


Tags: 文件图像命令文件夹looppng命名head
1条回答
网友
1楼 · 发布于 2024-09-29 19:32:57

这将把命令行打印到标准输出。您可以将它们捕获到批处理文件中并运行它(python script.py > runit.bat)。这里的原则是拥有一个模板字符串,然后填充模板的各个部分。我假设每个新序列都以一个“.0”文件开始。这将输出文件命名为与最终输入文件(没有数字的文件)相同的名称,并添加了.mp4

import os

command = 'ffmpeg -framerate 10 -i {root}/{nums} -i {root}/{final}.png -vf "split=2[head][loop];[head]trim=end_frame=4[head];[loop]trim=start_frame=3,setpts=PTS-STARTPTS,loop=6:4:0,shuffleframes=1 2 3 2[tail];[head][tail]concat=n=2:v=1:a=0" {root}/{out}.mp4'

startpath = 'x'

for root,dirs,files in os.walk(startpath):
    files.sort()
    for file in files:
        pfx = file.find('.0')
        if pfx < 0:
            continue
        prefix = file[:pfx]
        pattern = file.replace('.0','.%d')
        final = file.replace('.0','')[:-3]
        print( command.format( root=root, nums=pattern, final=final, out=final ) )

相关问题 更多 >

    热门问题