Определить громкость звука в аудиофайле

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Определить громкость звука в аудиофайле

Сообщение azsx »

Хочу через youtube-dl настроить автоматическую скачку видео. То есть, чтобы посылать скрипту ссылку, он сам бы определял наилучшее разрешение, в случае необходимости скачивал бы видео и аудио отдельно и соединял бы их ffmpeg'ом (короче как я руками, только сам).
Столкнулся с такой проблемой. Некоторые отдельные аудио файлы вообще тихие. То есть откручиваю громкость на полную, колонки на полную, файл m4a еле слышно. Например, 43 мб

Код: Выделить всё

youtube-dl -f 140 https://www.youtube.com/watch?v=-cNnDZcEbzk
Скажите, пожалуйста, можно ли как нибудь программно из консоли понять, что файл очень тихий?
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Определить громкость звука в аудиофайле

Сообщение azsx »

Но мне не подходит нормализация звука. То есть у меня нет задачи изменять звуковой файл скачанный с интернета как устанавливая маскимальное значение звука по кодеку, так и иначе редактируя громкость звука. Моя задача.
Скачал два аудио файла в консоли.
Каким либо образом узнал, что громкость этого файла 10 единиц, а другого 100 единиц. Или каких угодно значений. То есть не слушая аудио файлы определить, что первый файл будет очень тихим.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Определить громкость звука в аудиофайле

Сообщение Vascom »

Могу предложить костыльный вариант.
Скачанные файлы конвертируешь в wav, получается массивы чисел. Складываешь все числа по модулю - получаешь число, характеризующее громкость во всём файле.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20742
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Определить громкость звука в аудиофайле

Сообщение Bizdelnick »

azsx писал(а):
15.06.2018 06:06
Но мне не подходит нормализация звука. То есть у меня нет задачи изменять звуковой файл скачанный с интернета как устанавливая маскимальное значение звука по кодеку, так и иначе редактируя громкость звука. Моя задача.
Скачал два аудио файла в консоли.
Каким либо образом узнал, что громкость этого файла 10 единиц, а другого 100 единиц. Или каких угодно значений. То есть не слушая аудио файлы определить, что первый файл будет очень тихим.
А для чего это нужно? Какова конечная цель, если не нормализация?
К тому же по данной выше ссылке есть ответ и на этот вопрос (читайте про фильтр volumedetect).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Определить громкость звука в аудиофайле

Сообщение azsx »

Спасибо, вот этот фильтр я и пропустил. Вот у меня звуковой файл с старт посте. Если его скачатьи запустить -- то он очень тихий. Если запустить любой другой файл -- то он нормальный.
Что значит фраза "тихий". На колонках в 20 ватт я откручиваю громкость на полную, на компе ставлю 100% и звук просто нормально слышно если сидеть возле компьютера. Если заниматься делами (я их как радио между делом слушаю) -- то ничо не слышно.
Мне надо из консоли, не слушая файл ушами программно определить, нормальный будет звук или очень тихий.
Вот пример 3 фалов с нормальным звуком

Код: Выделить всё

[Parsed_volumedetect_0 @ 0x55b464ab18a0] n_samples: 492293376
[Parsed_volumedetect_0 @ 0x55b464ab18a0] mean_volume: -28.2 dB
[Parsed_volumedetect_0 @ 0x55b464ab18a0] max_volume: -9.2 dB
[Parsed_volumedetect_0 @ 0x55b464ab18a0] histogram_9db: 29
[Parsed_volumedetect_0 @ 0x55b464ab18a0] histogram_10db: 900
[Parsed_volumedetect_0 @ 0x55b464ab18a0] histogram_11db: 8830
[Parsed_volumedetect_0 @ 0x55b464ab18a0] histogram_12db: 45448
[Parsed_volumedetect_0 @ 0x55b464ab18a0] histogram_13db: 153024
[Parsed_volumedetect_0 @ 0x55b464ab18a0] histogram_14db: 402120

---

[Parsed_volumedetect_0 @ 0x55b126e926e0] n_samples: 1962455040
[Parsed_volumedetect_0 @ 0x55b126e926e0] mean_volume: -36.2 dB
[Parsed_volumedetect_0 @ 0x55b126e926e0] max_volume: -3.2 dB
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_3db: 2
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_4db: 3
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_5db: 15
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_6db: 129
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_7db: 686
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_8db: 2924
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_9db: 10641
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_10db: 31995
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_11db: 78098
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_12db: 163641
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_13db: 297615
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_14db: 481939
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_15db: 719249
[Parsed_volumedetect_0 @ 0x55b126e926e0] histogram_16db: 990077

---

[Parsed_volumedetect_0 @ 0x561ca7add0a0] n_samples: 164618496
[Parsed_volumedetect_0 @ 0x561ca7add0a0] mean_volume: -25.4 dB
[Parsed_volumedetect_0 @ 0x561ca7add0a0] max_volume: -6.8 dB
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_6db: 19
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_7db: 274
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_8db: 347
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_9db: 821
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_10db: 2438
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_11db: 9730
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_12db: 44514
[Parsed_volumedetect_0 @ 0x561ca7add0a0] histogram_13db: 167284
а вот с тихим (из старт поста)

Код: Выделить всё

[Parsed_volumedetect_0 @ 0x5618270142e0] n_samples: 248492032
[Parsed_volumedetect_0 @ 0x5618270142e0] mean_volume: -35.8 dB
[Parsed_volumedetect_0 @ 0x5618270142e0] max_volume: -0.7 dB
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_0db: 1
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_1db: 0
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_2db: 0
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_3db: 0
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_4db: 2
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_5db: 2
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_6db: 4
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_7db: 2
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_8db: 4
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_9db: 4
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_10db: 6
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_11db: 5
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_12db: 9
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_13db: 23
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_14db: 19
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_15db: 65
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_16db: 271
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_17db: 1306
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_18db: 4898
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_19db: 15624
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_20db: 46542
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_21db: 130846
[Parsed_volumedetect_0 @ 0x5618270142e0] histogram_22db: 323780
Буду пока считать, что max_volume: -0.7 dB -- очень малое значение определяет насколько тихий звук. Так как пока всё равно ничо не понятно.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Определить громкость звука в аудиофайле

Сообщение Vascom »

-0.7dB это как раз очень большое значение.
Тут надо ориентироваться на гистограмму. Например, смотреть какое значение гистограммы становится больше 100 или больше 1000.
Для первых трёх файлов это будет (больше сотни) соответственно
histogram_10db
histogram_6db
histogram_7db
А для тихого файла: histogram_16db
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Определить громкость звука в аудиофайле

Сообщение azsx »

точно, не знаю откуда вы это знаете, но из моей выборки так и получается. А вот я ещё один скачал (пока послушать не могу)

Код: Выделить всё

[Parsed_volumedetect_0 @ 0x5651a13484e0] n_samples: 248666240
[Parsed_volumedetect_0 @ 0x5651a13484e0] mean_volume: -32.9 dB
[Parsed_volumedetect_0 @ 0x5651a13484e0] max_volume: -11.1 dB
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_11db: 79
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_12db: 416
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_13db: 1513
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_14db: 5516
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_15db: 18111
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_16db: 52387
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_17db: 126508
[Parsed_volumedetect_0 @ 0x5651a13484e0] histogram_18db: 279140
У него и после 16 дб есть и до 16 сотни. Но логично, что файл должен быть потише.
youtube-dl -f 43 https://www.youtube.com/watch?v=-xpmVM1zHHc
Буду думать.
Спасибо сказали:
Аватара пользователя
Vascom
Сообщения: 1699
ОС: Fedora 32

Re: Определить громкость звука в аудиофайле

Сообщение Vascom »

Тогда комплексно надо оценивать, обращая внимание и на max_volume тоже. И использовать не абсолютное число (100), а относительное в зависимости от общего числа семплов n_samples, например 1%.
В общем нетривиальная задача. Возможны ситуации когда 99% времени звучит тихий шелест травы и 1% бой барабанов :)
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Определить громкость звука в аудиофайле

Сообщение azsx »

Как бы в моём случае это почти всегда будет только голос диктора. Ну ещё музыка иногда.
То есть мне надо как то "наощупь" найти децибелы, где голос звучит и на них искать сотни и тысячи. Например, если на заднем фоне очень тихо играют барабаны я переживу. А если я не услышу, что диктор говорит, то толку нет.
Но в целом вы правы, мой метод оценки для всех аудио файлов не пойдёт.
зы
но ваще как в линуксе всё запутано...
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Определить громкость звука в аудиофайле

Сообщение s.xbatob »

azsx писал(а):
15.06.2018 11:21
Как бы в моём случае это почти всегда будет только голос диктора. Ну ещё музыка иногда.
То есть мне надо как то "наощупь" найти децибелы, где голос звучит и на них искать сотни и тысячи. Например, если на заднем фоне очень тихо играют барабаны я переживу. А если я не услышу, что диктор говорит, то толку нет.
Но в целом вы правы, мой метод оценки для всех аудио файлов не пойдёт.
зы
но ваще как в линуксе всё запутано...
это кое у кого в голове запутано. :) Если нужен голос диктора, то надо сначала выделить фильтром речевой диапазон (300..3000 герц) у уже по нему нормализоваться.
Ах, да, replay gain -- это расширение в mp3, и поддерживать его никто не обязан. Так что перекодировать придётся, тем более, что youtube-dl и так это делает.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Определить громкость звука в аудиофайле

Сообщение azsx »

Если нужен голос диктора, то надо сначала выделить фильтром речевой диапазон (300..3000 герц) у уже по нему нормализоваться.
Дело вот в чём. Если взять конкретное видео из старт поста, то там несколько вариантов разрешений с аудио дорожками. Есть такие, в которых голос диктора слышно вполне нормально.
То есть мне не нужна нормализация, мне надо только понять слышно там диктора будет под звук пылесоса или лучше другой файл скачать.
Вот мне ситуация с децибелами ваще не понятна. Вроде децибелы это громкость звука. И как ваши герцы программно посмотреть я тоже не понимаю. То есть на 50-100 гц, чтобы децибел было нормально.
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Определить громкость звука в аудиофайле

Сообщение s.xbatob »

azsx писал(а):
16.06.2018 16:40
Если нужен голос диктора, то надо сначала выделить фильтром речевой диапазон (300..3000 герц) у уже по нему нормализоваться.
Дело вот в чём. Если взять конкретное видео из старт поста, то там несколько вариантов разрешений с аудио дорожками. Есть такие, в которых голос диктора слышно вполне нормально.
То есть мне не нужна нормализация, мне надо только понять слышно там диктора будет под звук пылесоса или лучше другой файл скачать.
Вот мне ситуация с децибелами ваще не понятна. Вроде децибелы это громкость звука. И как ваши герцы программно посмотреть я тоже не понимаю. То есть на 50-100 гц, чтобы децибел было нормально.
Прошу без наездов типа "не знаю и знать не хочу" :)
Я, похоже, уже тогда угадал что вы хотите: очистить голос от посторонних звуков. Тогда надо просто применить к аудиодорожке фильтр типа "amateur radio" или "acoustic", потом нормализовать результат и положить это обратно в клип.
Как это сделать в пакете -- не знаю. Вероятно, связываться с ladspa, только это не просто.
Интерактивно -- с помощью аудиоредактора. Рекомендую audacity
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Определить громкость звука в аудиофайле

Сообщение azsx »

s.xbatob я не наезжаю и вы не угадали.
Моя задача после того как файл с наилучшим видео и аудио скачан, программно определить громко там будут говорить или тихо. Допустим, в этом примере аудио качал отдельно и соединя с видео.

Код: Выделить всё

youtube-dl -F https://www.youtube.com/watch?v=-cNnDZcEbzk | grep -v "video only"
[youtube] -cNnDZcEbzk: Downloading webpage
[youtube] -cNnDZcEbzk: Downloading video info webpage
[youtube] -cNnDZcEbzk: Extracting video information
[youtube] -cNnDZcEbzk: Downloading js player vflkTAFWp
[info] Available formats for -cNnDZcEbzk:
format code  extension  resolution note
249          webm       audio only DASH audio   63k , opus @ 50k, 17.64MiB
250          webm       audio only DASH audio   84k , opus @ 70k, 23.11MiB
140          m4a        audio only DASH audio  130k , m4a_dash container, mp4a.40.2@128k, 42.67MiB
171          webm       audio only DASH audio  130k , vorbis@128k, 35.75MiB
251          webm       audio only DASH audio  165k , opus @160k, 46.12MiB
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k
36           3gp        320x180    small , mp4v.20.3, mp4a.40.2
43           webm       640x360    medium , vp8.0, vorbis@128k
18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)
Если говорить будут тихо -- то надо просто скачать другой файл (best по небольшому опыту).
То есть не слушая файл ушами, узнать громкость диктора и если там совсем всё тихо -- скачать другой файл. Мне только узнать громкость надо.
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Определить громкость звука в аудиофайле

Сообщение s.xbatob »

azsx
Пока, насколько я понял, вам нужно другое: узнать, не тонет ли голос в посторонних звуках.
Вы можете сколько угодно манипулировать громкостью, но соотношение не изменится.
А если формально -- выделяйте аудио, собирайте спектр (трек ещё не мешало бы обрезать с обеих сторон -- на всякий случай) и смотрите где на краях диапазона тише. Только я готовых решений для этого не знаю.
В любом случае всё это эвристики, и в пакетном режиме работать будет ненадёжно.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Определить громкость звука в аудиофайле

Сообщение azsx »

нет в аудио файле из старт поста все звки тихие, в том числе и посторонние. Но лично мне важен только голос диктора.
В основном такой проблемы нет, если скачивать только best, но тогда не будет самого лучшего видео и аудио дорожки.
Спасибо сказали:
Ответить