ffmpeg: не удалось найти параметры кодека для потока 0 (видео: h264) неопределенного размера

9

Я пытаюсь конвертировать видео из .raw в .mp4. По этой причине я скачал, собрал и установил x264 и ffmpeg. Тем не менее, команда:

ffmpeg -f h264 -i output.raw -vcodec copy output.mp4

не удается с ошибкой (показано на рисунке ниже). Есть ли способ это исправить?

введите описание изображения здесь

Команды, которые я также запускаю:

1

root@beagleboard:/# v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
        Index       : 0
        Type        : Video Capture
        Pixel Format: 'YUYV'
        Name        : YUV 4:2:2 (YUYV)

        Index       : 1
        Type        : Video Capture
        Pixel Format: 'MJPG' (compressed)
        Name        : MJPEG

2

root@beagleboard:/dev# v4l2-ctl --set-fmt-video=pixelformat=0
dempap
источник
Не могли бы вы просто опубликовать вывод этого:, ffmpeg -i output.rawесли вы пытаетесь конвертировать output.raw. Также, если вы попробуете, ffmpeg -i output.raw -vcodec libx264 -pix_fmt yuv420p output.mp4что такое вывод консоли?
Раджиб
Спасибо за ответ. Оба выхода одинаковы, как отредактировано выше. Как вы думаете, есть проблема в кодировании или в файле во время захвата видео?
dempap
Откуда вы взяли output.rawи как вы его создали?
Slhck
Выполняя ./capture -f -c 100 -o > output.raw. capture.c скачано с: linuxtv.org/downloads/v4l-dvb-apis/capture-example.html .
dempap

Ответы:

0

Ваш ввод просто не является потоком h264, но вы говорите ffmpeg, что он один.

Вы должны сообщить ffmpeg, что это на самом деле: поток v4l2 в формате mjpeg или yuyv (в зависимости от того, какой формат был установлен вашей камерой на момент съемки, из двух перечисленных v4l2-ctl --list-formats). Если вы хотите, чтобы ffmpeg транскодировал его в h264, вам также нужно сообщить об этом.

Если входными данными являются необработанные кадры YUYV, вы хотите:

ffmpeg -f rawvideo -pix_fmt yuyv422 -s:v 640x480 -r 25 -i output.raw -c:v libx264 output.mp4

Замените 640x480 и 25 размерами и частотой кадров вашего видео.

Если ввод MJPEG, вы можете просто пропустить, -fи ffmpeg должен это выяснить:

ffmpeg -i output.raw -c:v libx264 output.mp4

Кстати, вам не нужен другой инструмент захвата; ffmpeg может записывать с устройств v4l2 просто отлично:

ffmpeg -f v4l2 -r 25 -s:v 640x480 -i /dev/video0 -c:v libx264 output.mp4
tgies
источник