Im Grunde müssen Sie die Dateien nur nachschlagen (in einer Variablen speichern) und dann die gesuchten Dateien in FFmpeg einspeisen.
Natürlich wäre die Batch-Sprache von Windows dafür ausreichend . Da ich aber keine Erfahrung damit habe, folgt hier ein PowerShell-Skript:
# Searching for files with the Get-ChildItem cmdlet and saving their relevant properties in an array: # NOTE: -File will only work with PowerShell-versions >= 3. [array]$FilesToRotate = Get-ChildItem -Path "C:\PATH_TO_FILES" ((-Filter *.mp4)) ((-Recurse)) -File | ForEach-Object { # NOTE: This part is a bit tricky - I just added it so I'm able to save the parent-path of each file in an object. # NOTE: One could also omit the whole ForEach-Object and use the Split-Path cmdlet inside the output-file's specification in FFmpeg's code. [PSCustomObject]@{ InFullName = $_.FullName # Will put the output-file in the same folder as the input-file and add "_ROTATION" as suffix in its name. OutFullName = "$(Split-Path -Parent -Path $($_.FullName))\$($_.BaseName)_ROTATE$($_.Extension)" } } # Processing the files with FFmpeg using PowerShell's Start-Process cmdlet: for($i=0; $i -lt $FilesToRotate.Length; $i++){ Start-Process -FilePath "C:\PATH_TO_FFMPEG\ffmpeg.exe" -Argumentlist " -i `"$($FilesToRotate[$i].InFullName)`" -c copy -metadata:s:v:0 rotate=<x> `"$($FilesToRotate[$i].OutFullName )`" " ((-Wait)) ((-NoNewWindow)) }
Dieses Skript führt FFmpeg mit dem von Ihnen bereitgestellten Code aus (ich habe es nicht geprüft, kann aber trotzdem leicht ersetzt werden) und speichert die resultierende Datei im selben Ordner mit dem Namenssuffix "_ROTATE" - "MyMovie2017.mov" werde "MyMovie2017_ROTATE.mov". (Wenn Sie sie in einen ganzen neuen Ordner rendern möchten, ersetzen Sie sie durch den gewünschten $($FilesToRotate[$i].ParentPath)
Pfad.)
Hinweise: Dinge in doppelten Klammern (( ))
sind optional:
-Filter
spricht nur eine (eine) bestimmte Art von Dateien an, zB * .mp4 findet nur MP4-Dateien. Wenn Sie mehr als einen Dateityp haben, aber viele Dateien, die Sie nicht konvertieren müssen (wie Textdateien), können Sie entweder-Exclude
alle Formate verwenden, die Sie nicht konvertieren möchten, oder-Include
nur die, die konvertiert werden sollen (-Include
ist ähnlich-Filter
) ist langsamer, kann jedoch mehr als ein Format enthalten.)-Recurse
prüft auch Unterordner. Sie können auch-Depth
mit PowerShell v 5+ verwenden.-Wait
öffnet jeweils eine ffmpeg-Instanz - ohne sie werden alle Instanzen parallel geöffnet.-NoNewWindow
Zeigt die Ausgabe Ihrer ffmpeg-Instanz in der PowerShell-Console an, ohne dass jede Instanz von ffmpeg in einem neuen Konsolenfenster geöffnet wird. Macht nur mit Sinn-Wait
.
Sie müssen vor dem Starten des Skripts alle doppelten Klammern (und deren Inhalt, falls Sie dies nicht möchten) löschen.
Auch diese Dinge müssen angepasst werden:
C:\PATH_TO_FILES
Pfad zu Ihren Dateien natürlich.C:\PATH_TO_FFMPEG\ffmpeg.exe
Offensichtlich Pfad zu Ihrer ffmpeg.exe.rotate=<x>
- Sie müssen<x>
entweder90
durch180
, oder ersetzen270
. (Wie am Quellcode erklärt)
Wenn etwas mehr Erklärung braucht, helfe ich gerne.