По сути, вам просто нужно посмотреть файлы (сохранить их в переменной) и затем передать эти найденные файлы в FFmpeg.
Конечно, пакетного языка Windows было бы достаточно для этого . Но так как у меня с этим нет опыта, вот сценарий PowerShell-Script:
# 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)) }
Этот скрипт запустит FFmpeg с предоставленным вами кодом (я его не проверял, но вы все равно можете легко его заменить) и сохраните полученный файл в той же папке с именем-суффиксом "_ROTATE" - так что MyMovie2017.mov будет стать "MyMovie2017_ROTATE.mov". (Если вы хотите отобразить их в совершенно новую папку, замените $($FilesToRotate[$i].ParentPath)
путь, который вам нравится.)
Примечания: в двойных скобках (( ))
необязательно:
-Filter
будет адресован только (один) определенный тип файлов, например, * .mp4 найдет только MP4-файлы. Если у вас есть более одного типа файлов, но многие файлы вам не нужно конвертировать (например, текстовые файлы), вы можете либо-Exclude
все форматы, которые вы не хотите конвертировать, либо-Include
только те, которые должны быть конвертированы (-Include
например,-Filter
- это медленнее, но может включать более одного формата.)-Recurse
также рассмотрим подпапки. Вы также можете использовать-Depth
с PowerShell v 5+.-Wait
будет открывать один экземпляр ffmpeg за раз - без него все экземпляры будут открываться параллельно.-NoNewWindow
покажет выходные данные вашего экземпляра ffmpeg на консоли PowerShell, а без него каждый экземпляр ffmpeg откроется в новом окне консоли. Имеет смысл только с-Wait
.
Вам придется удалить все двойные скобки (и их содержимое, если вы этого не хотите) перед запуском скрипта.
Также эти вещи нужно адаптировать:
C:\PATH_TO_FILES
Путь к вашим файлам, очевидно.C:\PATH_TO_FFMPEG\ffmpeg.exe
Путь к вашему ffmpeg.exe, очевидно.rotate=<x>
- вам необходимо заменить<x>
либо90
,180
или270
. (Как объяснено в источнике кода)
Если что-то требует большего объяснения, я с радостью помогу.