Python:使用FFMPEG创建一个使用一系列图像的视频

2024-09-28 19:26:35 发布

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

我对Python相当陌生,这是我第一次使用ffmpeg(基于同事的代码)。在

我有一些代码,每X秒拍一次屏幕快照,然后从这些文件中创建一个视频,但是我在创建视频时遇到了问题。这是我生成视频的代码:

def create_video(screen_resolution, image_location, subfolder, count, preset, qaulity, duplicated_frame, video_path, video_filename):
video_path = path + video_path
    {1}\\%d.jpg -vcodec libx264 -preset {2} -crf {3} -r {4} -pix_fmt yuv420p {5}\\{6}.mp4"
proc = subprocess.Popen("C:\\ffmpeg\\ffmpeg.exe -r 1 -f image2 -s %s \
                            -pattern_type sequence \
                            -start_number 1 \
                            -i %s%s\\%s%d.png \
                            -vcodec libx264 \
                            -preset %s \
                            -crf %s \
                            -r %s \
                            -pix_fmt yuv420p \
                            %s\\%s.mp4" %
                            (screen_resolution, image_location, subfolder, count, preset[2], qaulity, duplicated_frame, video_path, video_filename), shell = True)

我得到的错误是:

类型错误:%d格式:需要数字,而不是str

我试着寻找解决办法,但进展不快。我知道%d正在从末尾的列表中寻找输入,但是从我所看到的,这也是告诉FFMPEG使用图像位置中的所有文件的方法。在

希望有人能帮上忙,如果这是一个重复的问题,请道歉,但正如前面提到的,我已经试过搜索,很多次。在


Tags: 文件path代码image视频videocountlocation
1条回答
网友
1楼 · 发布于 2024-09-28 19:26:35

不要尝试手动构造shell字符串。让subprocess帮你做。在

您可以传递一组命令行参数,Popen将负责正确转义所有内容:

proc = subprocess.Popen(
    [
        "C:/ffmpeg/ffmpeg.exe",
        "-r", "1",
        "-f", "image2",
        "-s", screen_resolution,
        "-i", os.path.join(path, image_location, subfolder, "%d" + extension),
        "-preset", preset[1],
        "-crf", str(qaulity),
        "-r", str(duplicated_frame),
        "-pix_fmt", "yuv420p",
        os.path.join(video_path, video_filename)
    ]
)

相关问题 更多 >