Remova o início e o final de vários arquivos MP4 em massa

3

Eu tenho vários 100 vídeos que eu preciso remover os primeiros 20 segundos e os últimos 30 segundos de.

Obviamente, não é prático fazer isso de uma vez. Posso automatizar isso de alguma forma, talvez em um script do Automator OS X?

    
por bumble_bee_tuna 24.11.2013 / 16:30

2 respostas

4

Supondo que você execute * nix e Bash, baixe uma compilação estática do ffmpeg para o seu sistema operacional. Em seguida, pegue o arquivo ffmpeg e copie-o para /usr/bin/ffmpeg .

sudo cp ~/Downloads/ffmpeg/ffmpeg /usr/bin/ffmpeg
sudo chmod +x /usr/bin/ffmpeg

Agora você pode executar este script de shell no Bash - deve ser suficiente para copiá-lo e colá-lo na pasta onde estão os vídeos.

for f in *.mp4; do
    duration=$(ffmpeg -i "$f" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
    length=$(echo "$duration" | awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }' )
    trim_start=20
    trim_end=$(echo "$length" - 30 - "$trim_start" | bc)
    echo ffmpeg -ss "$trim_start" -i "$f" -c copy -map 0 -t "$trim_end" "${f%.mp4}-trimmed.mp4"
done

Observação: remova a instrução echo para realmente executar os comandos. Seria bom testar primeiro os comandos gerados para precisão. Isso geraria algo como:

ffmpeg -ss 20 -i input.mp4 -c copy -map 0 -t 161.58 input-trimmed.mp4

O que o script fará é calcular o tempo total de execução da entrada, subtrair a hora de início e a hora que você deseja remover do final e, então, instruir o ffmpeg a fazer uma cópia de fluxo de sua hora de início especificada para a horário final recém-calculado. Isso não irá prejudicar a qualidade de vídeo e áudio de qualquer forma. Ele deve ser executado em menos de alguns segundos, mesmo para arquivos grandes.

Para esclarecer, -ss define a hora de início e -c copy -map 0 copiará todos os fluxos de vídeo, áudio e legenda da versão original para a versão reduzida. -t define a hora final. Veja este artigo no Wiki do FFmpeg para mais informações sobre como buscar.

    
por 24.11.2013 / 18:06
0

Se você estiver confortável com a linha de comando, recomendo FFmpeg

ffmpeg -i file.mp4 -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output.mp4

Outra opção é um pequeno script de shell que percorre seus arquivos e executa uma tarefa FFmpeg de arquivo único para cada um deles. Então, novamente, eu nunca usei uma shell do Mac:)

for f in *.mp4; do ffmpeg -i $f -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output/$f; done

Espero que isso ajude um pouco.

    
por 24.11.2013 / 18:05