Como agrupar arquivos avi em um determinado tamanho?

1

O problema

Eu tenho uma pasta contendo aproximadamente 1000 arquivos de vídeo .avi, que devem ser divididos em clipes de filme de 1 segundo ou, alternativamente, cortados em um determinado ponto (digamos entre 7 segundos e 8 segundos) até um segundo. Esses clipes de filme contêm partículas em movimento e o programa que eu uso para medir a velocidade dessas partículas requer clipes de filme de 1 segundo. O começo e o fim dos arquivos .avi estão corrompidos, então eu quero tirar o clipe de 1 segundo de algum lugar no meio. Eu quero manter os nomes dos arquivos, pois são referências para amostras de vídeo que eu tirei. Eu estou trabalhando no Windows 7 e não tenho absolutamente nenhum plano de fundo em programação (além de R), então me trate como um novato.

Ensaios anteriores

Estou tentando encontrar uma solução para esse problema há muito tempo. Na primeira vez que fiz isso, cortei manualmente cerca de 1000 clipes com o Final Cut Pro. Isso me levou alguns dias, mas não tenho acesso ao software. De qualquer forma, imaginei que deveria haver uma solução melhor. Eu tentei entender o VirtualDub , mas fiquei impressionado e desisti. Agora eu tenho procurado se o FFmpeg pudesse ser a solução. Tenho certeza de que poderia, mas estou sobrecarregado novamente. Eu encontrei este script BASH e @ resposta do evilsoup para esta pergunta . Se eu conseguisse combinar esses dois, isso poderia funcionar. Eu tenho tantas perguntas sobre esse processo que é melhor mantê-lo conciso:

Como combinar esses dois scripts (divisão e loops forçados) no FFmpeg no Windows 7?

(por exemplo, posso usar o script BASH no Windows? Se sim, como?)

    
por Mikko 26.03.2013 / 22:18

1 resposta

3

Você não precisa de nenhum script complicado.

Esse loop Bash simples levará todos os arquivos .avi , pulará 5 segundos para o vídeo, cortará um segundo ( -t 1 ) e gravará em -cut.avi . Ele copia o fluxo de vídeo e descarta o áudio.

for i in *.avi; do ffmpeg -ss 5 -i "$i" -c:v copy -an -t 1 "${i%.avi}-cut.avi"; done

Você pode substituir "${i%.avi}-cut.avi" por "output/$i" para gravar os arquivos de saída na pasta output sem alterar seu nome.

Você pode usar o Bash no Windows com o Cygwin , mas esse loop deve ser fácil de traduzir para um arquivo nativo do Windows (se houver sabe disso, fique à vontade para editar este post).

Notas para o vídeo:

  • O FFmpeg é disponível como uma versão estática para todos os principais SO - pode ser instalado apenas para extrair o arquivo baixado.
  • Se você quiser um ponto de partida mais preciso para o corte, considere colocar o -ss behind -i "$i" .
  • Se os arquivos de vídeo forem danificados no começo e o FFmpeg não puder decodificar a entrada, isso pode não funcionar completamente.
por 26.03.2013 / 22:50