четверг, 19 января 2017 г.

Правим звук в фильмах.

Как и большая часть населения нашей необъятной родины и нашей бывшей необъятной родины, я конечно же, качаю фильмы из интернета. И далеко не всегда они там выложены хорошего качества. И речь даже не о видео, а о звуке: порой приходится прислушиваться к словам, при этом спецэффекты бомбят по ушам - хоть убавляй. :( Задрало меня это, решил написать небольшой скрипт.

Всё собственно просто: разворачиваем аудио поток в PCM, суём его в sox, накладываем аудио компрессор, перекодируем всё это в mp3 и суём обратно в файл. :) Скрипт писан на коленке, так что ни какого сервиса, всё просто. За комменты в стиле "фу говно" - идём лихо в бан. ;) За конструктивные предложения и правки - спасибо.
Параметры для sox нагло тырены в инете. ;) Самому было лень подбирать параметры. Из нескольких источников набрал несколько разных вариантов, самому лень тестить. Могу только сказать, что первый вариант даёт наилучшее усиление, но подозреваю, что может давать и наибольшие искажения. Одно точно: слышно после этого всё просто отлично, чего я собственно и добивался.

#!/bin/bash

VIDEO=$*
NAME=$(basename "$VIDEO")
OUT_VIDEO=$(dirname "$VIDEO")/${NAME%%.*}.new.${NAME##*.}
TMP=$(mktemp -d)
OUT_MP3=$TMP/out.mp3

# наилучшее усиление
ffmpeg -loglevel 24 -i "$VIDEO" -map 0:1 -c:a pcm_s32le -f wav - | sox -t wav - $OUT_MP3 compand 0.3,1 6:-70,-60,-20 -5 -90 0.2
# for music
#ffmpeg -loglevel 24 -i "$VIDEO" -map 0:1 -c:a pcm_s32le -f wav - | sox -t wav - $OUT_MP3 compand 0.3,1 -90,-90,-70,-70,-60,-20,0,0 -5 0 0.2
# for movies
#ffmpeg -loglevel 24 -i "$VIDEO" -map 0:1 -c:a pcm_s32le -f wav - | sox -t wav - $OUT_MP3 compand 0.0,1 6:-70,-43,-20 -6 -90 0.1
# for voice/music
#ffmpeg -loglevel 24 -i "$VIDEO" -map 0:1 -c:a pcm_s32le -f wav - | sox -t wav - $OUT_MP3 compand 0.1,0.3 -60,-60,-30,-15,-20,-12,-4,-8,-2,-7 -2

ffmpeg -loglevel 24 -i "$VIDEO" -i $OUT_MP3 -map 0:0 -c:v copy -map 1:0 -c:a copy "$OUT_VIDEO"

rm $OUT_MP3
rmdir $TMP