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 の適切な形式を見つけることができません」というエラーを検索してみましたが、一致するものは見つかりませんでした。
答え1
この問題は解決されましたスタックオーバーフロー。
回答を要約すると、質問者のコードに問題があり、質問者は出力を記録しようとしているのと同時にそれを画面に表示していたため、競合が発生しました。
答え2
「コマンド」文字列を分割する代わりに、サブプロセスパラメータ付きモジュールshell=True
:
subprocess.Popen(command, shell=True)
ただし、これでコーデックの問題が解決するかどうかをここでテストすることはできません。