Procurando por uma maneira de executar uma tarefa em todos os arquivos em um diretório (recursivamente) no Windows

3

Eu tenho um número enorme de arquivos de vídeo mp4 que precisam ter um aumento de volume. Eu preciso de uma maneira de executar um filtro de áudio ffmpeg em todos os arquivos em um diretório base especificado (e em subdiretórios também). Meu problema é que estou trabalhando em um computador com Windows e não tenho conhecimento de sua sintaxe de shell.

Eu gostaria de fazer o equivalente ao que este script bash faz:

TARGET_FILES=$(find /path/to/dir -type f -name *.mp4)
for f in $TARGET_FILES
do
  ffmpeg -i $f -af 'volume=4.0' output.$f
done

Eu passei bastante tempo esta tarde procurando uma solução, mas a natureza recursiva do que eu preciso (que é tão simples com o achado!) não é muito clara.

Qualquer ajuda seria muito apreciada!

    
por stzzz1 13.06.2014 / 01:28

2 respostas

2

Em suma, o seu script traduz para o one-liner de prompt de comando:

for /r "C:\path\to\file" %f in (*.mp4) do ffmpeg -i %f -af 'volume=4.0' output.%f

Explicado: O comando for faz um loop em todos os arquivos que atendem a determinados critérios e executam o comando após do . /r significa recursivo (por exemplo, pesquisa em subpastas); %f é uma variável arbitrária semelhante a $f em seu script. Outras partes devem ser auto-explicativas.

    
por 13.06.2014 / 05:15
1

O estouro de pilha tem um script PowerShell semelhante para usar ffmpeg e recursing por meio de pastas, mas foi para alterar o tipo de arquivo.

Alguém me corrija se eu estiver errado (não sei ffmpeg), mas pegar esse artigo e seu comando daria algo assim no PowerShell:

$oldvids = Get-ChildItem *.mp4 -Recurse
foreach ($oldvid in $oldvids) {
     .\ffmpeg.exe -i $oldvid.FullName -af 'volume=4.0' $oldvid
}

Você precisará ter o PowerShell instalado em seu sistema, que está incorporado ao Windows 8, mas disponível para download nas versões anteriores do Windows como parte do Estrutura de Gerenciamento do Windows

    
por 13.06.2014 / 01:59