FFmpeg で Web カメラの映像と音声をリアルタイムでエンコードできなかったのを解決できた件

スポンサーリンク

FFmprg 3.0

例えば,下記のような感じで Web カメラの映像と音声を FFmpeg でリアルタイムにエンコードする.

ffmpeg -f video4linux2 -s 400x224 -r 30 -i /dev/video0 -f alsa -ac 2 -i hw:0,0 -acodec aac -ab 128k -ar 44100 -s 400x224 -vcodec libx264 -profile:v high -level 4.2 -preset:v superfast -b:v 400k -pix_fmt yuv420p -threads 1 -t 60 ...

しかし,FFmpeg のログを見ると,speed が 1x 近辺の値にならない.

frame=  157 fps= 17 q=21.0 size=     680kB time=00:00:08.77 bitrate= 634.7kbits/s speed=0.543x  

結果,リアルタイムにエンコードされたファイルに定期的に処理を入れようとするといろいろと不都合なことに.

どうにか解決できないかと試行錯誤したところ,-r オプションを削除すると spped=0.99x となり,期待通りの挙動となりました.

また,下記のメッセージも消えました.

[alsa @ 0xXXXXXX] ALSA buffer xrun.

このメッセージについては,-thread_queue_size オプションを設定することでも対処できるようです.

参考

ALSA buffer xrun induced by low quality source in ffmpeg capture
http://stackoverflow.com/questions/28359855/alsa-buffer-xrun-induced-by-low-quality-source-in-ffmpeg-capture

FFmpeg
スポンサーリンク
コピペワールド