【问题标题】:ffmpeg set filename pattern using python subprocessffmpeg 使用 python 子进程设置文件名模式
【发布时间】:2020-05-14 20:19:56
【问题描述】:

在命令行上运行时,我使用以下代码:

ffmpeg -i video-frame-%06d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4

但我试图在 python 脚本中运行它,我得到 没有这样的文件或目录错误,我认为是因为图像文件名数字的格式类型@ 987654322@

如何连接或使用我在命令行中运行的相同文件模式以在我的 python 脚本中使用它

subprocess.Popen(['ffmpeg -i dir/video-frame-%06d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4', shell=True])

文件夹内的示例图像文件名是:

  1. video-frame-00001.png
  2. video-frame-00002.png
  3. video-frame-00003.png

【问题讨论】:

  • 您应该使用完整路径而不是相对路径。例如:基于您的 Python 文件的路径:dir_of_imgs = os.path.join(os.path.realpath(os.path.dirname(__file__)), "dir") 并使用此变量来定义图像的路径:os.path.join(dir_of_imgs, "video-frame-%06d.png")
  • ffmpeg 不会 如果目录不存在,则创建该目录。并使用@milanbalazs 提到的完整路径。
  • @milanbalazs 谢谢你的作品:)
  • 不客气!
  • 我根据我的评论创建了一个答案。如果它解决了您的问题,您可以接受。谢谢!

标签: python regex ffmpeg subprocess


【解决方案1】:

我相信如果你想运行子进程,你有两个选择:

  • 单行命令并使用不推荐的shell=True。
  • 或使用适当的列表。

试试这个:

cmd = 'ffmpeg -i dir/video-frame-%06d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4'
subprocess.run(cmd.split())

【讨论】:

  • 嗨,实际上我使用的是 shell=True 参数,我在上面编辑了我的帖子。我试过你的方法,但我仍然得到 No such file 'dir/video-frame-%06d.png '
【解决方案2】:

您应该使用完整路径而不是相对路径。例如:基于你的 Python 文件的路径:

dir_of_imgs = os.path.join(os.path.realpath(os.path.dirname(__file__)), "dir")

并使用这个变量来定义图片的路径:

img_path = os.path.join(dir_of_imgs, "video-frame-%06d.png")

这意味着你的命令应该是这样的:

subprocess.Popen(['ffmpeg -i {} -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4'.format(img_path), shell=True])

注意:

当然,您的图像文件可能位于不同的文件夹中,但您可以使用 Python 文件的路径作为参考(如上所示)。

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 2017-03-02
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2015-01-13
    • 2012-06-29
    • 2019-06-21
    相关资源
    最近更新 更多