高解像度でビデオを録画しようとするとffmpegがハングする

高解像度でビデオを録画しようとするとffmpegがハングする

USB カメラを使用してビデオを録画しようとしていますが、使用時に問題が発生していますffmpeg

を実行するとffmpeg -f video4linux2 -t 00:00:10 -i /dev/video0 out.mpg、プログラムは 640x480 の解像度で録画しようとしてffmpegハングします。

ただし、 を追加して-s640x480ffmpegより低い解像度 (例: 320x240) で録画すると、ビデオは正常に録画されます。

ハングアップ後、 を押すとCTRL+C、ffmpeg が再開し、サイズが 0 kB のファイルが生成されます。 を使用すると、デバイスへの呼び出しが を返し、後続のが を返すことstraceがわかります。ioctl-EINVALioctl-EAGAIN

ioctl(3, VIDIOC_G_STD, 0xbe84dfb0)      = -1 EINVAL (Invalid argument)
ioctl(3, VIDIOC_DQBUF, {type=V4L2_BUF_TYPE_VIDEO_CAPTURE}) = -1 EAGAIN (Resource temporarily unavailable)

なぜこのようなことが起こるのか、何か考えはありますか?

私はバージョン 1.25ffmpegでビルドされたバージョン 2.8.7を使用していますbusybox。ホスト アーキテクチャはカーネル 3.2 を実行する ARM プロセッサです。

最新バージョンをソースからコンパイルすることも試みましたが、問題は解決しません...

答え1

原因が分かりました: トランスコーディングと生データの量。

質問で述べたコマンドラインを使用して、RAW 形式 (yuv422) から読み取り、それを の私のバージョンのデフォルトのエンコードである mpeg-1 にトランスコードしていましたffmpeg。カメラからストリーミングされるデータ量がプロセッサにとって多すぎて、ハングアップが発生しました。使用していたカメラは、圧縮形式 (mjpeg) でもストリーミングできました。この形式に切り替えると、ffmpegハングアップしなくなり、15 fps で録画できるようになりました。

ffmpegただし、mjpeg から mpeg-1 へのトランスコーディング手順がありました。ストリームをコピーするように指示し、最後のトランスコーディング手順を削除することで、より高い fps 数を達成できました。

関連情報