Divide o arquivo de vídeo em pedaços com ffmpeg

5

Quando você quiser extrair dois minutos de um arquivo de vídeo do minuto 2 ao minuto 4, você usará o comando

ffmpeg -i input.mpg -sameq -ss 00:02:00 -t 00:02:00 output.mpg

Gostaria de dividir o vídeo em dois minutos. Eu tenho uma ideia de usar um script bash, mas existem alguns erros.

for i in seq 50;
do ffmpeg -i input.mpg -sameq -ss 00:'expr $i \* 2 - 2':00 -t 00:02:00 output.mpg; done

Você sabe como corrigir os erros no script que usam o $i expression? Ou há alguma solução melhor?

    
por xralf 14.10.2011 / 10:11

1 resposta

7

Você esqueceu de usar backticks - ou melhor: $( ) subshell - na invocação seq . Isso funciona:

for i in $( seq 50 );
do ffmpeg -i input.mpg -sameq -ss 00:'expr $i \* 2 - 2':00 -t 00:02:00 output.mpg; done

Outra coisa é que você provavelmente não quer que output.mpg seja sobrescrito em cada rodada, não é? :) Use $i no nome do arquivo de saída também.

Além disso: No bash, você pode usar apenas $(( )) ou $[ ] em vez de expr - também parece mais claro (na minha opinião). Além disso, não há necessidade de seq - a expansão de chaves é tudo o que você precisa para obter uma sequência. Aqui está um exemplo:

for i in {1..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

Outra coisa boa sobre chaves é que você pode ter zeros à esquerda nos nomes (muito útil para a classificação de arquivos no futuro):

for i in {01..50}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i* 2 - 2 ]:00 -t 00:02:00 output_$i.mpg
done

Observe também que i*2 - 2 pode ser facilmente simplificado para i*2 se você alterar o intervalo:

for i in {00..49}
 do ffmpeg -i input.mpg -sameq -ss 00:$[ i*2 ]:00 -t 00:02:00 output_$i.mpg
done
    
por 14.10.2011 / 10:30