ffmpeg Błąd wejścia na żywo MP4

1

Obecnie mam mikrofon i kamerę internetową podłączoną do mojego komputera. Używam ffmpeg na CentOS 6.3.

Kiedy próbuję nagrać film bez dźwięku:

ffmpeg -y -f video4linux2 -t 15 -s 640x480 -r 25 -i /dev/video0 /home/irdb/Desktop/out2.mp4

działa idealnie i dostaję niezły film. Jednak gdy próbuję uruchomić z dźwiękiem zawartym w:

ffmpeg -y -f video4linux2 -t 15 -s 640x480 -r 25 -i /dev/video0 -f alsa -ar 22050 -ab 64k -ac 2 -i default /home/irdb/Desktop/out2.mp4

Występuje błąd i drukuje:

[NULL @ 0x1e33fc0] Codec is experimental but experimental codecs are not enabled,      see -strict -2
Output #0, mp4, to '/home/irdb/Desktop/out2.mp4':
Stream #0:0: Video: h264, yuv420p, 640x480, q=-1--1, 90k tbn, 25 tbc
Stream #0:1: Audio: none, 22050 Hz, 2 channels, flt, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo -> libx264)
Stream #1:0 -> #0:1 (pcm_s16le -> aac)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such    as bit_rate, rate, width or height

Zakładam, że ma to związek z pierwszym błędem, ponieważ gdy używam czegoś takiego jak mpg, działa dobrze. Jednak planuję transmisję strumieniową na żywo i chcę, aby format mp4 był obsługiwany przez wszystkie przeglądarki (Firefox z flash fallback).

Czy ktoś wie, jak sprawić, by dźwięk działał bez dodatkowego przetwarzania (ponieważ chcę przesyłać strumieniowo na żywo i ostatecznie nie zapisywać do pliku).


źródło

Odpowiedzi:

5

Krótka odpowiedź: Dodaj -strict experimental (lub alias -strict -2 ) przed nazwą pliku wyjściowego.

Dłuższa odpowiedź: mp4 zazwyczaj zawiera wideo H.264 i audio AAC. W przypadku wideo H.264 będziesz chciał go zakodować za pomocą licencji GPL libx264 (co robisz).

Istnieje wiele koderów AAC, których można używać z ffmpeg. Istnieje natywny koder AFC ffmpeg, ale jest eksperymentalny i jakość nie jest tak dobra jak innych koderów AAC. The -strict experimental opcja może być użyta, aby ją włączyć. Koder Fraunhofera libfdk_aac ma najwyższą jakość; został wydany w 2012 roku w ramach wydania kodu źródłowego Android Jelly Bean na podstawie niestandardowej licencji copyleft. Ponieważ GPL zezwala na redystrybucję plików binarnych zawierających kod licencjonowany przez GPL, jeśli cała praca jest wydana na licencji GPL, twój ffmpeg prawdopodobnie nie jest skonfigurowany z tym koderem, chyba że skompilujesz go samodzielnie.

Więcej szczegółów można znaleźć w ffmpeg's Przewodnik po kodowaniu AAC .

mark4o
źródło
Dzięki wielkie! Pracował świetnie. W dźwięku słychać kliknięcie. Nie jestem pewien, czy jest to kodek, czy nie, ponieważ nie zmienia się wraz z poziomem jakości. Jednak spróbuję ponownie skompilować z nowym kodekiem ACC.