web-dev-qa-db-ja.com

ffmpegコマンドをフォーマットしてウェブカメラから音声を録音する方法

Ffmpeg arecord -Lを使用すると、Logitech usbウェブカメラを次のように識別できます。

hw:CARD=U0x46d0x821,DEV=0
USB Device 0x46d:0x821, USB Audio
Direct hardware device without any conversions

plughw:CARD=U0x46d0x821,DEV=0
USB Device 0x46d:0x821, USB Audio
Hardware device with all software conversions

/ dev/snd/by-idにアクセスすると、ウェブカメラは次のように記述されます:

usb-046d_0821_6813BFD0-00 -> ../controlC1

Ffmpegでサウンドデバイスを使用するコマンドは

ffmpeg -f alsa -i $ALSA_DEVICE_NAME..

私が試してみました

ffmpeg -f alsa -i "hw:CARD=U0x46d0x821,DEV=0" and

ffmpeg -f alsa -i "plughw:CARD=U0x46d0x821,DEV=0"

どちらの場合も同じエラーメッセージが表示されます

ALSA lib pcm.c:2208:(snd_pcm_open_noupdate) Unknown PCM hw=CARD=U0x46d0x821,DEV=0
[alsa @ 0x9c96580] cannot open audio device hw=CARD=U0x46d0x821,DEV=0 (No such file or directory)
hw:CARD=U0x46d0x821,DEV=0: Input/output error

私も試しました

ffmpeg -f alsa -i "usb-046d_0821_6813BFD0-00" and

ffmpeg -f alsa -i "usb-046d_0821_6813BFD0-00,DEV=0" and have still received error message

コマンドの正しい形式を定式化する際にいくつかのヘルプを使用できます

3
user1545779

正しい方法は次のとおりです。

  1. arecord -Lコマンドを発行します。
  2. ハードウェアに対応するplughw値を探します。 plughwは、コンピューターに接続されているハードウェアを表すことに注意してください。
  3. /dev/snd/by-idディレクトリの値をクロスチェックします。
    • Webカメラのプラグを抜くと、by-idサブディレクトリが/dev/sndディレクトリから消えます。これは、どのplughwが外部プラグインデバイスであるかを確認する優れたテストです。
  4. そこにリストされているサウンドデバイスIDは、arecord -Lコマンドから取得した値の1つと同じか、対応しています。
  5. 使用するコマンドはffmpeg: -f alsa -i plughwです。
  6. Plughw値を引用符で囲まないでください。
  7. 私の実例は次のとおりです。

    ffmpeg -f alsa -i plughw:CARD=U0x46d0x821,DEV=0 -acodec libmp3lame -t 20 output.mp4
    
  8. 以下を追加することにより、上記のコマンドにビデオ部分を追加できます。

    -f video4linux2 -i /dev/video0
    

これがお役に立てば幸いです。関連する質問は大歓迎です。

5
user1545779

私はffmpegのマニュアルページをすばやく読んだので、/ proc/asound/cardsを調べることをお勧めします

マシン0と1に2枚のカードがあり、Webカムは1なので、コマンドは

ffmpeg -f alsa -i hw:1
0
Choffee