2

Python スクリプト内から FFMPEG コマンドを実行する際に問題があります。ターミナルから次のコマンドを実行すると、接続された Web カメラ (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 Cannot find a appropriate format for codec_id 0, pix_fmt -1」エラーを検索してみましたが、一貫したものは見つかりませんでした。

また、「ffmpeg -f ...」コマンドをシェルスクリプト「test.sh」に入れ、実行権限を与えてみました。次に、ターミナルを開いて「./test.sh」を実行すると、動作します。Python スクリプト内からコマンド「./test.sh」を呼び出そうとすると、以前と同じように元のエラーが残ります。これは、test.sh スクリプトで試した Python コマンドです。

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

3 に答える 3

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 とコマンドの実行に問題はありません。

于 2011-10-05T19:15:13.147 に答える
1

shell=True 引数を指定して Popen を実行してみてください。

subproc = subprocess.popen(command.split(' '), shell=True)
于 2011-10-05T11:05:27.670 に答える
0

Shell =Trueほとんどの場合、適切なオプションではありません。出力としてパイプが必要な場合は機能しません。使用する

pipe_stdin=True

それは私にとって問題を解決します。

于 2019-03-01T12:39:17.837 に答える