Как разделить mp3-файл, обнаружив тихие части?

У меня есть большой mp3-файл с другими песнями. Есть ли способ разбить файл, обнаружив тихие части? Я бы предпочел инструмент командной строки (например, ffmpeg).

Пробовал:

youtube-dl --ignore-errors --format bestaudio --extract-audio --audio-format mp3 --audio-quality 160K - -output "% (title) s.% (ext) s" --yes-playlist

17
задан 10 August 2020 в 15:07

5 ответов

mp3splt - это команда для разделения mp3-файлов, и я считаю, что mp3splt имеет детектор тишины (среди других методов обнаружения) ... без перекодирования

sudo apt-get install mp3splt

https://manpages.ubuntu.com/manpages/focal/en/man1/mp3splt.1.html

согласно странице руководства ...

mp3splt -s your.mp3

Mp3splt попытается автоматически определить точки разделения с обнаружением тишины и разделит все найденные треки с параметрами по умолчанию.

или

mp3splt -s -p th = -50, nt = 10 your.mp3

передача требуемых параметров, разделение 10 треков (или меньше, если слишком много) с наиболее вероятными точками тишины на пороге -50 дБ.

3
ответ дан 11 August 2020 в 20:11

Получите тайминги, проиграв клип, который вы хотите вырезать, я обычно делаю длинные видеоклипы, которые хочу обрезать, или вырезать части клипа. Это можно сделать с помощью программного обеспечения для редактирования видео, но оно обычно также повторно сжимает файл при экспорте. Это снижает качество видео, а также занимает много времени. решение состоит в том, чтобы выполнить резку с нулевыми потерями, есть в ubuntu, в ubuntu есть способ сделать это с помощью FFmpeg:

пример:

ffmpeg -i Myclip.mp4 -ss 00:15:10 -to 00:09:10 -c:v copy -c:a copy output.mp4

выше будет обрезать клип с примерно 0ч10мин10с до 0ч09мин0с, и это займет несколько секунд .

1
ответ дан 11 August 2020 в 20:11

Вы можете сделать это вручную с помощью ffmpeg , и, конечно, все это может быть написано, если вы предпочитаете.

Получить временные метки без звука

Получить тишину с помощью фильтр обнаружения тишины :

ffmpeg -i input.mp3 -af silencedetect -f null -
  • Обратите внимание, что минимальная продолжительность тишины по умолчанию установлена ​​на 2 секунды, но ее можно изменить. См. ffmpeg -h filter = silentdetect .

  • Также имеется фильтр удаления звука .

Пример вывода с использованием awk :

$ ffmpeg -i input.mp3 -af silencedetect=d=0.5 -f null - |& awk '/silencedetect/ {print $4,$5}'
silence_start: 1.20837
silence_end: 1.92546
silence_start: 3.51778
silence_end: 4.0881
silence_start: 6.40315
silence_end: 7.7922

Split

] Существует несколько методов разделения.

мультиплексор сегментов

Пример разделения с помощью мультиплексора сегментов :

ffmpeg -i input.mp3 -f segment -segment_times 1.20837,1.92546,3.51778,4.0881,6.40315,7.7922 -reset_timestamps 1 -map 0:a -c:a copy output_%03d.mp3
  • Вам необходимо удалить молчащие сегменты. Вы можете выполнить цикл Bash для выходных файлов, использовать silentdetect для поиска этих сегментов, а затем удалить / переместить их, если вы хотите сценарий этого процесса.

  • Обратите внимание на использование -c:

7
ответ дан 11 August 2020 в 20:11

Скорее всего, вы не получите готового решения, но вам нужно будет создать сценарий самостоятельно. Для этого создан pydub (он использует внутренне ffmpeg или libav) и имеет функции под названием split_on_silence () с некоторыми настройками, например keep_silence = 100 .

Некоторые ссылки из stackoverflow, в которых есть примеры: 37725416 и 45526996 И от создателя pydub .

Из 1-й ссылки интересная часть:

# Load your audio.
song = AudioSegment.from_mp3("your_audio.mp3")

chunks = split_on_silence (
   # Use the loaded audio. 
   song, 
   # Specify that a silent chunk must be at least 2 seconds or 2000 ms long.
   min_silence_len = 2000,
   # Consider a chunk silent if it's quieter than -16 dBFS.
   # (You may want to adjust this parameter.)
   silence_thresh = -16
)
17
ответ дан 11 August 2020 в 20:11

Я знаю, что вы предпочли бы инструмент командной строки, и не могу винить вас. В то же время, если вы делаете то, что я думаю, вы делаете, Audacity - лучший выбор. Это позволит вам разделить файл с большей точностью и с гораздо меньшим количеством проб и ошибок.

(Я пробовал использовать ffmpeg для разделения таких файлов, и иногда я получаю разделение, которое мне не нужно.)

Вот соответствующая часть руководства Audacity .

0
ответ дан 11 August 2020 в 20:11

Другие вопросы по тегам:

Похожие вопросы: