bash variáveis de script não apropriadas

1

Atualizei um pouco, mas ainda não recebo os resultados que deveria receber:

#!/bin/bash
find "$1" -type f | while read filename
do

    videoCodec=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$filename")
    audioCodec=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "$filename")
    audioChannels=$(ffprobe -v error -select_streams a:0 -show_entries stream=channels -of default=noprint_wrappers=1:nokey=1 "$filename")

    echo $videoCodec $audioCodec $audioChannels $filename

    if [ $videoCodec = "h264" ] && [ $audioCodec = "aac" ] && [ audioChannels = "2" ] ; then
        echo "Direct play capable"
    fi

done

Eu corro isso em uma pasta que contém um arquivo que atende todas as condições if ("h264 aac 2 ./Black.Mass.(2015)/Black.Mass.(2015).mp4"), mas não obtém o " Reprodução direta capaz "echo.

    
por kram 09.05.2017 / 07:37

1 resposta

1

Você não diz, mas é para não ser executado em áudio DTS? Em qualquer caso, essa linha não funcionará corretamente:

if [[ $video_good="true" && $audio_good="true" ]] ; then

Como não há espaços em torno dos sinais de igualdade, eles são analisados como parte de strings, e não como operadores de comparação. Use isso em vez disso:

    if [[ $video_good = "true" && $audio_good = "true" ]] ; then

(Sinais de igualdade dupla, como você usa nas comparações anteriores, também funcionariam. Mas, novamente, espaços ao redor deles são necessários.)

BTW, eu recomendo strongmente citações de variáveis (isto é, "$f" em vez de apenas $f ). Mas a maneira como você está usando $cli_video e $cli_audio não funcionaria se fossem citadas duas vezes, então não faça isso com elas. A maneira realmente correta de armazenar parâmetros como esse é usar arrays em vez de variáveis simples, assim:

    cli_video=(-c:v copy)
...
    cli_audio=(-c:a copy)
...
    ffmpeg -i "$f" "${cli_video[@]}" "${cli_audio[@]}" "$(basename "$f")"
    
por 09.05.2017 / 07:50