Как можно обрезать долю секунды от начала уже закодированного файла MP3, не перекодируя MP3 снова?
Я использую macOS 10.3.6 (High Sierra), и некоторое время назад у меня было 4 набора компакт-дисков с музыкой, я записывал треки в MP3 и просто сохранял файлы в своей системе. Мне пришлось вручную пометить и добавить метаданные к каждому из 100+ треков (не спрашивай), и некоторое время назад я также избавился от оригинальных компакт-дисков (тоже не спрашивай), так что я не могу легко перезаписать их.
Так вот в чем проблема: очевидно, инструмент MP3, который я использовал в то время, добавлял доли секунды "трещотки" к началу каждой дорожки. Я не знал - или не обращал внимания - в то время, но каждый из 100+ треков имеет эту надоедливую популярность прямо в начале трека.
Я читал эту ветку о переполнении стека: " Звук щелчка в начале при использовании LAME ", и хотя этот совет твердый - объясняет, как иногда LAME может случайно кодировать заголовок аудиофайла как чистый звук - реальность такова, что представленные решения заставят меня поток уже закодированный MP3 через что-то вроде fseek
а затем перекодировать MP3 (иначе: перекодировать), что далеко от идеала.
Так есть ли какой-нибудь способ, которым я мог бы урезать приблизительно 1/8 секунды от этих уже закодированных MP3, чтобы избавиться от "популярности" и избежать перекодирования MP3?
Я специально ищу относительно простое решение на основе macOS, которое, самое большее, потребует установки нового инструмента (если требуется) через Homebrew. Не просить полный сценарий, но по крайней мере инструмент и подсказку конфигурации, чтобы указать мне в правильном направлении.
1 ответ
Итак, мне удалось решить эту проблему, используя магию FFmpeg (которую я уже установил на macOS через Homebrew). В частности, -ss
(он же ищет) параметр в сочетании с copy
опция, примененная к аудиопотоку, работает как шарм! Команда может быть преобразована в это:
ffmpeg -ss 0.125 -i "input.mp3" -acodec copy "output.mp3"
Настройка -ss
в 0.125
а затем просто указав ввод и вывод с copy
установить на -acodec
это все, что нужно сделать.
И поскольку - как объяснено в вопросе - в моем случае у меня есть более 100 файлов для работы, я создал простой сценарий Bash, который найдет все MP3-файлы, которые должны обрезать 1/8 открываемого аудио, и выгрузит их в mp3/
подкаталог. Надеюсь, это поможет кому-то в подобной ситуации!
find -E "path/to/audio/files" -type f -iregex ".*\.(MP3)$" |\
while read full_audio_filepath
do
# Break up the full audio filepath stuff into different directory and filename components.
audio_dirname=$(dirname "${full_audio_filepath}");
audio_basename=$(basename "${full_audio_filepath}");
audio_filename="${audio_basename%.*}";
# Set the MP3 directory.
mp3_dirpath="${audio_dirname}/mp3";
mp3_filepath="${mp3_dirpath}/${audio_filename}.mp3";
# Create the child MP3 directory.
mkdir -p "${mp3_dirpath}";
# And here is where the magic happens.
ffmpeg -y -v quiet -ss 0.125 -i "$full_audio_filepath" -acodec copy "$mp3_filepath" < /dev/null;
done