Wie verwende ich FFmpeg und rav1e, um hochwertige AV1-Dateien zu erstellen?

Wie verwende ich FFmpeg und rav1e, um hochwertige AV1-Dateien zu erstellen?

Ich verwende derzeit Ubuntu Focal Fossa 20.04 LTS und möchte hochwertige AV1-Dateien mit FFmpeg und librav1e erstellen. Angespornt wurde ich durch dieZusatzder Rav1e-Unterstützung für FFmpeg als „librav1e“.

Das Material, mit dem ich arbeiten möchte, finden Sie hier:

  1. Sintel-Trailer-Video(720p unkomprimiert 1,7 GB)
  2. Audio des Sintel-Trailers(flac 5 MB)

Die Rav1e-Unterstützung unter FFmpeg steckt noch in den Kinderschuhen, und es gibt noch nicht viel Dokumentation und veröffentlichte Experimente. Es wäre toll, wenn alles unter einer Ubuntu-LTS-Version funktionieren würde!

Antwort1

Es sieht so aus, als ob dieses Ziel in 4 erreicht werden kannrelativ einfachSchritte, wodurch Ubuntu Focal Fossa 20.04 LTS die AV1-Kodierung mit FFmpeg und rav1e in den Griff bekommt!

1. Holen Sie sich eine aktuelle Kopie von Rust ...

Focal Fossa und rav1e profitieren von einer neueren Version von Rust. Besorgen Sie sich daher wie folgt eine neuere Kopie:

sudo apt-get install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Befolgen Sie die Standardeinstellungen (drücken Sie einfach die Eingabetaste) und führen Sie dann Folgendes aus, um Ihre aktuelle Shell zu konfigurieren:

source $HOME/.cargo/env

um sofortigen Zugriff auf die neuesten Rust- und Co.-Versionen zu ermöglichen. Denken Sie daran, diese Installation von Zeit zu Zeit zu aktualisieren (insbesondere, wenn Sie Rav1e aus diesem Handbuch aktualisieren), indem Sie Folgendes ausführen:

rustup update

2. Installieren Sie rav1e

Am besten installieren Sie sowohl die ausführbare Datei (der Befehl rav1e --fullhelpzeigt dann Optionen an, die mit der -rav1e-paramsOption innerhalb von FFmpeg verwendet werden können) als auch die Bibliotheken, die FFmpeg zum erfolgreichen Kompilieren und Erstellen von librav1e verwendet.

Zuerst die ausführbare Datei, die einen einfachen Codeblock zum Kopieren und Einfügen verwendet:

sudo apt-get install nasm build-essential pkg-config libssl-dev && 
mkdir -pv $HOME/{bin,ffmpeg_sources,ffmpeg_build} && 
cd $HOME/ffmpeg_sources && 
wget https://github.com/xiph/rav1e/archive/refs/tags/v0.6.3.tar.gz && 
tar xvf v0.6.3.tar.gz && cd rav1e-0.6.3 && 
cargo build --release && 
find target -name rav1e -exec install -m 755 {} $HOME/bin \; && 
strip ~/bin/rav1e && \
cd $HOME/ffmpeg_sources && rm -rfv rav1e-0.6.3

Installieren Sie als nächstes das cargo-cApplet sowie die von FFmpeg benötigten Bibliotheken und die pkg-config-Datei. Führen Sie zunächst eineinmaligBefehl zur Installation cargo-c:

cargo install cargo-c

und dann kompilieren rav1ewiedermit dem installierten cargo-c:

cd $HOME/ffmpeg_sources && tar xvf v0.6.3.tar.gz && \
cd rav1e-0.6.3 && \
cargo cinstall --release \
     --prefix=$HOME/ffmpeg_build \
     --libdir=$HOME/ffmpeg_build/lib \
     --includedir=$HOME/ffmpeg_build/include

Am besten entfernen Sie dann die rav1egemeinsam genutzte Bibliotheken, etwas verlassenstatische Bibliothekenfür FFmpeg zu holen (FFmpeg hat ein Problem mit den gemeinsam genutzten rav1e Bibliothekenan diesem Standortauf meinem System):

rm -v $HOME/ffmpeg_build/lib/librav1e.so*

3. Installieren Sie FFmpeg

Gehen Sie jetzt zudie FFmpeg-Trac-Siteund installieren Sie FFmpeg wie angewiesen. Denken Sie daran, Folgendes hinzuzufügen:

--enable-librav1e

an die ./configureSaite. Dann ist die harte Arbeit erledigt :)

4. Führen Sie den Encoder aus

Anschließend kann eine sehr sinnvolle Kodierung für die in der ursprünglichen Frage erwähnten Testdateien ausgeführt werden:

ffmpeg -i sintel_trailer_2k_720p24.y4m -i sintel_trailer-audio.flac \
       -c:v librav1e -qp 80 -speed 4 \
       -tile-columns 2 -tile-rows 2 \
       -c:a libfdk_aac -b:a 128k \
       sintel_trailer_av1.mp4

Zu manipulieren wären hier beispielsweise:

  • -qp 80: Verwendet den Quantisierungsmodus zum Kodieren mit einem Bereich von 0-255. Kleinere Werte bedeuten eine höhere Qualität, der Standardwert ist 100. 80 scheint der optimale Wert für diesen Medienclip zu sein.
  • -speed 4: Wählt die Geschwindigkeitsvorgabe (0-10) für die Kodierung aus. 0 ist die beste Qualität, 10 die schnellste. Diese spezielle Einstellung ist auf meinem System (Threadripper der 2. Generation) ein guter Kompromiss zwischen Geschwindigkeit und Qualität.
  • -tile-columns 2 -tile-rows 2Durch die Manipulation von rav1e's können recht gute Geschwindigkeitsverbesserungen erzielt werden.Kachelbasierte KodierungDas hier gegebene Beispiel teilt die Kodierungund Dekodierungin 4 Segmente und scheint eine gute Wahl für das vorgeschlagene Eingabevideo zu sein, Sie können aber gerne experimentieren.

Dies kodiert um ein Vielfaches schneller als FFmpeg und libaom-av1 und erzeugt wohl eine weitaus bessere Qualität. Zweifellos kann diese Kodierungszeichenfolge weiter verfeinert werden, und ich werde dies tun, wenn die Kodierung von Rav1e, FFmpeg und AV1 ausgereift ist ...

5. Unentgeltlicher Screenshot

OK, es gibt also einen optionalen 5. Schritt: Erstellen eines Screenshots der laufenden, fertigen Ausgabedatei :)

Bildbeschreibung hier eingeben

Zusätzliche Bemerkungen...

  • FFmpeg-Dokumentation: Die Dokumentation zur FFmpeg-Implementierung der Kodierung mit rav1e kann auch durch Durchsuchen der FFmpeg-Manpages angezeigt werden, entweder man ffmpeg-alloder man ffmpeg-codecs. Denken Sie daran, dass native rav1e-Optionen angezeigt rav1e --helpund in jede FFmpeg-Befehlszeile eingefügt werden können, indem Sie die -rav1e-paramsOption verwenden...

verwandte Informationen