Estou tentando converter lotes de arquivos .mov para 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 corrente? Estou tentando ter algo assim:
ls *.MOV | ffmpeg -y -i $file "$file.mp4"
Responder1
Pipes são úteis quando você deseja usar osaída padrãode um comando como oentrada padrãode outro comando. Mas você precisa passar um arquivo como entrada ffmpeg
, e 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.
Resumindo, pipes não são úteis para isso, você precisa de um loop como a outra resposta sugeriu. Mas deve colocar aspas duplas nos 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 realmente um exagero. Bash é uma abordagem mais simples e perfeitamente adequada. Observe 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
Responder2
Você poderia fazer isso usando um for
loop simples
#!/bin/bash
for file in /path/to/*.MOV
do
echo "Converting $file"
done