Aus eigener Erfahrung, wenn Sie absolut keinen Qualitätsverlust wollen, ist - lossless das, wonach Sie suchen.
avconv
Ich bin mir nicht sicher, aber der von Ihnen eingegebene Befehl sieht genauso aus, wie ich es tue FFmpeg
. In können FFmpeg
Sie den Parameter wie folgt übergeben:
ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv
Die meisten x265
Schalter (Optionen ohne Wert) können auf diese Weise angegeben werden (mit Ausnahme der nur über die Befehlszeilenschnittstelle verfügbaren Schalter, die nur mit x265
Binärdateien direkt verwendet werden).
Damit möchte ich meine Erfahrungen mit dem x265
Codieren teilen . Für die meisten Videos (sei es WMV, MPEG oder AVC / H.264) verwende ich crf=23
. x265
entscheidet den Rest der Parameter und erledigt in der Regel einen guten Job.
Bevor ich mich jedoch dazu entscheide, ein Video vollständig zu transkodieren, teste ich meine Einstellungen, indem ich einen kleinen Teil des betreffenden Videos konvertiere. Angenommen, eine MKV-Datei mit Stream 0 als Video, Stream 1 als DTS-Audio und Stream 2 als Untertitel:
ffmpeg -hide_banner \
-ss 0 \
-i "INPUT.mkv" \
-attach "COVER.jpg" \
-map_metadata 0 \
-map_chapters 0 \
-metadata title="TITLE" \
-map 0:0 -metadata:s:v:0 language=eng \
-map 0:1 -metadata:s:a:0 language=eng -metadata:s:a:0 title="Surround 5.1 (DTS)" \
-map 0:2 -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \
-metadata:s:t:0 filename="Cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \
-c:v libx265 -preset ultrafast -x265-params \
crf=22:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 \
-c:a copy \
-c:s copy \
-t 120 \
"OUTPUT.HEVC.DTS.Sample.mkv"
Beachten Sie, dass die Backslashes-Signalleitung in einem langen Befehl unterbrochen wird. Ich mache das, um die verschiedenen Bits einer komplexen CLI-Eingabe zu verfolgen. Bevor ich es zeilenweise erkläre, ist der Teil, in dem Sie nur einen kleinen Teil eines Videos konvertieren, die zweite und die vorletzte Zeile: -ss 0
bedeutet, dass vor dem Dekodieren der Eingabe auf 0 Sekunden gesucht wird und -t 120
das Schreiben in die Ausgabe abgebrochen wird nach 120 Sekunden. Sie können auch die Zeitformate hh: mm: ss oder hh: mm: ss.sss verwenden.
Jetzt Zeile für Zeile:
-hide_banner
verhindert, FFmpeg
dass beim Start Build-Informationen angezeigt werden. Ich möchte es nur nicht sehen, wenn ich in der Konsole nach oben scrolle.
-ss 0
Sucht auf 0 Sekunden, bevor der Eingang dekodiert wird. Beachten Sie, dass dieser Parameter, wenn er nach der Eingabedatei und vor der Ausgabedatei angegeben wird, zu einer Ausgabeoption wird und ffmpeg
anweist, die Eingabe bis x Sekunden zu dekodieren und zu ignorieren und dann in die Ausgabe zu schreiben. Als Eingabemöglichkeit ist es weniger genau (da das Suchen in den meisten Containerformaten nicht genau ist), benötigt aber fast keine Zeit. Als Ausgabeoption ist es sehr genau, benötigt aber eine beträchtliche Zeit, um den gesamten Stream vor der angegebenen Zeit zu dekodieren, und zu Testzwecken möchten Sie keine Zeit verschwenden.
-i "INPUT.mkv"
: Geben Sie die Eingabedatei an.
-attach "COVER.jpg"
: Fügen Sie der Ausgabe ein Titelbild (Miniaturbild, Poster usw.) hinzu. Das Cover wird normalerweise in Datei-Explorern angezeigt.
-map_metadata 0
: Kopieren Sie alle Metadaten von Eingabe 0, die im Beispiel nur die Eingabe ist.
-map_chapters 0
: Kapitelinfo (falls vorhanden) von Eingang 0 kopieren;
-metadata title="TITLE"
: Stellen Sie den Titel des Videos ein;
-map 0:0 ...
: Ordne Stream 0 von Input 0 zu, was bedeutet, dass der erste Stream vom Input in den Output geschrieben werden soll. Da es sich bei diesem Stream um einen Videostream handelt, handelt es sich um den ersten Videostream in der Ausgabe , daher der Streamspezifizierer :s:v:0
. Setzen Sie das Sprachkennzeichen auf Englisch.
-map 0:1 ...
: Ordnen Sie ähnlich wie in Zeile 8 den zweiten Stream (DTS-Audio) zu und legen Sie dessen Sprache und Titel fest (zur leichteren Identifizierung bei der Auswahl von Playern).
-map 0:2 ...
: Ähnlich wie Zeile 9, außer dass dieser Stream ein Untertitel ist;
-metadata:s:t:0 ...
: Legen Sie Metadaten für das Cover fest. Dies ist für das mkv-Containerformat erforderlich.
-c:v libx265 ...
: Video-Codec-Optionen. Es ist so lange her, dass ich es in zwei Zeilen aufgeteilt habe. Diese Einstellung eignet sich für qualitativ hochwertiges Weichzeichnungsvideo (1080p) mit minimaler Streifenbildung im Farbverlauf (was x265 scheiße macht). Es ist höchstwahrscheinlich ein Overkill für DVDs, Fernsehsendungen und Telefonvideos. Diese Einstellung wird meistens von diesem Doom9-Post gestohlen .
crf=22:...
: Fortsetzung der Videocodec-Parameter. Siehe den oben erwähnten Forumsbeitrag;
-c:a copy
: Kopieren über Audio;
-c:s copy
: Kopieren über Untertitel;
-t 120
: Hören Sie nach 120 Sekunden auf, auf den Ausgang zu schreiben. Dadurch erhalten wir einen zweiminütigen Clip für die Vorschau der Trancoding-Qualität.
"OUTPUT.HEVC.DTS.Sample.mkv"
: Name der Ausgabedatei. Ich beschrifte meine Dateinamen mit dem Video-Codec und dem primären Audio-Codec.
Wütend. Dies ist meine erste Antwort. Wenn ich etwas übersehen habe, hinterlasse bitte einen Kommentar. Ich bin kein Experte für Videoproduktionen, ich bin nur ein Typ, der zu faul ist, einen Film anzusehen, indem er die Disc in den Player legt.
PS. Vielleicht gehört diese Frage woanders hin, da sie nicht stark mit Unix und Linux verwandt ist.
--lossless
könnte in der Tat die Datei vergrößern, wenn sie den zuvor verlustbehafteten Codec decodiert und dann codiert, was sie verlustfrei decodiert hat. Die Qualität bleibt genauso wie die Eingabe.