FFMPEG Script Schleife: vorher überprüfen, ob die Zieldatei vorhanden ist
Um timelapse Videos zu erstellen, muss ich ca. 14.000 CCTV Videos in 5 Minuten Stücke splitten.
Das mache ich mit diesem FFMPEG Befehl in einer Batch Datei:
for %%i in (e:\repaired\*.mov) do ffmpeg -n -i "%%i" -c copy -map 0 -segment_time 00:05:00 -f segment -reset_timestamps 1 "f:\cut\%%~ni_05_min__%%08d.mov"
14,5 TB Videos von eine Platte auf die andere dauert ca. 3 Tage, kein Problem mit Zweitrechner in der Besenkammer.
Aber nach Stromausfällen (die hier auf meiner Philippinen Insel oft vorkommen) den ganzen Vorgang immer wieder von vorne starten zu müssen, das ist richtig blöd.
Ich würde zusätzlichen Zeitaufwand nach Stromausfällen gerne vermeiden.
Die globale Option -n in FFMPEG sollte auf die "Überschreiben?" Frage zwar automatisch NEIN antworten, aber diese Frage wird gar nicht gestellt, FFMPEG überschreibt grundsätzlich ohne Gnade.
FFMPEG erzeugt bei jedem Durchlauf IMMER ALLE Zieldatein; selbst wenn von 300.001 Zieldateien nur noch eine einzige fehlt.
NERVIG !
Es muss doch möglich sein, vorher kurz zu überprüfen, ob die Zieldatei bereits besteht und -falls ja- direkt zum nächsten Video zu springen, oder?
Aber das würde eine "check Zieldatei Schleife" in der bestehenden FFMPEG Schleife erfordern.
Puh....
Wahrscheinlich keine große Sache für jemand, der Coden kann, aber ich kann das eben nicht.
Wäre super, wenn mir hier jemand weiterhelfen kann.
Hintergrund:
Mittels Suchen und Trial and Error habe ich mir einige Scripte zusammengebastelt, um aus einer vollen CCTV HDD (16 TB) mit FFMPEG timelapse Videos zu erstellen.
Insgesamt sind auf einer HDD ca. 14.000 Videos, jede Videodate ca. 1 GB.
Manuell geht da gar nix, die Verarbeitung muss schnell und automatisch ablaufen.
Die üblichen Videobearbeitungsprogramme sind bei dieser Aufgabenstellung übrigens völlig überfordert und wären viel zu lange beschäftigt; mir würden graue Haare wachsen vor lauter Klickerei.
Die einzelnen automatischen Arbeitsschritte zu den timelapse Videos erfodern, dass alle Videos einige Male zwischen 16TB Festplatten hin und her kopiert werden müssen.
- Auslesen der Originaldateien von der HDD des CCTV Recorders
- Reparieren der Timeline plus Entfernen der Audiospur
- Teilen der Videos in 5 Minuten Segmente
Anschliessend extrahiert FFMPEG aus der ersten Sekunde jedes Videoschipsels ein JPG in bester Qualität (schnellste Methode um Fotos aus sehr vielen Videos zu extrahieren).
Aus diesen Fotos erstellt FFMPEG dann nette timelapse Videos mit H.265 Komprimierung.
Das mache ich mit diesem FFMPEG Befehl in einer Batch Datei:
for %%i in (e:\repaired\*.mov) do ffmpeg -n -i "%%i" -c copy -map 0 -segment_time 00:05:00 -f segment -reset_timestamps 1 "f:\cut\%%~ni_05_min__%%08d.mov"
14,5 TB Videos von eine Platte auf die andere dauert ca. 3 Tage, kein Problem mit Zweitrechner in der Besenkammer.
Aber nach Stromausfällen (die hier auf meiner Philippinen Insel oft vorkommen) den ganzen Vorgang immer wieder von vorne starten zu müssen, das ist richtig blöd.
Ich würde zusätzlichen Zeitaufwand nach Stromausfällen gerne vermeiden.
Die globale Option -n in FFMPEG sollte auf die "Überschreiben?" Frage zwar automatisch NEIN antworten, aber diese Frage wird gar nicht gestellt, FFMPEG überschreibt grundsätzlich ohne Gnade.
FFMPEG erzeugt bei jedem Durchlauf IMMER ALLE Zieldatein; selbst wenn von 300.001 Zieldateien nur noch eine einzige fehlt.
NERVIG !
Es muss doch möglich sein, vorher kurz zu überprüfen, ob die Zieldatei bereits besteht und -falls ja- direkt zum nächsten Video zu springen, oder?
Aber das würde eine "check Zieldatei Schleife" in der bestehenden FFMPEG Schleife erfordern.
Puh....
Wahrscheinlich keine große Sache für jemand, der Coden kann, aber ich kann das eben nicht.
Wäre super, wenn mir hier jemand weiterhelfen kann.
Hintergrund:
Mittels Suchen und Trial and Error habe ich mir einige Scripte zusammengebastelt, um aus einer vollen CCTV HDD (16 TB) mit FFMPEG timelapse Videos zu erstellen.
Insgesamt sind auf einer HDD ca. 14.000 Videos, jede Videodate ca. 1 GB.
Manuell geht da gar nix, die Verarbeitung muss schnell und automatisch ablaufen.
Die üblichen Videobearbeitungsprogramme sind bei dieser Aufgabenstellung übrigens völlig überfordert und wären viel zu lange beschäftigt; mir würden graue Haare wachsen vor lauter Klickerei.
Die einzelnen automatischen Arbeitsschritte zu den timelapse Videos erfodern, dass alle Videos einige Male zwischen 16TB Festplatten hin und her kopiert werden müssen.
- Auslesen der Originaldateien von der HDD des CCTV Recorders
- Reparieren der Timeline plus Entfernen der Audiospur
- Teilen der Videos in 5 Minuten Segmente
Anschliessend extrahiert FFMPEG aus der ersten Sekunde jedes Videoschipsels ein JPG in bester Qualität (schnellste Methode um Fotos aus sehr vielen Videos zu extrahieren).
Aus diesen Fotos erstellt FFMPEG dann nette timelapse Videos mit H.265 Komprimierung.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6191061968
Url: https://administrator.de/contentid/6191061968
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
11 Kommentare
Neuester Kommentar
@echo off &setlocal enabledelayedexpansion
for %%i in (e:\repaired\*.mov) do (
set "outfile=f:\cut\%%~ni_05_min__%%08d.jpg"
if not exist "f:\cut\%%~ni_05_min__00000001.jpg" (
echo Erstelle Dateien für "%%i" ...
ffmpeg -n -i "%%i" -c copy -map 0 -segment_time 00:05:00 -f segment -reset_timestamps 1 "!outfile!"
) else (
echo Files für "%%i" existieren schon im Zielordner, ueberspringen sie ...
)
)
Aber nach Stromausfällen (die hier auf meiner Philippinen Insel oft vorkommen) den ganzen Vorgang immer wieder von vorne starten zu müssen, das ist richtig blöd.
2 Solarpanels, ne Batterie und Laderegler kaufen, dann jucken dich die Stromausfälle nicht mehr ... Sonne gibt's da ja reichlich 😁Gruß auf die Insel 🏝️
Walang problema ✌️
Good luck.
Good luck.
Klappt hier überall und schon seit ewigen Zeiten einwandfrei, da ist ja nun nix aufregendes drin, das "if not exist <Pfad>" ist simpelste Kacke.
Einfach mal den ffmpeg Befehl durch ein Echo des Pfades ersetzen dann siehst du es Schwarz auf Weiß, habe es oben etwas ausführlicher mit Info geschrieben.
Und RTFM hilft im Zweifel immer dem Neuling !
https://ss64.com/nt/if.html
Nur zur Info, das ganze gehört natürlich in eine Batchdatei und nicht nur in die Konsole gepastet! So funktioniert das nämlich nicht direkt auf der Konsole, da dort stattdessen einzelne Prozentzeichen erwartet werden!
Es schien mal kurz zu funktionieren, aber mittlerweile läuft es auf allen meinen getesteten Systemen doch nicht.
Dann sind deine Angaben nicht i.O. und du hast evt Schlangenöl auf deinem System was die Dateien bei jedem Zugriff anfasst und dich nur denken lassen das sie überschrieben werden.Einfach mal den ffmpeg Befehl durch ein Echo des Pfades ersetzen dann siehst du es Schwarz auf Weiß, habe es oben etwas ausführlicher mit Info geschrieben.
Und RTFM hilft im Zweifel immer dem Neuling !
https://ss64.com/nt/if.html
Nur zur Info, das ganze gehört natürlich in eine Batchdatei und nicht nur in die Konsole gepastet! So funktioniert das nämlich nicht direkt auf der Konsole, da dort stattdessen einzelne Prozentzeichen erwartet werden!
Erstelle" ist ein FEHLER, denn die Dateien bestehen ja bereits (zweiter Durchlauf!).
Korrekt wäre, wenn die Zieldateien übersprungen würden.
Korrekt wäre, wenn die Zieldateien übersprungen würden.
Dein Skript in deinem letzten Post erstellt aber gar keine Dateien im ersten Durchlauf somit existieren sie im zweiten Durchlauf nicht und können auch nicht übersprungen werden, logisch oder ?
Außerdem ein Fehler ist deiner Pfaddefinition
set "outfile=cut\%%~ni_06_sek__%%08d.mov"
Setze überall absolute Pfade und mach es so wie es im ersten Post steht dann klappt das auch zu 100%!Es geht hier nicht um Meinungen, sondern um Code, der entweder funktioniert oder nicht funktioniert.
Das ist keine Meinung sondern ein Fakt. Wenn du einfach Dinge fehlerhaft abänderst kann ich tun was ich will. Mein Skript oben läuft 100% und wurde natürlich getestet! Ich mach das ja nicht erst seit gestern, monsieur!Verunglimpfungen und Beschimpfungen bringen niemand weiter und keinen Code zum Laufen.
Ich bitte daher um konstruktive Fehleranalyse und -beseitung in angemessenen Tonfall.
Ähm was ist jetzt los? Woraus liest du das? Ich habe hier niemanden beleidigt beschimpft... Zu viel Sonne abbekommen?Ich bitte daher um konstruktive Fehleranalyse und -beseitung in angemessenen Tonfall.
Ich bin raus.