我对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.png Apple_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组中的每一个创建一个视频文件。
如何对多组图像一次批处理执行ffmpeg命令(上面)?
非常感谢大家。我非常感谢到目前为止我得到的帮助。
发布于 2021-09-23 18:32:57
这将打印命令行到stdout。您可以将它们捕获到一个批处理文件并运行它(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 ) )https://stackoverflow.com/questions/69305043
复制相似问题