我对导航 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 个创建一个视频文件。
TLDR;如何一次在多组图像上批量执行 ffmpeg 命令(上图)?
非常感谢大家。我非常感谢到目前为止我收到的帮助。
最佳答案
这会将命令行打印到标准输出。您可以将它们捕获到批处理文件并运行它(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 ) )
关于python - 一次在多组图像上批量执行(ffmpeg)命令[新手],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69305043/