Wie kann ich mit ffmpeg eine h.264-Profilstufe einstellen?


16

Ich habe einen Film (m4v / h.264 / AAC), der auf meinem Mac gut läuft, aber ich habe kürzlich festgestellt, dass er auf meinem Apple TV3 nicht abgespielt werden kann. Wenn ich mir die Eigenschaften dieser Filmdatei ansehe, sehe ich, dass sie das Profil High@4.1 hat, aber Apple TV3 unterstützt nur High@4.0. Ich denke, die einzige Eigenschaft, die dieses Video inkompatibel macht, ist die maximale Videobitrate. Alle anderen Eigenschaften scheinen in High@4.0 unterstützt zu werden.

Wie kann ich dieses Video mit ffmpeg auf High@4.0 downgraden?

Oder muss ich stattdessen die tatsächliche Eigenschaft (maximale Bitrate) ändern, mit der dieses Video 4.1 statt 4.0 erstellt wird? Ich mache mir Sorgen, dass die Datei, wenn ich nur die Bitrate ändere, obwohl sie dann mit High@4.0 kompatibel ist, immer noch als High@4.1 gekennzeichnet ist und daher immer noch nicht auf meinem Apple TV3 abgespielt werden kann.

Antworten:


22

Beim Kodieren mit libx264können Sie das H.264-Profil und die Stufe einstellen mit:

  • -profile:v- einer von high, mainoder baseline(und anderen, aber das ist hier irrelevant)
  • -level:v- wie in Anhang A der Norm H.264 definiert, z 4.0.

Beispielsweise:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Hier haben wir gerade den Audiostream kopiert, da er nicht betroffen ist.

Für die Ausgabe werden in den Metadaten das richtige Profil und die richtige Ebene festgelegt. Sie können dies während der Codierung überprüfen, wobei x264Folgendes angezeigt wird:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

Mit MediaInfo können Sie auch Container- und Codec-Details analysieren.

Wenn Sie das Video neu codieren, wird die Qualität in gewissem Maße beeinträchtigt, da Sie erneut eine verlustbehaftete Konvertierung durchführen. Stellen Sie die -crfOption ein, um den konstanten Qualitätsparameter zu beeinflussen. Der Standardwert ist hier 23, während Werte zwischen 18 und 28 als normal angesehen werden. Niedriger bedeutet bessere Qualität. Wenn Ihre Eingabe eine Bitrate von bis zu 65.000 kBit / s hat, ist die Wahrscheinlichkeit hoch, dass sie nach der Konvertierung immer noch recht gut aussieht.


1
Das hat gut funktioniert. Leider hat es einige der Metadaten verloren, aber das eigentliche Video hatte keine merkliche Qualitätsänderung. Hätte der folgende Befehl aus Interesse dasselbe erreicht? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Sam

Ja, die -vOptionen sind Aliase von :vdenen. Welche Metadaten haben Sie verloren?
Slhck

Ich denke, es könnte nur das Kunstwerk gewesen sein, das verloren gegangen ist. Ich weiß nicht, ob dies technisch gesehen Metadaten sind ... Ist das Bildmaterial tatsächlich in der Datei enthalten? Ich habe nicht alles andere überprüft, bevor ich das Ganze wieder hinzugefügt habe.
Sam

Ich habe jetzt eine andere Datei mit einem ähnlichen Problem. Es ist die falsche Profilstufe, aber der Rest der Spezifikationen scheint mit meiner erforderlichen Stufe (4.0) kompatibel zu sein. Wenn ich die oben angegebenen Befehle verwende, bleiben die Daten dann unberührt, es sei denn, sie sind mit der eingegebenen Profilstufe nicht kompatibel? Grundsätzlich möchte ich nicht, dass ffmpeg andere Daten als das Tag berührt, das angibt, um welches Profil und welche Ebene es sich handelt. Ist das möglich oder werden alle Werte (Nitrat, Framerate usw.) auf voreingestellte Werte gesetzt?
Sam

2
Ich bin nur auf einen Weg gestoßen, dies zu erreichen. Tatsächlich hat Subler die Option, beim Auswählen des Videostreams das Profil und die Stufe zu ändern, um die Kompatibilität mit bestimmten Geräten zu gewährleisten. Sie müssen sicherstellen, dass das Video mit dem von Ihnen festgelegten Profil kompatibel ist, damit es meiner Meinung nach nicht neu codiert, sondern nur die Metadaten geändert werden.
Sam

1

Versuchen Sie in Bezug auf Ihren Kommentar diesen Befehl:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

Prost

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.