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 codec_id 0、pix_fmt -1の適切な形式が見つかりません」エラーを検索しようとしましたが、一貫性のあるものは見つかりませんでした。
この問題は stackoverflow で解決されました。
答えを要約すると、それはアスカーコードの問題であり、記録しようとすると同時に画面に出力を表示していたため、競合が発生しました。
「コマンド」文字列を分割する代わりに、パラメータShell=True
で subprocess モジュールを呼び出すことができます。
subprocess.Popen(command, Shell=True)
ただし、これによりコーデックの問題が解決するかどうかはここではテストできません。