Sou novo no FFmpeg e estou tentando descobrir isso. Eu encontrei isso paraProcessamento em lotee esta resposta pararotação de vídeomas preciso juntá-los.
Alguém poderia explicar como criar um script para esta ação, no Windows?
Responder1
Basicamente, você só precisa procurar os arquivos (armazená-los em uma variável) e, em seguida, alimentá-los no FFmpeg.
Claro,A linguagem Batch do Windows seria suficiente para isso. Mas como não tenho proficiência nisso, 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 irá executar o FFmpeg com ocódigo que você forneceu(Eu não verifiquei, mas você pode substituí-lo facilmente 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 em uma pasta totalmente nova, substitua $($FilesToRotate[$i].ParentPath)
pelo caminho de sua preferência.)
Notas: coisas entre parênteses duplos (( ))
são opcionais:
-Filter
abordará apenas (um) tipo específico de arquivo, por exemplo, *.mp4 encontrará apenas 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 usar-Exclude
todos os formatos que não deseja converter ou-Include
apenas aqueles que devem ser convertidos (-Include
é como-Filter
- é é mais lento, mas pode incluir mais de um formato.)-Recurse
também examinará subpastas. Você também pode usar-Depth
com PowerShell v 5+.-Wait
abrirá uma instância do ffmpeg por vez - sem ela, todas as instâncias serão abertas paralelamente.-NoNewWindow
mostrará a saída da sua instância do ffmpeg no console do PowerShell, enquanto sem ela, cada instância do ffmpeg será aberta em uma nova janela do console. Faz sentido apenas com-Wait
.
Você terá que excluir todos os parênteses duplos (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<x>
por90
,180
, ou270
. (Conforme explicado na fonte do código)
Se alguma coisa precisar de mais explicações, ficarei feliz em ajudar.
Responder2
Solução de uma linha
npx rotate-video --source=source_path --destination=destination_path --extension=MP4 --angel=270
Observação:Você precisa instalar FFMPEG
o CLI primeiroinstalar