Niedrige Konvertierungsqualität mit ffmpeg

Ich muss FLV-Videos in MP4-Videos konvertieren, also habe ich diesen Befehl verwendet:

ffmpeg -i input.flv -c -vcodec libx264 -acodec copy output.mp4

Aber das Ausgabevideo hat eine etwas schlechtere Videoqualität, wie kann ich das beheben?

MP4-Info (Ausgabe):

  • Video: 472 kb/s Bitrate, 680*480, 24 FPS
  • Audio: 112 kb/s Bitrate, 44,1 kHz, MPEG-Audio, Stereo

FLV-Info (Eingabe):

  • Video: 1500 kb/s Bitrate, 680*480, 24 FPS
  • Audio: 112 kb/s Bitrate, 44,1 kHz, MPEG-Audio, Stereo

AKTUALISIEREN:

Ich habe es mit versucht -crf 18und das ist das Ergebnis (Farben der Ausgabe sind heller und sehen Sie sich diese gelbe Linie auf der Kappe an, auf dem Ausgabebild enthält diese gelbe Linie so etwas wie Rauschen).

Eingang:

EINGANG

Ausgabe:

AUSGANG

hinzufügen -crf 20..
@Gyan warum 20? 23 ist Standard, richtig? Und 0 ist verlustfrei, warum also keine 0?
0Ausgabe ist mit den meisten Playern nicht kompatibel. Ein niedriger CRF bietet abnehmende Renditen. 18wird als visuell verlustfrei angesehen, aber Sie müssen das nicht zuerst versuchen.
@Gyan Was ist falsch an diesem Befehl ffmpeg -i input.flv -crf 20 -c -vcodec libx264 -acodec copy -copyts output.mp4? Ich erhalte eine Fehlermeldung: Es kann kein geeignetes Ausgabeformat für „libx264“ gefunden werden
Entfernen -c. Wenn Sie keine besonderen Anforderungen haben, entfernen Sie -copytssie ebenfalls.
@Gyan -c ist Codec richtig? Und warum Kopien entfernen? Es kopiert nur den Zeitstempel, wofür ist es gut?
Sie haben keinen Wert für -cvcodec und acodec festgelegt und bereits angegeben, also nicht erforderlich. Kopien können je nach Ausgangs-VSync zu Mux-Problemen führen.
@Gyan danke, meinst du mit Mux-Problemen, dass Video und Audio nicht synchronisiert werden können? Sehen Sie sich die aktualisierte Frage an.
Nicht direkt synchronisieren, aber Zeitstempeltreue und Drop/Dup-Entscheidungen, wenn Quellzeitbasis und Ausgangszeitbasis sehr unterschiedliche Auflösungen haben.
In Bezug auf die Farbe sieht es so aus, als ob die Quelle den vollen Bereich hat und die Ausgabe als begrenzter Bereich gekennzeichnet oder behandelt wird.

Antworten (2)

Verlustbehaftete Codecs wie x264 verschlechtern die Bildqualität absichtlich. Wenn Sie die Bildqualität nicht verlieren möchten, müssen Sie entweder einen verlustfreien Codec verwenden oder noch besser, überhaupt nicht neu codieren.

Ich gehe davon aus, dass das Quellmaterial entweder H.264 oder MPEG-2 ist, daher wäre die beste Lösung in Ihrem Fall, einfach alle Streams in den neuen Container zu kopieren:

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

Hier ist der Befehl zur Verwendung des verlustfreien Modus von x264, wenn Sie aus irgendeinem Grund neu codieren müssen :

ffmpeg -i input.flv -c:a copy -c:v libx264 -crf 0 output.mp4

Bitte erhöhen Sie -minrate, -maxrate, -bufsizeIhren Codec und studieren Sie ihn. Laden Sie den Better-Container für Video-Codec und Audio-Codec separat herunter. codieren Sie den Codec in diesen Containern, aber folgen Sie diesen Schritten:

1. Laden Sie Audio und Video separat herunter. Sie können dies tun, indem Sie -vn und -an in der Ausgabebefehlszeile hinzufügen. -vn bedeutet „kein Video“, während -an „kein Audio“ bedeutet. Studieren Sie danach den Codec von Video oder Audio und codieren Sie ihn in seinen besseren Container ... Hier sind die besten Container für moderne Codecs.

"Audio/Video codec"

*AAC/H264 is better on (TS)
*OPUS is better on (MKV)
*VP9 is better on (AVI)

2. Nachdem Sie das Video/Audio separat heruntergeladen haben, müssen Sie sie natürlich zusammenführen. Bitte geben Sie Ihre besagten -minrate, -maxrate und -bufsize an. Vergessen Sie nicht, Ihre Codecs zu studieren und sie mit diesen Containern zusammenzufügen:

"Merging"

*Mixing VP9 and OPUS is better on (MKV)
*Mixing H264 and AAC is better on (MOV)
*otherwise most incompatible codec is better on (MKV)