Video automatisch „stückeln“ (per Batch)?

  • Moin moin,


    ich bin ziemlicher Laie in Sachen Video und habe mal eine Frage an euch Experten.

    Ich übernehme bei Laufveranstaltung die Zeitmessung und würde gerne jedem Teilnehmer ein kleines Video mit seinem Zieleinlauf anbieten.

    Vorhanden ist eine Videodatei der gesamten Veranstaltung (also z.B. 2 Stunden länge) und eine Liste, wann welcher Teilnehmer über die Ziellinie gelaufen ist.

    Die Software müsste also, wenn z.B. Teilnehmer Nr. 123 nach 30:00 Minuten ins Ziel gekommen ist, aus dem vorhandenen Video den Bereich von 29:50 bis 30:05 Min. ausschneiden, und am besten unter dem Namen „123“ abspeichern.

    Und das ganze dann möglichst automatisch für alle Teilnehmer aus der Ergebnisliste.

    Kann man so etwas mit irgendwelcher Software (Freeware?) realisieren?


    Viele Grüße,

    Thomas

  • Ahoi, Leichtmatrose!


    Ich denke, das wäre unter Umständen möglich mit Batch (CMD oder PowerShell) und ffmpeg. Ich erinnere mich, dass der FOR-Befehl in CMD in der Lage ist, eine Zeile nach der anderen aus einer Textdatei zu verarbeiten und Daten innerhalb von diesen "Datensätzen" nach Position oder bestimmten Zeichen (Token) zu trennen, da könnte man eine Tabelle in einer TK. vorbereiten und diese als CSV ausgeben, so dass der Dateiname und Start- sowie Endzeit des Schnittes (Einlaufzeit + 15 s jeweils berechnen lassen) jeweils z.B. durch Semikola getrennt drin stehen. Am besten der Name als letztes, da Zeitwerte eher eine konstante Länge haben.


    Dann lässt man ffmpeg einen Bereich nach Startposition und Endposition oder Dauer entweder ohne Neucodierung herauskopieren, indem man für Video- und Audiocodec jeweils "copy" festlegt (dann kann es allerdings zu Schwankungen in der tatsächlichen Position der Schneidemarken kommen, je nach dem, wo im Originalvideo eine geeignete Struktur ist), oder man gibt Encodingparameter vor (dann sind die Schnitte exakter, man wird aber etwas Qualität verlieren).


    Im Detail kann ich jetzt gerade aber keine Batchdatei liefern, das müsste erstmal getestet werden.

  • Ja Moin

    Aber die Batchdatei muß man auch erst wieder erstellen, Zeitangaben festlegen, von wo bis wo und so weiter und sofort. Auch wieder zeitraubend. Dann könnte man ja gleich maunell die Bereiche rausschneiden. Erster Gedanke (Freeware) mit VirtualDub2 schneiden. Geht recht flott aber lässt sich nicht im original Format schneiden. Außer das Video befindet sich im AVI-Format was ich bezweifel. Obwohl.....Ich habe es bis heute noch nicht getestet ob man eine MP4,ts,m2ts oder MKV über "Direct Stream Copy" schneiden kann. Müsste man mal testen.

  • Leider habe ich es nicht geschafft, MP4 mit AVC in VirtualDub2 verlustfrei zu schneiden. Mit ffmpeg sollte es aber an IDR-Frames klappen.


    Die Batch-Datei wäre immer die gleiche, weil sie Ausgabedatei-Namen und Schnittzeiten aus einer CSV-Datei lesen könnte.

  • Hallo ihr,


    vielen Dank für eure schnelle Antwort.

    Habe mir mal VirtualDub2 runter geladen.

    Meine Video-Datei lässt sich damit auch öffnen. Aber wie geht's nun weiter?
    Ich kann eine CSV-Datei z.B. nach folgenden Muster erzeugen:
    17:59;18:14;37

    18:05;18:20;36

    18:10;18:25;8

    (Startzeit;Endzeit;Startnummer=Dateiname)

    Aber mit welchen Befehlen bekomme ich es jetzt hin, dass VirtualDub2 die einzelnen Videosequenzen erzeugt?

    Viele Grüße,
    Thomas

  • Die CSV-Datei wäre für Batch (FOR) und ffmpeg. VirtualDub2 kann damit nichts direkt anfangen. Propaganda dachte, du könntest mit VirtualDub2 manuell so schnell schneiden, wie es für das Erstellen der CSV braucht...


    Ich habe festgestellt, dass es ohne Video-Recodierung zu nicht abspielbaren Pausen am Anfang eines Ausschnitts kommen kann. Also lassen wir ffmpeg doch lieber das Video recodieren (CRF 18 ist dafür ein hinreichend hochwertiger Kompromiss). Audio kann ohne Recodierung übernommen werden, das hat üblicherweise kurze Pakete. Als Ausgabeformat lege ich hier mal MKV fest, weil da praktisch alles reinpasst; wenn du andere Vorgaben hast, dann muss ich auch wissen, in welchem Format das Original vorliegt (z.B. MP4 mit AVC und AAC oder AC3?); MediaInfo kann da helfen (ist auch im MPC-HC integriert, in der Clip-Info: Umsch+F10).


    cut.bat

    Code
    1. @ECHO OFF
    2. IF "%1" == "" GOTO NoParam
    3. IF "%2" == "" GOTO NoParam
    4. REM Den Pfad zu ffmpeg hier vollständig angeben, wenn es nicht im gleichen Verzeichnis liegt
    5. FOR /F "tokens=1-3 delims=;" %%a IN (%2) DO ffmpeg -i %1 -codec:v libx264 -q 18 -codec:a copy -ss %%a -to %%b %%c.mkv
    6. EXIT
    7. :NoParam
    8. ECHO Syntax: %0 Mediendatei Cutliste


    In der Eingabeaufforderung dann:

    \>cut.bat Aufzeichnung.mp4 Schnittliste.csv

  • Hallo LigH,


    vielen Dank für Deine ausführliche und verständliche Antwort.

    Damit habe selbst ich es geschafft... wirklich ganz toll!!!


    Das Original kommt aus einer GoPro (mp4) und als Ausgabeformat wäre wohl auch mp4 sinnvoll, oder?
    Jedenfalls ein Format, das direkt im Browser abgespielt werden kann. Oder was bietet sich da an?

    Viele Grüße,
    Thomas

  • MP4 mit AVC sollten viele moderne Browser im HTML5-Tag <video> präsentieren können. In dem Fall kannst du die Endung mkv mit mp4 ersetzen, solltest aber noch die Option -movflags +faststart direkt vor die Ausgabedatei in die Parameterliste einfügen (zwischen %%b und %%c).

  • Hallo LigH,

    danke noch mal für Deine schnelle und kompetente Hilfe!
    Damit ist das Problem mit den "zerstückeln" erstmal soweit gelöst.
    Jetzt muss ich das nur noch ansprechend in die Website basteln...

    Viele Grüße,
    Thomas