m2ts Dateien via Skript zusammenfügen und Ordnernamen vergeben

blackcarghost

Cadet 2nd Year
Registriert
Sep. 2009
Beiträge
26
Hallo zusammen,

ich möchte via Script mehrere Dateien in einem Ordner (maximal 3 Dateien) zusammenfügen.
Es handelt sich hierbei um .m2ts Dateien. Manuel per CMD funktioniert es einwandfrei jedoch sehr mühsam.
Bis jetzt bin ich wie folgt vorgegangen:
cd C:\(Ordnername)
copy /b dateiname01.m2ts + dateiname02.m2ts + dateiname03.m2ts zieldatei.m2ts

Nun wäre ein Script perfekt das die 3 Dateien im Ordner automatisch zusammenfügt und der zusammengefügten Datei den Namen des Ordners geben würde in dem sie aktuell liegen.

Meine Ordnerstruktur sieht wie folgt aus:

FESTPLATTE D:/

FILME (Hauptordner)
------
Urlaub1 (Ordner) - CD1.m2ts+CD2.m2ts
Urlaub2 (Ordner) -CD1.m2ts+CD2.m2ts+CD3.m2ts
Ausflug (Ordner) -CD1.m2ts+CD2.m2ts
Rudertour (Ordner) - CD1.m2ts+CD2.m2ts+CD3.m2ts

Ich hoffe ich hab es verständlich genug erklärt. Leider bin ich was Skripte betrifft ne absolute Nullnummer :)
Hab schon versucht ein vorhandenes Skript umzüandern aber da kommen nur Fehlermeldungen....

Vielen Dank für eure Antworten.
 
Die Idee ist ja nicht schlecht, aber sollte so keinesfalls gemacht werden. Videodateien können nicht einfach zusammenkopiert werden, Du musst das mit einem geeigneten Programm machen, das die Daten konform zusammenfügt und ein Video daraus macht, sonst kann es passieren, dass der Player plötzlich stoppt, Bild- und Tonfehler auftreten oder es plötzlich mitten im Video nicht mehr lippensynchron ist.

Du brauchst eine Art Videoschnittprogramm welches die Dateien ohne Neukodierung einander fügen kann. Müsste mit Programmen wie dem TS-Doctor gelingen.
 
Hm.. hab so schon zig Videos zusammenkopiert und ging einwandfrei. Allerdings nur bei m2ts Dateien. Bei anderen Formaten benötige ich ein Programm, ja.
 
Das geht schon, aber die Videos sind dann alle fehlerhaft in der Struktur, manche Player kommen damit klar, manche nicht. Würde ich nicht mehr auf diesem Wege machen. Du musst dafür ja kein fettes Videoschnittprogramm nehmen, einfach so ein kleines Tool reicht.
 
Kristatos schrieb:
Videodateien können nicht einfach zusammenkopiert werden,
Das hängt vom Format der Videodateien ab. Normalerweise erzeugen Videokameras Dateien, die mit einem Key Frame beginnen - damit können die Dateien sowohl einzeln wiedergegeben wie auch durch einfaches Kopieren zusammengefügt werden.

Falls es dabei Probleme geben sollte, kann man die Dateien auch mit ffmpeg zusammenfügen ... da gibt es concat zum Zusammenfügen von Videodateien.

Als Script
Code:
@ECHO OFF & setlocal enabledelayedexpansion

set Verzeichnis=D:\FILME

:: Schleife über die Unterverzeichnisse
for /f "delims= tokens=*" %%d in ('dir /a:d /b %Verzeichnis%') do (

    :: leere Liste fuer Dateien
    set FileList=""
    :: Name des Unterverzeichnisses
    set DirName=%%d
    :: Filter fuer die zu kopierende Dateien
    set Filter=%Verzeichnis%\!DirName!\*.m2ts
 
    :: Schleife ueber die im Unterverzeichnis enthaltenen Videodateien
    for /f "delims= tokens=*" %%a in ('dir /b !Filter!') do (
      (
        if NOT !FileList!=="" (
	  :: Eintrag zur Liste hinzufuegen
	  set FileList=!FileList!+%Verzeichnis%\!DirName!\%%a
        ) else (
          :: erste Datei - Start der Liste
          set FileList=%Verzeichnis%\!DirName!\%%a
        )
      )
    )
	
    :: wenn Liste erstellt, Dateien kopieren    
    if NOT !FileList!=="" (
      :: Name der Zieldatei = Name des Unterverzeichnisses 
      copy /b !FileList! %Verzeichnis%\!DirName!\!DirName!.m2ts
    ) 
)

Mit ffmpeg würde das so aussehen:
Code:
@ECHO OFF & setlocal enabledelayedexpansion

set Verzeichnis=D:\FILME

:: Schleife über die Unterverzeichnisse
for /f "delims= tokens=*" %%d in ('dir /a:d /b %Verzeichnis%') do (

    :: leere Liste fuer Dateien
    set FileList=""
    :: Name des Unterverzeichnisses
    set DirName=%%d
    :: Filter fuer die zu kopierende Dateien
    set Filter=%Verzeichnis%\!DirName!\*.m2ts
 
    :: Schleife ueber die im Unterverzeichnis enthaltenen Videodateien
    for /f "delims= tokens=*" %%a in ('dir /b !Filter!') do (
      (
        if NOT !FileList!=="" (
	  :: Eintrag zur Liste hinzufuegen
	  set FileList=!FileList!^|%Verzeichnis%\!DirName!\%%a
        ) else (
          :: erste Datei - Start der Liste
          set FileList=%Verzeichnis%\!DirName!\%%a
        )
      )
    )
	
    :: wenn Liste erstellt, Dateien kopieren    
    if NOT !FileList!=="" (
      :: Name der Zieldatei = Name des Unterverzeichnisses 
      ffmpeg -i "concat:!FileList!" -c copy %Verzeichnis%\!DirName!\!DirName!.m2ts
    ) 
)
 
Zuletzt bearbeitet: (ffmpeg ergänzt)
Hallo Andreas und vielen Dank für deine Hilfe.
Wenn ich dein Skript so übernehme bekomme ich folgende Fehlermeldungen:

PS C:\WINDOWS\system32> C:\Users\BlackJack\Desktop\Unbenannt1.ps1
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:1 Zeichen:11
+ @ECHO OFF & setlocal enabledelayedexpansion
+ ~~~
Unerwartetes Token "OFF" in Ausdruck oder Anweisung.
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:1 Zeichen:15
+ @ECHO OFF & setlocal enabledelayedexpansion
+ ~
Das kaufmännische Und-Zeichen (&) ist nicht zulässig. Der &-Operator ist für eine zukünftige Verwendung reserviert. Verwenden Sie das kaufmännische Und-Zeichen in
doppelten Anführungszeichen ("&"), um es als Teil einer Zeichenfolge zu übergeben.
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:6 Zeichen:8
+ for /f "delims= tokens=*" %%d in ('dir /a:d /b %Verzeichnis%') do ...
+ ~
Öffnende "(" fehlt nach dem Schlüsselwort "for".
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:8 Zeichen:36
+ :: leere Liste fuer Dateien
+ ~
Schließende ")" fehlt in einem Ausdruck.
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:16 Zeichen:12
+ for /f "delims= tokens=*" %%a in ('dir /b !Filter!') do (
+ ~
Öffnende "(" fehlt nach dem Schlüsselwort "for".
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:19 Zeichen:40
+ :: Eintrag zur Liste hinzufuegen
+ ~
Schließende ")" fehlt in einem Ausdruck.
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:21 Zeichen:15
+ ) else (
+ ~~~~
Unerwartetes Token "else" in Ausdruck oder Anweisung.
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:21 Zeichen:14
+ ) else (
+ ~
Schließende ")" fehlt in einem Ausdruck.
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:22 Zeichen:47
+ :: erste Datei - Start der Liste
+ ~
Schließende ")" fehlt in einem Ausdruck.
In C:\Users\BlackJack\Desktop\Unbenannt1.ps1:24 Zeichen:13
+ )
+ ~
Unerwartetes Token ")" in Ausdruck oder Anweisung.
Es wurden nicht alle Analysefehler berichtet. Korrigieren Sie die berichteten Fehler, und versuchen Sie es erneut.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken

kannst du mir vielleicht sagen was ich dabei noch falsch mache?
 
Es handelt sich dabei um ein Batch Script. Muss also als *.cmd abgespeichert werden. :)
 
Zurück
Oben