FFmpeg проверить каналы звука 7.1 для тишины
Это дополнительный вопрос из моего предыдущего вопроса, заданного здесь, где мне нужно было искать тишину в конкретной звуковой дорожке. Здесь ffmpeg
спасательное решение, где помогает получить некоторые метаданные:
ffmpeg -i file -map 0:a:1 -af astats -f null -
Но у меня есть другой тип ввода .mp4
файлы, где у них есть один трек 8
(т.е. 7.1) аудиоканалы. По-видимому, эти файлы транскодируются из оригинального файла (как-то 4-х трековые стерео врезаны в эти файлы). Теперь, как и в предыдущем случае, мне нужно знать, был ли исходный файл 2-канальным стерео или 5.1 (6) каналом.
Как узнать, есть ли конкретный канал звуковой дорожки (скажем, Center
канал) молчит / отключен, возможно, с использованием ffmpeg
? Вот образец .mp4
файл.
1 ответ
Вы можете использовать фильтр разделения каналов, чтобы разделить аудиоканалы и запустить безмолвное обнаружение каждого из них.
Пример:
ffmpeg -i test2.mp4 -filter_complex "[0:a]channelsplit=channel_layout=7.1:channels=FC[fc];[fc]silencedetect" -f null /dev/null
Вы можете найти больше информации об управлении аудиоканалом здесь: https://trac.ffmpeg.org/wiki/AudioChannelManipulation
Существует также фильтр astats, который можно использовать для обнаружения тихих треков / каналов.
Это то, что он выводит для канала 4 предлагаемого тестового файла, который действительно выглядит совершенно тихим.
ffmpeg -i "$in" -vn -sn -dn -map 0:a -af "astats=measure_overall=none" -f null -
... [Parsed_astats_0 @ 0x6beed00] Channel: 4 [Parsed_astats_0 @ 0x6beed00] DC offset: 0.000000 [Parsed_astats_0 @ 0x6beed00] Min level: 0.000000 [Parsed_astats_0 @ 0x6beed00] Max level: 0.000000 [Parsed_astats_0 @ 0x6beed00] Min difference: 0.000000 [Parsed_astats_0 @ 0x6beed00] Max difference: 0.000000 [Parsed_astats_0 @ 0x6beed00] Mean difference: 0.000000 [Parsed_astats_0 @ 0x6beed00] RMS difference: 0.000000 [Parsed_astats_0 @ 0x6beed00] Peak level dB: -inf [Parsed_astats_0 @ 0x6beed00] RMS level dB: -inf [Parsed_astats_0 @ 0x6beed00] RMS peak dB: -inf [Parsed_astats_0 @ 0x6beed00] RMS trough dB: -inf [Parsed_astats_0 @ 0x6beed00] Crest factor: 1.000000 [Parsed_astats_0 @ 0x6beed00] Flat factor: -inf [Parsed_astats_0 @ 0x6beed00] Peak count: 6057984 [Parsed_astats_0 @ 0x6beed00] Bit depth: 0/0 [Parsed_astats_0 @ 0x6beed00] Dynamic range: -inf [Parsed_astats_0 @ 0x6beed00] Zero crossings: 0 [Parsed_astats_0 @ 0x6beed00] Zero crossings rate: 0.000000 [Parsed_astats_0 @ 0x6beed00] Number of NaNs: 0 [Parsed_astats_0 @ 0x6beed00] Number of Infs: 0 [Parsed_astats_0 @ 0x6beed00] Number of denormals: 0 [Parsed_astats_0 @ 0x6beed00] Channel: 5 ...
Примерно так будет отображаться обзор всех каналов:
ffmpeg -i "$in" -vn -sn -dn -map 0:a -af "astats=measure_overall=none" -f null - 2>&1 \
| egrep 'Channel|(Max|Peak) level'
[Parsed_astats_0 @ 0x7567d00] Channel: 1 [Parsed_astats_0 @ 0x7567d00] Max level: 0.978271 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -0.190818 [Parsed_astats_0 @ 0x7567d00] Channel: 2 [Parsed_astats_0 @ 0x7567d00] Max level: 0.978271 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -0.190818 [Parsed_astats_0 @ 0x7567d00] Channel: 3 [Parsed_astats_0 @ 0x7567d00] Max level: 0.000006 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -103.162709 [Parsed_astats_0 @ 0x7567d00] Channel: 4 [Parsed_astats_0 @ 0x7567d00] Max level: 0.000000 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -inf [Parsed_astats_0 @ 0x7567d00] Channel: 5 [Parsed_astats_0 @ 0x7567d00] Max level: 0.000006 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -103.162709 [Parsed_astats_0 @ 0x7567d00] Channel: 6 [Parsed_astats_0 @ 0x7567d00] Max level: 0.000006 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -103.162709 [Parsed_astats_0 @ 0x7567d00] Channel: 7 [Parsed_astats_0 @ 0x7567d00] Max level: 0.978271 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -0.190818 [Parsed_astats_0 @ 0x7567d00] Channel: 8 [Parsed_astats_0 @ 0x7567d00] Max level: 0.978271 [Parsed_astats_0 @ 0x7567d00] Peak level dB: -0.190818