USBカメラを使って一部の動画を録画しようとしているのに問題がありますffmpeg
。
を実行すると、ffmpeg -f video4linux2 -t 00:00:10 -i /dev/video0 out.mpg
プログラムは640x480で録画しようとするとffmpeg
中断されます。
ところで、640x480(例:320x240)より低い解像度で追加して-s
録画するffmpeg
と、動画の録画が成功します。
一時停止した後、をクリックするとCTRL+C
ffmpegが再起動し、0 kBのサイズのファイルが作成されます。を使用すると、デバイスへの呼び出しがreturnとそれに続くreturnを維持することがstrace
わかります。ioctl
-EINVAL
ioctl
-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.25でビルドされたffmpeg
バージョン2.8.7を使用しています。busybox
ホストアーキテクチャは、カーネル3.2を実行するARMプロセッサです。
ソースから最新バージョンをコンパイルしてみましたが、問題は解決しません...
答え1
理由を確認してください:トランスコーディングと生データボリューム。
私の質問に記載されているコマンドラインを使用して生の形式(yuv422)を読み、それをmpeg-1にトランスコードしていますffmpeg
。カメラからストリーミングされるデータ量がプロセッサに比べて多すぎます。ぶら下がっている状態で。私が使用しているカメラは圧縮形式(mjpeg)でストリーミングすることもできます。このフォーマットに切り替えると、途切れることffmpeg
なく15fpsで録画できます。
しかし、mjpegからmpeg-1へのトランスコーディングステップがあります。最後のトランスコーディングステップを削除してストリームをコピーするように指示することで、ffmpeg
より高いfps数を達成できました。