for file in ./*
do
output=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file")
if [ "$output" = "vorbis" ];then ......
else ....
fi
done
Eu estou tentando obter as informações de formato de um monte de arquivos de mídia em um diretório. O script que eu tenho passa por cada arquivo, menciona em qual formato está (se é um arquivo de mídia) e então sai.
O que eu realmente queria fazer era executar um comando específico se a saída correspondesse a um determinado valor. aqui está o código que tenho:
for file in ./*
do
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file"
done
Aqui está um exemplo de saída que recebo quando eu o executo em uma pasta com 10 arquivos e um diretório:
vorbis
aac
opus
vorbis
mp3
opus
mp3
./file1.txt: Invalid data found when processing input
./Soundcloud: Is a directory
mp3
./media_bash_file.sh: Invalid data found when processing input
Idealmente, o que estou tentando fazer é que, assim que o comando ffprobe for executado, eu queira ir
if ffprobe_output = "vorbis" then run x command ELSE ...
e assim por diante. Eu tentei o que é mencionado em vários posts sobre o uso de
var=$(insert_ffprobe_command_here)
no início do arquivo de lote, mas parece que não consigo funcionar corretamente, geralmente resulta em um erro como:
"Argument './Mediafile_X' provided as input filename, but './Mediafile_Y' was already specified.
Eu só cheguei ao primeiro trecho de código que eu fiz.
for file in ./*
do
output=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file")
if [ "$output" = "vorbis" ];then ......
else ....
fi
done
Tags shell-script