Como faço para transcodificar todos os arquivos em um diretório com ffmpeg

0

Eu estou querendo fazer um script para transcodificar todos os arquivos sem perdas da minha câmera para 3mb / se mudar o codec para h.264. Eu encontrei um comando que irá exportar os arquivos como um arquivo grande, mas eu quero algo que vai manter o nome e basta colocar as saídas em outro diretório. Por favor, coloque notas que descrevam o que cada parte do comando faz para que eu possa modificá-lo para as minhas necessidades.

EDITAR

Isso funciona:

for file in *.avi; do ffmpeg -i "$file" "${file%.avi}".webm; done

Eu só quero saber o que cada parte faz para que eu possa modificá-la para as minhas necessidades.

    
por SupaKoopaTroopa64 21.11.2015 / 20:49

1 resposta

3
for file in *.avi; do ffmpeg -i "$file" "${file%.avi}".webm; done

Este é um Bash "for loop" e é ótimo para repetir tarefas. Seção a seção:

for file in *.avi;

file se tornará a variável na próxima seção que se referirá a cada avi em particular no diretório atual para cada loop sucessivo.

O que personalizar:

  • file pode ser renomeado para praticamente qualquer coisa: i e f parecem ser comumente usados.

  • Você pode alterar *.avi para qualquer formato de entrada necessário, como *.mkv .

do ffmpeg -i "$file" "${file%.avi}".webm;

Isso executará ffmpeg para cada avi. A parte em chaves está usando expansão de parâmetro para remover a parte .avi do nome do arquivo. Por exemplo, se um arquivo avi for denominado dog.avi , a saída será denominada dog.webm . Se você simplesmente usar "$file.webm" para a saída, a saída terminará como dog.avi.webm .

O que personalizar:

  • Você pode adicionar qualquer ffmpeg opções como de costume.

  • A parte %. deve usar a mesma extensão da seção for file in ou você pode alterar %.avi para %.* como curinga.

  • .webm pode ser alterado para qualquer formato de contêiner de saída necessário.

Se você deseja que os novos arquivos sejam enviados para um diretório denominado newvids , crie o novo diretório e altere o comando para: "newvids/${file%.avi}.webm"

done

Isso diz ao loop que o comando terminou e agora $file pode se referir ao próximo avi.

    
por LordNeckbeard 21.11.2015 / 23:57