Нужна помощь в объединении команд в сценарий для запуска в Ubuntu - PullRequest
0 голосов
/ 16 июня 2020

У меня есть куча видеофайлов со звуком DTS, которые мне нужно преобразовать в AC3. Я нашел команды, которые могут выполнять разные части задачи, но я не уверен, как собрать все это вместе, чтобы сделать скрипт, который работает. Я нашел следующий сценарий, который преобразует аудио из всех моих файлов в AC3, однако я бы предпочел, чтобы он конвертировал только аудиофайлы DTS в AC3. Сценарий выглядит следующим образом.

shopt -s globstar
for f in **/*.mkv; 
do 
    fname="${f##*/}"
    ffmpeg -i "$f" -c:v copy -c:s copy -c:a ac3 "/some/directory/$fname" &&
    mv "/some/directory/$fname" "$f"
done

Я также нашел эту команду, которая возвращает, какой тип звукового кода c использует файл mkv.

`ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 input.mkv`

Итак, я ' Мне интересно, как я могу объединить их, чтобы создать сценарий, который будет делать то, что я хочу. Я предполагаю, что могу добавить функцию if, используя ffprobe в начале скрипта? Примерно так ...

shopt -s globstar
for f in **/*.mkv; 
do 
    fname="${f##*/}"
    if ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of 
       default=nokey=1:noprint_wrappers=1 "$f" | egrep "DTS"; then
       ffmpeg -i "$f" -c:v copy -c:s copy -c:a ac3 "/some/directory/$fname" &&
       mv "/some/directory/$fname" "$f"
    fi
done

А с этим проблемы? Я не писал сценариев с тех пор, как учился в старшей школе, играя со своим графическим калькулятором, потому что мне было скучно, поэтому любая помощь будет очень благодарна.

1 Ответ

0 голосов
/ 17 июня 2020

Так что я думаю, что придумал что-то, что мне подходит. Я уверен, что кто-то, кто действительно знает, что они делают, может сделать это чище и эффективнее, но для всех, кому интересно, это то, что я придумал ...

shopt -s globstar
for f in **/*.mkv; 
do 
    fname="${f##*/}"
    if ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$f" | egrep "dts"; then
       if [[ $(ffprobe -v error -select_streams a:0 -show_entries stream=channels -of default=nokey=1:noprint_wrappers=1 "$f") > 2 ]]; then
            ffmpeg -hide_banner -loglevel panic -i "$f" -c:v copy -c:s copy -c:a ac3 -b:a 640k "./Temp/$fname" &&
            mv -v "./Temp/$fname" "$f"
       else ffmpeg -hide_banner -loglevel panic -i "$f" -c:v copy -c:s copy -c:a ac3 -b:a 320k "./Temp/$fname" &&
            mv -v "./Temp/$fname" "$f"
       fi
    fi

done
-Just save that to a text file and give it a name (for example DTSconverter.sh)
-Make it executable
-Put it in the root directory where the movies you wish to work on are stored
-Create a folder called 'Temp" in the that same root directory
-Execute the script by opening a terminal in the root directory and typing ./DTSconverter.sh (or whatever file name you gave the script)

Это будет найдите любые фильмы, которые имеют звуковую дорожку DTS в каталоге, в котором находится сценарий, включая подкаталоги, и перекодируйте дорожку в AC3. Он также учитывает стереодорожки или треки объемного звука и соответствующим образом регулирует битрейт.

...