1

Я немного обновил его, но я все еще не получаю результаты, которые я должен получить:

#!/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

Я запускаю это в папке, содержащей файл, который удовлетворяет всем условиям if («h264 aac 2./ Черный.Масса. (2015)/ черный.Масса. (2015) .mp4 "), но не получайте эхо" Direct play способны ".

1 ответ1

1

Вы не говорите, но предполагается , что это не работает для DTS аудио? В любом случае, эта строка не будет работать правильно:

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

Поскольку вокруг знаков равенства нет пробелов, они анализируются как часть строк, а не как операторы сравнения. Используйте это вместо:

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

(Знаки двойного равенства, как вы используете в предыдущих сравнениях, также будут работать. Но опять же, пробелы вокруг них обязательны.)

Кстати, я настоятельно рекомендую использовать двойные кавычки для ссылок на переменные (то есть "$f" вместо просто $f). Но то, как вы используете $cli_video и $cli_audio , не сработало бы, если бы они были в двойных кавычках, так что не делайте этого с ними. Действительно правильный способ хранения таких параметров - использовать массивы вместо простых переменных, например так:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .