PulseAudioでffmpegの録音・録画を試してみる

前回、FreeBSDでのPulseAudio設定がうまく行ったので、ffmpegでの録音と録画を試してみます。
前提知識として以下の過去ログがありますから、先にそちらの方を参照してください。
FreeBSDでPulseaudioをなんとなく使う
FreeBSDのXアプリケーションの録画(ffmpeg2+x11grab)

1. 前提
・FreeBSD 10.3-RELEASE/amd64
FreeBSDでPulseaudioをなんとなく使うの通りにインストール、設定されていること。
・multimedia/ffmpeg は バージョン 2.8.6 のものを使用。



2. 準備
・ffmpegのオプションを確認します。以下のコマンドを実行し、--enable-libpulse、--enable-x11grabが表示されることを確認します。
user@hostname:~ $ /bin/sh -c "ffmpeg -h 2>&1 | tr ' ' '\n' | grep -e libpulse -e x11grab"
--enable-libpulse
--enable-x11grab

表示されない場合は、Ports Collectionを使用して、PulseAudioとx11grabのオプションを有効にしたものを make install してください。

・PulseAudioの設定を確認します。
pamanコマンド(audio/paman)を実行し、Default Sink、Default Sourceに表示されているものを確認します。ここでは以下のものが表示されているものとします。
  Default Sink: oss_output.dsp4
  Default Source: oss_input.dsp4


3. 録音
録音は大きく分けて2つの方法があります。
  ①外部接続のマイクなどの機器からの音声入力を録音する
  ②アプリケーションなどからスピーカーに出力されるものを録音する

①外部接続のマイクなどの機器からの音声入力を録音する
以下のコマンドを使用します。録音を終了する場合は"q"キーで終了します
user@hostname:~ $ ffmpeg -f pulse -i oss_input.dsp4 -c:a pcm_s16le -q:a 0 pulse.wav
〜省略〜


PulseAudioで指定されているデフォルトの入力デバイスを使用する場合は、以下の指定でも可能です。
user@hostname:~ $ ffmpeg -f pulse -i default -c:a pcm_s16le -q:a 0 pulse.wav
〜省略〜



②アプリケーションなどからスピーカーに出力されるものを録音する
以下のコマンドを使用します。録音を終了する場合は"q"キーで終了します
user@hostname:~ $ ffmpeg -f pulse -i oss_output.dsp4.monitor -c:a pcm_s16le -q:a 0 pulse.wav
〜省略〜


①、②の出力の違いとして、pavucontrolコマンド(audio/pavucontrol)を実行しながら上記コマンドを実行した際、[ Recording ]タブ内の[ record of 〜 ]に次のような違いがあります。
① /dev/dsp4
② Monitor of /dev/dsp4


4. 録画
表記上、${x}、${y}、${px}、${py}を使用している箇所がありますが、これらはx11/xwininfoコマンドで出力される以下の内容に置き換える必要があります。
user@hostname:~ $ xwininfo マウスカーソルが十字になったことを確認して対象をマウスクリック
〜省略〜
Absolute upper-left X: → ${px}
Absolute upper-left Y: → ${py}
Width: → ${x}
Height: → ${y}

※Width値とHeight値は4で割り切れる数に修正する必要があります。


外部接続のマイクなどの機器からの音声入力をソースとして録画する場合は、以下のコマンドを使用します。録音を終了する場合は"q"キーで終了します
user@hostname:~ $ ffmpeg -y -video_size ${x}x${y} -f x11grab -i :0.0+${px},${py} -f pulse -i
oss_input.dsp4 -c:v mpeg2video -q:v 0 -c:a mp2 -ab 192k -ac 2 output.avi
〜省略〜

※oss_input.dsp4は defaultに置き換えても動作します。

アプリケーションなどからスピーカーに出力されるものを音声ソースとして録画する場合は、以下のコマンドを使用します。録音を終了する場合は"q"キーで終了します
user@hostname:~ $ ffmpeg -y -video_size ${x}x${y} -f x11grab -i :0.0+${px},${py} -f pulse -i
oss_output.dsp4.monitor -c:v mpeg2video -q:v 0 -c:a mp2 -ab 192k -ac 2 output.avi
〜省略〜

【注意】PulseAudioはマイクなどの外部入力とは違い、少々リアルタイム性に欠けるところがあるため、このコマンドを実行した場合、様々な修正メッセージが出力されます。(実害はありません。たぶん…)
↓エラー例
[avi @ 0x814c8a600] Non-monotonous DTS in output stream 0:1; previous: 79, current: 77; changing to 80. This may result in incorrect timestamps in the output file.


5. 参考サイト
PCLinuxOS-Forums Topic: ffmpeg and PulseAudio (Read 1713 times)
スポンサーサイト



コメントの投稿

非公開コメント