ffmpeg Hilfe: Batch Remux Video + Extract Audio

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Das Internet ist in Gefahr, und du kannst es retten! Die geplante Urheberrechts-Richtlinie des EU-Parlaments bedroht jeden Let's Player und gefährdet das Fortbestehen des LetsPlayForums. Klicke hier, um mehr zu erfahren!

  • ffmpeg Hilfe: Batch Remux Video + Extract Audio

    Anzeige
    Hi Leute,

    bin recht unbeholfen was ffmpeg angeht, wollte mich aber mal daran versuchen um folgendes zu erreichen:
    Mit OBS aufgenommene Videos (nvenc/h2.64 + 2x AAC audio spuren) den Ton extrahieren und den video stream von *.mkv in *.mp4 remuxen.
    Warum ? Ton = Nachbearbeitung / Video = Zwar kann TMPGenc die *.mkv spur einlesen - jedoch ist die (jeweils mit geringeren CQP) arg schwer zu spulen.
    Ja, OBS selbst kann schon mkv in mp4 remuxen, aber kein batch soweit ich das sehe (mal vom Ton extrahieren abgesehen).

    Bin noch bis heute Abend unterwegs, wollte aber schonmal fragen ob das hier in die richtige Richtung geht:

    -map 0
    for %%a in ("*.mkv") do ffmpeg -i "%%a" -vn -acodec copy "newfiles\%%~na.aac"
    for %%a in ("*.mkv") do ffmpeg -i "%%a" -vcodec copy -an "newfiles\%%~na.mp4"
    pause


    Sollte das grundsätzlich funktionieren um alle *.mkv im ordner der *.bat file zu ergreifen und den 1. Ton extrahieren 2. Video remuxen ?
    Über Tipps und elegantere Ansätze würde ich mich immer freuen :D Danke euch!
  • Hallo,

    ich habe nicht genau verstanden was du machen willst?
    Die erste Tonspur extrahieren und den Videostream als mp4 muxen?

    Ich mache es mal für ein Video:


    Shell-Script

    1. ffmpeg -i input.mkv -map 0:0 -c copy -movflags +faststart out.mp4
    2. ffmpeg -i input.mkv -map 0:1 -c copy out.aac
    das würde dann nur das video im mp4 conatiner enthalten und du hättest den ersten audiotrack als aac

    die streams werden dabei nur kopiert
  • Heyo,

    Videostream als mp4 muxen - ja. Aber beide Tonspuren extrahieren. Wie sähe das mapping command dann aus ?

    Genau, will auch nur das copy (kopieren) zum reinen remuxen / extrahieren.

    EDIT
    Nehme ich richtig an das "-movflags +faststart" der Spulbarkeit hilft da die metadate an den Anfang geschrieben werden ?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MaxxPuzzles ()

  • du nutzt einfach -map

    -map 0:0 == 1. Stream (video)
    -map 0:1 == 2. Stream (1. audio spur)
    -map 0:2 == 3. Stream (2. audio spur)
    usw

    die führende null ist einfach der erste input

    also
    -i file1.mkv -i file2.mkv -map 0:0 -map 1:1 -c out.mp4

    würde dann zB den video stream von file1 und den audio stream von file2 muxen
  • Anzeige
    So, bin jetzt auf folgenden Befehl raus:


    Quellcode

    1. for %%a in ("*.mkv") do ffmpeg -i "%%a" -map 0:0 -c copy -movflags +faststart "%%~na.mp4"
    2. for %%a in ("*.mkv") do ffmpeg -i "%%a" -map 0:1 -c copy "Track1%%~na.aac"
    3. for %%a in ("*.mkv") do ffmpeg -i "%%a" -map 0:2 -c copy "Track2%%~na.aac"
    4. pause
    Der macht folgendes:
    1. Videostream aus jeder MKV datei im ausgeführten Ordner in eine neue MP4 datei muxen (Name bleibt dabei gleich - nur andere container endung).
    2. Den AAC Ton aus der MKV in jeweils Track 1 und Track 2 extrahieren.

    Läuft super! Jetzt spare ich mir das Remuxen aus OBS und muss danach auch nicht noch extra mkvextract nehmen!

    Danke @Schauerland für das erklären der mapping Funktion.
  • das -movflags +faststart bewirkt übrigens bei mp4, dass der index an den Anfang der Datei geschrieben wird in einem 2. pass.

    das dauert etwas länger aber dafür kann die Datei schneller eingelesen werden später.
    Du musst das also nicht zwingen mit reinnehmen - ich würde es aber empfehlen.

    Du kannst das auch in einem loop machen:

    Quellcode

    1. for %%i in (".\*.mkv") do (
    2. ffmpeg -i "%%i" -map 0:0 -c copy -movflags +faststart "%%~ni.mp4"
    3. ffmpeg -i "%%i" -map 0:1 -c copy "Track1%%~ni.aac"
    4. ffmpeg -i "%%i" -map 0:2 -c copy "Track2%%~ni.aac"
    5. )