【问题标题】:Running ffmpeg command through python script通过python脚本运行ffmpeg命令
【发布时间】:2014-05-11 05:40:59
【问题描述】:

我正在尝试在 python 中执行 ffmpeg 命令。 当从 windows cmd 中的命令行执行以下命令时,它起作用了:

C:\FFmpeg\bin\ffmpeg -rtbufsize 100000k -r 65535/2733 -f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder" output100.avi

但是,当我尝试以这种方式在 python 中运行此命令时:

cmd='C:\FFmpeg\bin\ffmpeg -rtbufsize 100000k -r 65535/2733 -f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder" output100.avi'
subprocess.call(cmd, shell=true)

没有用

我也试过这种方式

cmd='C:\FFmpeg\bin\ffmpeg -rtbufsize 100000k -r 65535/2733 -f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder" output100.avi'
subprocess.check_call(cmd) 

但是效果不好

我想知道我做错了什么。我使用 python 2.76。谢谢。

【问题讨论】:

  • cmd='C:\FFmpeg\bin\ffmpeg -rtbufsize 100000k -r 65535/2733 -f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder " output100.avi' 不是语法错误
  • 你怎么样,它不工作?您遇到什么错误?
  • 错误是Windowserror:[错误2]系统找不到指定的文件,我试过的2种方法都是同样的错误
  • 小心,对于较新的 ffmpeg,您需要使用“-framerate”而不是“-r”作为输入帧率:trac.ffmpeg.org/wiki/DirectShow#Specifyinginputframerate

标签: python audio video ffmpeg


【解决方案1】:

试试这个:

import os
os.system(cmd)

据我所知,这种方法不如 subprocess 先进,但它做了它应该做的事情。

【讨论】:

  • 我也试过了,还是不行,还是谢谢
【解决方案2】:

如果没有错误消息,我无法判断,但大多数文档都说在调用可执行文件时使用“ffmpeg.exe”作为二进制文件。此外,您可以将 args 设为列表并将其传递:

未测试

import subprocess as sp

def get_ffmpeg_bin():
    ffmpeg_dir = "C:\\FFmpeg\\bin\\ffmpeg"
    FFMPEG_BIN = os.path.join(ffmpeg_dir, "ffmpeg.exe")
    return FFMPEG_BIN


pipe = sp.Popen([ffmpeg_binary, "-rtbufsize", "100000k", "-r", "65535/2733", "-f", "dshow", "-i", 'audio="virtual-audio-capturer":video="screen-capture-recorder"', "output100.avi"])

pipe.wait()

【讨论】:

  • 错误是Windowserror:[错误2] 系统找不到指定的文件,我之前尝试过的2个方法都是同样的错误
【解决方案3】:

Windowserror:[Error 2] 由于 shell=False 错误而出现。

如果您正在运行以字符串形式给出cmd 的命令,那么您必须使用shell=True

cmd='C:\FFmpeg\bin\ffmpeg -rtbufsize 100000k -r 65535/2733 -f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder" output100.avi'
subprocess.check_call(cmd, shell=True)

如果您在没有shell=True 的情况下运行,则必须将 cmd 作为列表传递:

cmd='C:\FFmpeg\bin\ffmpeg -rtbufsize 100000k -r 65535/2733 -f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder" output100.avi'
subprocess.check_call([cmd])

以上语句对于 Popen 和 check_call 函数是相同的。

【讨论】:

  • 我仍然有同样的错误。我也尝试像这样拆分命令
  • def call_command(command): subprocess.check_call(command.split(' '),shell=True) call_command('C:\FFmpeg\bin\ffmpeg -rtbufsize 100000k -r 65535/2733 - f dshow -i audio="virtual-audio-capturer":video="screen-capture-recorder" output10.avi')
  • 错误是文件名、目录名或卷标语法不正确
【解决方案4】:

user3 几乎是对的,您需要将命令作为字符串列表传递:

cmd=['C:\FFmpeg\bin\ffmpeg', '-rtbufsize', '100000k', '-r', '65535/2733', '-f', 'dshow', '-i', 'audio="virtual-audio-capturer":video="screen-capture-recorder"', 'output100.avi']
subprocess.check_call(cmd) 

【讨论】:

    【解决方案5】:

    我想将一些电影文件转换为音频文件,但我无法让 ffmpeg 在 Python 中执行,直到我明确包含路径,例如:

    import os
    
    Executable = r'C:\Users\rrabcdef\Documents\p\apps\ffmpeg\ffmpeg.exe'
    input = r'C:\Users\rrabcdef\Documents\p\myStuff\clip_1.mov'
    output = r'C:\Users\rrabcdef\Documents\p\myStuff\clip_1.mp3'
    myCommand = Executable + " -i " + input + " -f mp3 -ab 320000 -vn " + output
    os.system(myCommand)
    

    【讨论】:

      【解决方案6】:

      这是一篇旧帖子,但我今天仍然觉得它很有用。我得到了我的工作,所以我想和你分享。

      我的视频文件时长超过 3 小时 (3:09:09),我只想在 20 分 17 秒 (20:17) 时专门提取一帧到一张图片。所以这是工作代码(在 Windows 10、64 位、Python 3.7 上测试):

      import os
      #Input video file
      in_video=r"C:\temp\tu\my-trip-on-the-great-wall.rmvb"
      #Output image file
      out_image=r"C:\Users\rich_dad\Documents\test2.jpg"
      
      #ffmpeg installation path
      appDir=r"c:\ffmpeg\bin"
      
      #Change directory on the go
      os.chdir(appDir)
      
      #Execute command
      os.system("ffmpeg -ss 20:17 -i "+in_video+" -vframes 1 -q:v 2 "+out_image)
      

      如果我需要从视频中获取更多照片,我肯定会为此添加一个循环。我希望你会发现这很有用。

      【讨论】:

        猜你喜欢
        • 2017-09-13
        • 1970-01-01
        • 2020-07-02
        • 2021-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多