ffmpeg зависает при попытке записи видео на более высокие разрешения

Я пытаюсь записать некоторые видео с помощью USB-камеры, но у меня возникают некоторые проблемы при использовании ffmpeg .

Если я запускаю ffmpeg -f video4linux2 -t 00:00:10 -i /dev/video0 out.mpg , программа пытается записать с разрешением 640×480 и ffmpeg зависает.

Однако, если я добавляю -s в ffmpeg и записываю при более низких разрешениях, чем 640×480 (например, 320×240), видео записывается успешно.

После зависания, если я нажму CTRL+C , возобновит ffmpeg, получив файл размером 0 КБ. Используя 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) 

Любые идеи, почему это происходит?

Я использую ffmpeg версии 2.8.7, построенную через busybox 1.25. Архитектура хоста – это процессор ARM, работающий под управлением ядра 3.2.

Я также попытался скомпилировать самую последнюю версию из источника, и проблема сохраняется …

Выяснили причину: перекодирование и объем необработанных данных.

Используя командную строку, указанную в моем вопросе, я читал из необработанного формата (yuv422) и перекодировал его в mpeg-1, который был кодировкой по умолчанию для моей версии ffmpeg . Объем данных, передаваемых с камеры, был слишком большим для процессора, что вызывало зависание. Камера, которую я использовал, также способна передавать в сжатом формате (mjpeg). Переключившись в этот формат, ffmpeg больше не повешен и способен записывать со скоростью 15 кадров в секунду.

Однако был шаг транскодирования, от mjpeg до mpeg-1. Мне удалось достичь более высокого значения fps, ffmpeg на копирование потока, удалив последний шаг перекодирования.