Como usar o nome do arquivo atual várias vezes em um comando pipe?

0

Estou tentando converter um lote de arquivos .mov para o mp4. Como posso obter o nome do arquivo do pipe para gerar o comando ffmpeg? Como usar o argumento pipe várias vezes no elo da cadeia? Estou tentando ter algo assim:

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"
    
por Alexey Ryazhskikh 28.01.2017 / 06:19

2 respostas

2

Pipes são úteis quando você quer usar a saída padrão de um comando como a entrada padrão de outro comando. Mas você precisa passar um arquivo como entrada para ffmpeg , não nomes de arquivos em sua entrada padrão. E você precisa executar ffmpeg várias vezes, uma vez para cada arquivo de entrada para obter um arquivo de saída.

Para encurtar a história, os canais não são úteis para isso, você precisa de um loop como a outra resposta sugerida. Mas deve citar duas vezes os parâmetros do nome do arquivo:

for file in *.MOV; do
    ffmpeg -y -i "$file" "$file.mp4"
done

Você mencionou em um comentário que poderia escrever um script Perl. Isso seria muito exagerado. O Bash é uma abordagem mais simples e perfeitamente adequada. Note que você pode escrever o script acima em uma única linha e executá-lo diretamente na linha de comando.

for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done
    
por 28.01.2017 / 20:05
0

Você pode fazer isso usando um simples for loop

#!/bin/bash

for file in /path/to/*.MOV
do

    echo "Converting $file"
done
    
por 28.01.2017 / 06:49