[Ungelöst] AV1 Nvenc mit Ffmpeg

Fabian2602

Enthusiast
Thread Starter
Mitglied seit
30.12.2015
Beiträge
4.858

Kennt sich hier eine mit FFmpeg aus?
Ich würde gerne den Inhalt eines ganzen Ordners in AV1 über Nvenc konvertieren.

  1. Auflösung soll identisch bleiben
  2. Tonspur nur die deutsche mitnehmen - alle anderen verwerfen
  3. Videoformat AV1
  4. Tonformat AAC
  5. CFR 23
  6. Alles zusammen dann in den MKV Container
Jemand einen Plan wie das richtige Commando aussehen würde?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Erstmal bräuchtest du einen FFmpeg Build, der den Commit 5c288a44ad16087c3d3a7563490cb634790e751f enthält.

Zum konvertieren einer Datei:
ffmpeg -i input.mkv -map 0:a:m:language:deu -c:a aac -c:v av1_nvenc -tune:v hq -preset:v p7 -rc:v vbr -cq:v 23 output.mkv
  • Ohne Gewähr, da ungetestet
  • -map 0:a:m:language:deu Wählt alle deutschen Audio Streams aus input.mkv
    • Das funktioniert natürlich nur, wenn auch mindestens ein Stream vorhanden ist, bei dem die entsprechenden Metadaten gesetzt sind
    • Für Video, Untertitel, etc. gilt weiterhin automatische Auswahl
  • -c:a aac
    • Den default AAC Encoder für Audio Streams verwenden
    • Wenn der Stream im Input bereits im gewünschten Format vorliegt kann man stattdessen -c:a copy verwenden
  • -c:v av1_nvenc
    • av1_nvenc als Encoder für Video Streams verwenden
    • Welche Optionen der Encoder hat kann man sich mit ffmpeg -h encoder=av1_nvenc (oder hier) ansehen
    • -tune:v hq Qualität vs. Latenz bevorzugen (sollte bereits default sein)
    • -preset:v p7 NVENC Preset, default wäre p4. Wie sich das auf die Performance auswirkt sieht man hier
    • -rc:v vbr -cq:v 23 rate control und target quality level des Preset überschreiben. NVENC 23 entspricht dabei nicht unbedingt libaom 23!
  • Alle anderen Streams (z.B. Untertitel) werden anhand des Zielcontainers automatisch konvertiert. Um das Originalformat beizubehalten vor dem ersten -c… noch ein -c copy ergänzen
Für den ganzen Ordner kann man sich dann ein entsprechendes Shell Skript (Windows Batch, PowerShell, Bash, Zsh, etc.) schreiben.
 
Ich klinke mich da auch nochmal ein:
Wenn du einen ganzen Ordner encodieren möchtest auf den ADA-Karten, kann du auch 2 oder mehr Prozesse von FFmpeg starten, da 2 encoder vorhanden sind.
Dies sollte den Durchsatz erhöhen an encodierten Files (nicht den Durschsatz pro File), laut SDK NVenc.

Improving Video Quality and Performance with AV1 and NVIDIA Ada Lovelace Architecture
hier mal ein shell-Script, als Vorlage (ich habe von YCbCr mal den Befehl übernommen), sollte so eigendlich funktionieren. Die Files liegen in "C:\temp\" in dem Fall.

@echo off
setlocal enabledelayedexpansion

rem Verzeichnis auslesen
set count=0
for /r c:\temp\ %%f in (*.mkv) do (
set /a count+=1

rem Input- und Output-Dateinamen festlegen
set inputFile=%%f
set outputFile=output_!count!.mkv

rem FFmpeg-Befehl ausführen
if !count! %% 2 == 0 (
start cmd /c ffmpeg -i !inputFile! -map 0:a:m:language.deu -c:a aac -c:v av1_nvenc -tune:v hq -preset:v p7 -rc:v vbr -cq:v 23 !outputFile!
) else (
ffmpeg -i !inputFile! -map 0:a:m:language.deu -c:a aac -c:v av1_nvenc -tune:v hq -preset:v p7 -rc:v vbr -cq:v 23 !outputFile!
)
)

endlocal
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh