通过python脚本运行ffmpeg命令

时间:2014-03-31 18:15:15

标签: python audio video ffmpeg

我正在尝试在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中运行this命令时:

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.Thanks。

6 个答案:

答案 0 :(得分:0)

试试这个:

import os
os.system(cmd)

据我所知,这种方法不像子流程那样先进,但是它做了它应该做的事情。

答案 1 :(得分:0)

没有错误消息,我无法说明,但大多数文档都说要使用" 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()

答案 2 :(得分:0)

Windowserror:[错误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函数是相同的。

答案 3 :(得分:0)

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) 

答案 4 :(得分:0)

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

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)

答案 5 :(得分:0)

这是一篇旧文章,但今天我仍然发现它很有用。我有我的工作,所以我想和你分享。

我的视频文件超过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)

如果我需要从视频中获取更多照片,则可以为此添加一个循环。希望您会觉得有用。