ffmpeg: Nie można znaleźć parametrów kodeka dla strumienia 0 (wideo: h264) o nieokreślonym rozmiarze

9

Próbuję przekonwertować wideo z .raw na .mp4. Z tego powodu pobrałem, zbudowałem i zainstalowałem zarówno x264, jak i ffmpeg. Jednak polecenie:

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

kończy się błędem (pokazany na poniższym obrazku). Czy jest jakiś sposób to naprawić?

wprowadź opis zdjęcia tutaj

Polecenia, które uruchamiam również:

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
źródło
czy możesz po prostu opublikować wynik tego: ffmpeg -i output.rawprzy założeniu, że próbujesz dokonać konwersji output.raw. Również jeśli spróbujesz, ffmpeg -i output.raw -vcodec libx264 -pix_fmt yuv420p output.mp4co jest wyjściem konsoli?
Rajib
Dzięki za odpowiedź. Oba wyjścia są dokładnie takie same, jak edytowano powyżej. Czy uważasz, że występuje problem z kodowaniem lub w pliku podczas przechwytywania wideo?
dempap
Skąd masz output.rawi jak to stworzyłeś?
slhck
Wykonując ./capture -f -c 100 -o > output.raw. capture.c pobrane z: linuxtv.org/downloads/v4l-dvb-apis/capture-example.html .
dempap

Odpowiedzi:

0

Twój wkład nie jest po prostu strumieniem h264, ale mówisz ffmpeg, że jest jeden.

Musisz powiedzieć ffmpeg, co to właściwie jest: strumień v4l2 w formacie mjpeg lub yuyv (w zależności od formatu, w którym aparat został ustawiony w momencie przechwytywania, z dwóch wymienionych przez v4l2-ctl --list-formats). Jeśli chcesz, aby ffmpeg transkodował go na h264, musisz to również powiedzieć.

Jeśli dane wejściowe to surowe ramki YUYV, chcesz:

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

Zastąp 640 x 480 i 25 wymiarami i liczbą klatek filmu.

Jeśli dane wejściowe to MJPEG, powinieneś być w stanie po prostu pominąć -fi ffmpeg powinien to rozgryźć:

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

Nawiasem mówiąc, nie potrzebujesz innego narzędzia do przechwytywania; ffmpeg może dobrze przechwytywać z urządzeń v4l2:

ffmpeg -f v4l2 -r 25 -s:v 640x480 -i /dev/video0 -c:v libx264 output.mp4
tgies
źródło