Zeitbasiert anstelle von Frame-basierten Zonen (mit unterschiedlicher CRF) für ffmpeg + x264 / x265-Codierung?
x264 / 5 verfügt über einen zones
Parameter, der verschiedene Kodierungseinstellungen für einen Teil eines Videos unterstützt, er akzeptiert jedoch nur Bildnummern, keine Zeitstempel.
Dies ist bei Videos mit konstanter Bildrate eine geringfügige Unannehmlichkeit, aber bei der Verwendung eines ffmpeg-Filters, wie mpdecimate
(fast) exakte, doppelte Frames, zu verwerfen. Oder allgemein mit VFR-Video. (Und wenn es nicht funktioniert ffmpeg
, nur eine Option für die Stand-Alone-CLI, wäre das auch eine große Unannehmlichkeit.)
libx265 (und libx264) verfügen über eine API, die es dem Aufrufer ermöglicht, einige Encoderparameter im Handumdrehen neu zu konfigurieren. Die libx264- und libx265-Encoder-Wrapper von ffmpeg könnten theoretisch die CRF- oder andere Encoderparameter in einem bestimmten Bereich von Zeitstempeln separat von x264 einstellen. " Zonen "Funktion.
ffmpeg hat Start- / Stop-Bereiche für Filter. Daher enthält die Befehlszeilen- / Optionsanalyse wahrscheinlich den Großteil des Codes, der für die Verarbeitung dieses Befehls erforderlich ist.
Aber AFAIK ist dies derzeit nicht implementiert. ffmpeg -h encoder=libx265
zeigt nichts relevantes; -x265-params
wird analysiert, um den Encoder einmalig beim Start zu konfigurieren, und es werden nur ein paar andere Optionen unterstützt. ( libx264
hat viele weitere ffmpeg-Optionen, aber keine Zonen, die ich sehen kann.)
Gibt es einen alternativen Weg, um mit -vf mpdecimate
(oder einer beliebigen VFR-Quelle) zu codieren und CRF30 für den Großteil des Videos zu haben, aber CRF = 24 von 00:30:00
zum 00:30:30
Beispiel?
In meinem Fall gibt es einen visuell interessanten Clip, der es wert ist, etwas mehr für die Qualität auszugeben, und ich möchte das Video lieber nicht abhacken und MKVs geordnete Kapitel verwenden, um dies zu ermöglichen. Wenn es dafür eine einfache ffmpeg
Syntax gibt (vor allem in einem Durchlauf), wäre das schön. Etwas, das in eine Bash-Shell "one liner" passt, ist das, was ich anstrebe.
Um dies mit Zonen zu tun, denke ich, ich muss das Video durchlaufen mpdecimate
und die Bildnummern des Beginns / Endes dieses Zeitbereichs herausfinden. Ich denke, ich müsste das Video über die eigenständige x265
CLI laufen lassen, da Zonen meiner Meinung nach eine Funktion des Befehlszeilen-Frontends und nicht der Bibliothek selbst sind. (Und somit nicht unterstützt -x265-params
, um Schlüssel / Wert-Paare an libx265 zu übergeben).
Ich habe geprüft, ob Handbrake irgendeine Art von Zonen unterstützt, und ich sehe es nicht in der GUI. (Und das Handbrake 1.0.7-Paket von Arch Linux verwendet immer noch x265 2.1, daher gibt es nicht einmal die aktualisierten Lambda-Tabellen von x265 2.4, die vor mehr als 9 Monaten auf den Markt kamen.) Handbrake ist nett, außer dass private Codecs veraltet sind gegen die Systemversion zu bauen, was für x265 definitiv immer noch von Bedeutung ist.)
0 Antworten auf die Frage
Verwandte Probleme
-
4
Wie kann ich die Größe eines riesigen MP4-Videos reduzieren?
-
2
Wie verwende ich meine GPU, um die Videocodierung zu beschleunigen?
-
4
Wie füge ich Clips von einer DVD in eine Website ein?
-
2
Wie kann ich eine VRO-Datei in eine AVI-Datei kodieren?
-
7
Mit welchem Tool kann ich DVD-Filme rippen?
-
1
Wie kann ich Probleme mit Interlaced-Video-Ruckeln / -Schnipsen bei der Wiedergabe auf DVD-Playern b...
-
1
So zeigen Sie veoh.com-Videos mit HT03-A Android an
-
3
Videocodierung für die Archivierung
-
9
Gibt es eine Möglichkeit, x264-Codierungsaufträge auf mehrere Computer zu verteilen (um die Codierun...
-
3
Wie konvertiert man mjpg-Dateityp mithilfe von ffmpeg in flv?