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

标签 python ffmpeg

我对 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 使用图像位置中的所有文件的方法。

希望有人可以帮助解决这个问题,如果这是一个重复的问题,我们深表歉意,但如上所述,我已经尝试过很多次搜索。

最佳答案

不要尝试手动构造 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)
    ]
)

关于Python:使用 FFMPEG 使用一系列图像创建视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54520481/

相关文章:

ffmpeg - ffserver 保留原始流大小

ffmpeg -f sdl 通过 UDP 与 ffmpeg -f h264 进行比较

php - 过滤器连接 :out:v0 has a unconnected output | Concatenating with php-ffmpeg

c - 缓冲区源是否将像素格式更改为 `pix_fmt` 还是仅读取输入,就好像它是该格式一样?

python - 如何退出 try block 并显示异常消息?

python - 检测高度相关的属性

python - 当我尝试使用 cx_freeze 编译时出现导入错误

使用 Py.Test 进行单元测试的 Python Mocking

python - docker中的端口映射不适用于python服务器

linux - ffmpeg音视频同步错误