Python / FFMPEG命令行问题

时间:2011-10-05 03:06:53

标签: python ffmpeg webcam alsa v4l2

我在Python脚本中运行FFMPEG命令时遇到问题。当我从终端运行以下命令时,我可以从我连接的网络摄像头(Logitech C310)流式传输视频和音频,并输出到文件“out.avi”,没有任何错误。

ffmpeg -f alsa -i default -itsoffset 00:00:00 -f video4linux2 -s 1280x720 -r 25 -i /dev/video0 out.avi

当我在下面的Python脚本中运行相同的命令时,

def call_command(command):
    subprocess.Popen(command.split(' '))

call_command("ffmpeg -f alsa -i default -itsoffset 00:00:00 -f video4linux2 -s 1280x720 -r 25 -i /dev/video0 out.avi")

它给了我错误:

Input #0, alsa, from 'default':
  Duration: N/A, start: 1317762562.695397, bitrate: N/A
  Stream #0.0: Audio: pcm_s16le, 44100 Hz, 1 channels, s16, 705 kb/s
[video4linux2 @ 0x165eb10]Cannot find a proper format for codec_id 0, pix_fmt -1.
/dev/video0: Input/output error

有人能说清楚这里会发生什么吗?我尝试过使用os.system()以及subprocess.call(),它给了我相同的错误。我不知道从哪里开始可能会出现问题。我试着搜索“video4linux2无法找到适当的codec_id 0格式,pix_fmt -1”错误,但找不到任何一致的内容。

我还尝试将“ffmpeg -f ...”命令放在shell脚本“test.sh”中,并赋予它可执行权限。然后我打开终端,然后运行“./test.sh”,它就可以了。当我尝试从我的Python脚本中调用命令“./test.sh”时,我就像以前一样留下了原始错误。这是我用test.sh脚本尝试的Python命令:

subprocess.call(["./test.sh"])

3 个答案:

答案 0 :(得分:2)

我已经解决了这个问题。在我的Python脚本中,我使用OpenCV来显示这些帧以及使用ffmpeg记录它们。尝试运行ffmpeg命令并使用OpenCV在屏幕上显示它们时存在冲突。

更具体地说,在创建OpenCV CreateCameraCapture对象时:

from opencv.cv import *  
from opencv.highgui import *

capture = cvCreateCameraCapture(0) #conflict with ffmpeg/v4l2 occurs here

注释掉这行代码可以解决我的问题。 Python和执行命令没有任何问题。

答案 1 :(得分:1)

您应该尝试使用shell = True参数运行Popen。

subproc = subprocess.popen(command.split(' '), shell=True)

答案 2 :(得分:0)

Shell =True在大多数情况下不是一个好的选择。 如果您需要管道作为输出,则无法使用。 使用

pipe_stdin=True

它为我解决了问题。