FFmpeg executa cada segunda tarefa

1

Por que o ffmpeg executa cada segunda tarefa para a qual ele é solicitado?

for i in *.MTS; do
     echo ffmpeg -i \"$i\" -c:a copy -c:v copy \"$i\" | sed 's/MTS/mp4/2'
done | sh

Por exemplo. se eu tiver 9 arquivos MTS como:

0001.MTS
0002.MTS
0003.MTS
0004.MTS
0005.MTS
0006.MTS
0007.MTS
0008.MTS
0009.MTS

Isso converte apenas 001 003 005 007 009 . Alguma razão para isso? O mesmo comando sem | sh imprime o conjunto adequado de pedidos. Isso se torna realmente uma dor de cabeça quando você tem 64 arquivos de vídeo.

    
por theoden 13.06.2015 / 17:47

1 resposta

2

Eu não sei, porque somente cada segundo ffmpeg é executado, eu não consegui reproduzir isso na minha máquina. No entanto, sua abordagem é muito complicada. Uma solução mais limpa seria:

  • para cascas compatíveis com bash :

    for i in *.MTS; do
      ffmpeg -i $i -c:a copy -c:v copy ${i%MTS}mp4
    done
    

    Por favor, leia sobre o % e os operadores relacionados na seção Expansão do Parâmetro na página man do bash .

  • para cascas compatíveis com csh :

    foreach i (*.MTS)
      ffmpeg -i $i -c:a copy -c:v copy $i:r.mp4
    end
    

    Aqui, os modificadores :r removem a extensão do arquivo. Leia mais sobre alguns outros modificadores na seção (um tanto não intuitiva) Substituição do histórico da página man do tcsh .

por 13.06.2015 / 18:34