ffmpeg massa transcodificar vídeos no diretório

1

Eu tenho muitos vídeos nomeados coisas diferentes e extensões diferentes (alguns mp4 alguns wmv etc).

Eu gostaria de executar o comando abaixo, mas em todos os vídeos em um diretório específico, e depois salvá-lo em outro diretório, sem substituir os arquivos originais.

Alguns vídeos talvez duplicados, se isso acontecer, deve pausar o script. Por exemplo, talvez video1.mp4 & video1.avi ambos não podem ser video1.mp4 em /home/videos/processed , então o script deve pausar.

ffmpeg -i '/home/videos/unprocessed/vidabc.mp4' -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/vidabc.mp4'
ffmpeg -i '/home/videos/unprocessed/vidxyz.mp4' -f mp4 -vcodec libx264 -preset fast -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/vidxyz.mp4'
    
por masterq 30.06.2018 / 01:59

1 resposta

1

Você pode processar todos os arquivos em um diretório usando o comando find com o sinalizador -execdir .

Exemplo:

find /home/videos/unprocessed -type f \
   -execdir ffmpeg -i '{}' -f mp4 -vcodec libx264 -preset fast \
   -profile:v main -acodec aac -movflags +faststart '/home/videos/processed/{}.mp4' \;

-type f indica que você deseja localizar apenas arquivos, não diretórios.

Após o sinal -execdir , '{}' é substituído pelo caminho do arquivo, por exemplo, ./vidabc.mp4 .

No final do comando -execdir , inclua um \; para finalizar o comando.

Observe que, neste exemplo, os nomes dos seus arquivos resultantes podem parecer:

  • /home/videos/processed/vidabc.mp4.mp4
  • /home/videos/processed/vidxyz.avi.mp4
  • /home/videos/processed/vidxyz.mp4.mp4

Se isso for um problema, existem maneiras de resolver isso. Veja Comando “find” -exec substituindo a string por um exemplo semelhante.

    
por 30.06.2018 / 05:09