我正在尝试在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。
答案 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)
如果我需要从视频中获取更多照片,则可以为此添加一个循环。希望您会觉得有用。