Konwersja FLV na MP4 przy użyciu FFMPEG i zachowanie jakości

26

Próbuję użyć ffmpeg do konwersji plików FLV do MP4, aby odtwarzać je na urządzeniach z iOS, ale przekonwertowane wideo ma znacznie gorszą jakość niż oryginalne.

Oto polecenie, którego używam:

ffmpeg -i input.flv -ar 22050 output.mp4

Byłbym bardzo wdzięczny, gdyby ktoś mógł zapewnić mi najlepsze ustawienia konwersji FLV na MP4.


źródło

Odpowiedzi:

42

W zależności od kodeków używanych w twoim pliku FLV możesz uciec po prostu ponownie zawinąć go w pojemnik MP4. Będziesz potrzebować H.264lub MPEG4 simple profilewideo i AACaudio. Możesz znaleźć informacje o pliku źródłowym za pomocąffmpeg -i input.flv

Nie jestem pewien, czy samo posiadanie H.264 / MPEG4 Simple + AAC jest wystarczające, czy też istnieją określone opcje obsługiwanych kodeków. Łatwo jest przetestować:

Spróbuj użyć

ffmpeg -i input.flv -c copy -copyts output.mp4

-copytsJest copy timestampsto pomoże synchronizację dźwięku.

Jeśli to nie zadziała, spróbuj wymusić kodery-dekodery audio i wideo. Spowoduje to ponowne zakodowanie pliku:

ffmpeg -i input.flv -c:v libx264 -crf 23 -c:a libfaac -q:a 100 output.mp4

Aby poprawić jakość wideo, możesz użyć niższej wartości CRF, np. Dowolnej wartości do 18. Aby uzyskać mniejszy plik, użyj wyższej wartości CRF, ale pamiętaj, że spowoduje to obniżenie jakości.

Aby poprawić jakość dźwięku, użyj wyższej wartości jakości. W przypadku FAAC 100wartość domyślna.


Oto kilka uwag na temat polecenia ffmpeg zasugerowanego w pytaniu.

-arodnosi się do częstotliwości próbkowania audio. Polecam nie zadzierać z tym, dopóki nie zrozumiesz lepiej. Jeśli chcesz grać z kodowaniem audio, dostosuj szybkość transmisji (np. -b:a 128k) I pozwól koderowi wybrać, co ma robić na tej podstawie.

Jeśli skończycie tą drogą ...

Jakość CD to próbkowanie 44100Hz; typowe wideo wykorzystuje 48000Hz.

Można zauważyć, że 22050 w przykładzie z oryginalnego pytania wynosi 1/2 częstotliwości próbkowania jakości CD. jeśli konwertujesz w dół materiał CD, to dobry wybór. Jeśli zaczynasz od źródła 48 KHz (którym prawdopodobnie jesteś; znowu, jest to znacznie częstsze niż 44100 w plikach wideo), zamiast tego użyłbym 24 kHz. Prawdopodobnie nie będzie to miało większego znaczenia, ale może brzmieć nieco lepiej i zużywać nieco mniej procesora do konwersji.

Dan Pritts
źródło
ponownie czytam moją odpowiedź ... Oprócz wiersza poleceń, który podałem powyżej, możesz skopiować tylko wideo lub tylko audio i ponownie zakodować inne. na przykład ... „ffmpeg -i input.foo -vcodec copy -acodec libfaac -ab 128k -copyts output.mp4” spowoduje to skopiowanie strumienia wideo i ponowne zakodowanie dźwięku w AAC. libfaac nie ma świetnej jakości, ale działa.
Dan Pritts,
Jeśli chodzi o polecenie wymuszające kodery-dekodery audio / wideo: we wrześniu 2019 r. Zauważyłem, że ffmpegzaprzestałem obsługilibaac . To pytanie sugeruje użycie ffmpegnatywnego kodera AAC przez -c:a aac lub kodek AAC Fraunhofer FDK przez -c:a libfdk_aac (które wymagają kompilacji ffmpegz obsługą libfdk_aac).
aresnick