Как можно обрезать долю секунды от начала уже закодированного файла 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
Другие вопросы по тегам