Basicamente, você só precisa procurar os arquivos, armazená-los em uma variável e, em seguida, alimentar os arquivos pesquisados no FFmpeg.
É claro que a linguagem em lotes do Windows seria suficiente para isso . Mas como não tenho proficiência com isso, aqui está um Script do PowerShell:
# 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))
}
Este script executará o FFmpeg com o código que você forneceu (eu fiz não verifique, mas você pode facilmente substituí-lo de qualquer maneira) e salve o arquivo resultante na mesma pasta com o sufixo de nome "_ROTATE" - então "MyMovie2017.mov" se tornará "MyMovie2017_ROTATE.mov". (Se você quiser renderizá-los para uma pasta totalmente nova, substitua $($FilesToRotate[$i].ParentPath)
pelo caminho que você gosta.)
Notas: as coisas com parênteses duplicados (( ))
são opcionais:
-
-Filter
só irá endereçar (um) tipo específico de arquivos, por exemplo * .mp4 só encontrará arquivos MP4. Se você tiver mais de um tipo de arquivo, mas muitos arquivos que não precisa converter (como arquivos de texto), você pode-Exclude
todos os formatos que não deseja converter ou-Include
somente aqueles que devem ser convertidos convertido (-Include
é como-Filter
- é mais lento, mas pode incluir mais de um formato). -
-Recurse
também examinará subpastas. Você também pode usar-Depth
com o PowerShell v 5 +. -
-Wait
abrirá uma instância de ffmpeg de cada vez - sem ela, todas as instâncias serão abertas em paralelo. -
-NoNewWindow
mostrará a saída de sua instância de ffmpeg no PowerShell-Console, enquanto sem ela, todas as instâncias do ffmpeg serão abertas em uma nova janela de console. Faz sentido apenas com-Wait
.
Você terá que excluir todos os parênteses duplicados (e o conteúdo deles, se não quiser) antes de iniciar o script.
Além disso, essas coisas precisam ser adaptadas:
-
C:\PATH_TO_FILES
Caminho para seus arquivos, obviamente. -
C:\PATH_TO_FFMPEG\ffmpeg.exe
Caminho para o seu ffmpeg.exe, obviamente. -
rotate=<x>
- você precisa substituir o<x>
por90
,180
ou270
. (Como explicado na fonte do código)
Se alguma coisa precisar de mais explicações, fico feliz em ajudar.