python - 一次在多组图像上批量执行(ffmpeg)命令[新手]

标签 python cmd ffmpeg batch-processing

我对导航 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 命令(上图)?
非常感谢大家。我非常感谢到目前为止我收到的帮助。

最佳答案

这会将命令行打印到标准输出。您可以将它们捕获到批处理文件并运行它(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/

相关文章:

python - 由于 pandas 崩溃,flask 服务器退出且没有任何消息

python - 从 2d numpy 数组中提取旋转的 1d 轮廓的结果不一致

python - 如何将句子列表与关键字列表匹配

Windows 启动命令无法执行批处理文件

windows - ln -s <target folder> <link folder> unix symbolic link命令在windows中的作用是什么?

windows - 在批处理作业中创建文件名作为时间戳

python - 使用 .service 文件 (ubuntu) 在启动时运行 Gunicorn 实例

ios - 如何从 iOS 设备设置 HLS 实时视频流

python - 你可以在 Python 中对线程或进程进行排队吗?

video - 使用 ffprobe 检查文件是仅音频还是视频