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


0

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 de pipe várias vezes no elo da cadeia? Estou tentando ter algo assim:

 ls *.MOV | ffmpeg -y -i $file  "$file.mp4"

Respostas:


2

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

Para encurtar a história, tubos 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 realmente um exagero. O 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

0

Você poderia fazer isso usando um forloop simples

#!/bin/bash

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

    echo "Converting $file"
done

Eu posso escrever o script perl, mas eu o que usar pipes para isso, para entender o conceito de pipes.
Alexey Ryazhskikh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.