Как можно обрезать долю секунды из начала уже закодированного MP3-файла, не перекодируя MP3 заново?

Как можно обрезать долю секунды из начала уже закодированного MP3-файла, не перекодируя MP3 заново?

Я использую macOS 10.3.6 (High Sierra), и некоторое время назад у меня был бокс-сет из 4 CD с музыкой, я скопировал треки в MP3 и просто сохранил файлы в своей системе. Мне пришлось вручную помечать и добавлять метаданные к каждому из 100+ треков (не спрашивайте), и я также некоторое время назад избавился от оригинальных CD (тоже не спрашивайте), поэтому я не могу легко перекопировать их.

Вот в чем проблема: Видимо, MP3-инструмент, который я использовал в то время, добавлял долю секунды «щелчка» в начало каждого трека. Я не знал — или не обращал внимания — в то время, но каждый из 100+ треков имеет этот раздражающий щелчок прямо в начале трека.

Я прочитал эту ветку на Stack Overflow: «Звук щелчка в начале при использовании 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

Связанный контент