Solução de uma linha

Solução de uma linha

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:

  • -Filterabordará 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 -Excludetodos os formatos que não deseja converter ou -Includeapenas aqueles que devem ser convertidos ( -Includeé como -Filter- é é mais lento, mas pode incluir mais de um formato.)
  • -Recursetambém examinará subpastas. Você também pode usar -Depthcom PowerShell v 5+.
  • -Waitabrirá uma instância do ffmpeg por vez - sem ela, todas as instâncias serão abertas paralelamente.
  • -NoNewWindowmostrará 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_FILESCaminho para seus arquivos, obviamente.
  • C:\PATH_TO_FFMPEG\ffmpeg.exeCaminho para o seu ffmpeg.exe, obviamente.
  • rotate=<x>- você precisa substituir <x>por 90, 180, ou 270. (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 FFMPEGo CLI primeiroinstalar

informação relacionada