FFmpeg mehrere Dateien zusammenführen automatisieren

  • Hallo,

    ich habe hier mehrere Serien wo Video und Audio in getrennten Dateien abgespeichert sind.
    Mit FFmpeg habe ich es nun geschafft die beiden Dateien zusammenzuführen.

    Dazu habe ich folgenden Befehl verwendet:

    Code
    ffmpeg -i "Folge 10_VIDEO_1920x1080.mp4" -i "Folge 10_AUDIO_audio-stereo-hi.mp4" -c copy E10.mp4

    Da ich diesen Befehl allerdings für jede einzelne Folge ausführen muss würde ich das ganze gerne mit einem Skript automatisieren. Leider weiß ich aber nicht wie so ein Skript aufgebaut werden muss bzw. weiß ich die Befehle dafür nicht, damit automatisch immer die beiden richtigen Dateien zusammengefügt werden.

    LG
    fireb

  • Die Dateien sind durchnummeriert. Sind aber von der Bezeichnung sonst identisch.

    Also so zb:

    Derzeit liegen sie auf meinem Rechner mit Windows 10. Ich habe aber auch einen Rechner mit einem Debian Linux.

  • System wollte ich nur wissen damit ich weiß wofür das ist.

    Brainfuck: convert.bat
    @echo off
    set zaehler=0
    Setlocal EnableDelayedExpansion
    for /r "%cd%" %%i in ("Folge"*"VIDEO"*".mp4") do (
    set /A zaehler=zaehler+1
    if  !zaehler! LSS 10 echo start /wait ffmpeg -i "%%i" -i "Folge 0!zaehler!_AUDIO_audio-stereo-hi.mp4" -c copy E0!zaehler!.mp4 
    if  !zaehler! GEQ 10 echo start /wait ffmpeg -i "%%i" -i "Folge !zaehler!_AUDIO_audio-stereo-hi.mp4" -c copy E!zaehler!.mp4
    )
    pause

    Das kommt in eine batch Datei im selben Verzeichnis. und wird ausgeführt.
    Im Moment sind in den if Angaben noch echo angaben so das du erstmal prüfen kannst was da ausgeführt wird.
    ffmpeg muss da im selben verzeichnis sein oder "global" aufgerufen werden können.

    Eine Warnung noch - im Moment ist das recursiv - also alle Unterverzeichnisse werden auch betroffen.
    Und ganz wichtig: es funktioniert nur wenn alle Folgen ausnahmslos da sind.

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

    4 Mal editiert, zuletzt von SkyBird1980 (5. Februar 2020 um 15:30)

  • Danke das Skript!
    Ich musste es etwas abändern, dann hat es bei mir einwandfrei funktioniert. Wenn man es nämlich mit deiner Version startet, dann sind die Dateinamen für die Audio- Dateien falsch. zB.: "Folge 01"_AUDIO_audio-stereo-hi.mp4"
    Richtig wäre hier aber "Folge 1_AUDIO_audio-stereo-hi.mp4"

    Ich habe jetzt das Skript entsprechend angepasst und nach dem testen auch das "echo" entfernt.

    Brainfuck
    @echo off
    set zaehler=0
    Setlocal EnableDelayedExpansion
    for /r "%cd%" %%i in ("Folge"*"VIDEO"*".mp4") do (
    set /A zaehler=zaehler+1
    if  !zaehler! LSS 10 start /wait ffmpeg -i "%%i" -i "Folge !zaehler!_AUDIO_audio-stereo-hi.mp4" -c copy E!zaehler!.mp4 
    if  !zaehler! GEQ 10 start /wait ffmpeg -i "%%i" -i "Folge !zaehler!_AUDIO_audio-stereo-hi.mp4" -c copy E!zaehler!.mp4
    )
    pause

    Damit hat das Zusammenfügen von Video und Audio Datei einwandfrei funktioniert.

    Vielen Dank noch einmal für die Hilfe!

  • Ach LOL :D und ich hab mir da Gedanken gemacht wegen der führenden Null. So hast du jetzt manämlich das "Phänomen" das es beim listen im Explorer verkehrt ist.
    Deshalb sind es ja 2 Reihen. Aber du hast Recht, ich hätte mir das Listing vorher nochmal angucken müssen.
    Das mit dem " zuviel ... naja ok Künstlerpech :D deshalb sag ich ja vorher angucken.

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

  • Das ist doch kein Problem

    Jetzt ist mir noch aufgefallen, dass ich doch noch andere Dateien habe, welche nicht durchnummeriert sind sondern den Namen der Folge im Dateinamen haben.
    Hast Du da eventuell auch eine Lösung um diese Dateien zusammenzufügen?

    Aussehen würde das ganze so:

  • @fireb
    hm, let's try...

    Code
    @echo off
    Setlocal EnableDelayedExpansion
    for /r %%i in (*"VIDEO"*.mp4) do (
    for /f "delims=_ tokens=1" %%f in ("%%~ni") do (
    echo start /wait ffmpeg -i "%%i" -i "%cd%\%%f_AUDIO_audio-stereo-hi.mp4" -c copy "%%f.mp4"
    )
    )

    Wieder mit echo, first schauen obs gut wird oder nicht.

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

    3 Mal editiert, zuletzt von SkyBird1980 (7. Februar 2020 um 15:16)

  • Kleiner Input am Rande, wenn du für sowas andere Dateiänderungen nutzt (z.b. mpv und mpa) wäre die batch einfacher zu bewerkstelligen. So machst du es dir nur selbst schwer :D

    Kleines Beispiel

    Code
    for %%f in (*.mpv) do (
    blabladeincommand
    )
  • @quorn23
    Erzähl bitte mal ein bissl mehr.
    Wie ich nur die Dateien mit der Endung raussortier ist schon klar.
    Nur wüsste ich nicht wie das in diesem speziellen fall hilft.

    Um das Script mal auseinander zu nehmen
    @echo off man sieht die Eingaben nicht mehr.
    Setlocal EnableDelayedExpansion Sorgt dafür das ich die Variablen in der Batch weiter nutzen kann
    for /r %%i in (*"VIDEO"*.mp4) do ( öffnet eine Schleife und sucht nach den Dateien im aktuellen Verzeichnis mit dem String Video drin und der Endung .mp4 - wird gespeichert in der Variable %i
    for /f "delims=_ tokens=1" %%f in ("%%~ni") do ( Sucht in der Variable i ohne die Endung nach dem Vorkommen von _ und teilt das in diesem Fall nur nach dem ersten vorkommen - wird gespeichert in der Variable %f
    echo start /wait ffmpeg -i "%%i" -i "%cd%\%%f_AUDIO_audio-stereo-hi.mp4" -c copy "%%f.mp4" gibt solange das echo drin ist den Befehl aus der die Video Datei %i mit der Datei %f - mit Audiostring im aktuellen Verzeichnis %cd% in der Datei %f gemerged wird.
    )) schließt beide Schleifen.

    Das ist halt auf das spezielle zweite Beispiel des TO gemünzt.
    Wie hättest Du das gemacht?

    --------------
    Guides nicht mehr verfügbar wegen Youtube unvermögen guten von schlechten Kodi Videos zu unterscheiden.

    5 Mal editiert, zuletzt von SkyBird1980 (7. Februar 2020 um 15:32)

  • Hi @SkyBird1980

    Der Input war eher an den OT gerichtet, nicht an dich. :D
    Mit deiner Batchdatei ist nichts verkehrt, was ich in diesem speziellen Fall anders gemacht hätte.
    Finde es grosse Klasse, dass du deinen Ablauf auseinander genommen hast, falls jemand mit so etwas Hilfe benötigt. :thumbup: :love:
    Da mein Input in kurz "Nutzt klare Dateiendungen, damit macht ihr Euch das Leben einfacher" ist, denke ich ist deine Frage an mich damit beantwortet.
    Bisschen detailierter, ich hätte kurzerhand die Dateien unbenennt, damits in ne einfache Schlaufe passt. (Tipp für die Mitleser, unter Windows ruckzuck mit "AntRenamer")

    Als Beispiel, welches ich auf dem Windowsrechner im Einsatz habe, für Animationen gibt es den Yuuki x265 custom build, welche ich hin und wieder für Gedöns wie Family Guy und co nutze, da die Dateigrösse vs Qualität absolut wunderbar ist, ohne mit Konvertierungssettings zu feilen. Dieser konvertieret bloss Video, daher zerpflücke ich das File erst in Video/Audio, konvertiere mit dem Build und setze mir am Schluss die Datei wieder komplett zusammen.

    Dies ist die "von A-Z" Batch, hoffe damit habe ich dir die Frage beantwortet, warum ich OT empfehle andere Endungen für verschiedene Dinge zu nutzen.
    Auch wenns für dein Skript bloss ein "Dat passt!" ist. :P

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!