Como posso cortar uma fração de segundo do início de um arquivo MP3 já codificado sem transcodificar o MP3 novamente?

1

Estou usando o macOS 10.3.6 (High Sierra) e, enquanto atrás, eu tinha um conjunto de 4 caixas de CD de algumas músicas, copiei as faixas para MP3 e simplesmente armazenei os arquivos no meu sistema. Eu tive que marcar manualmente e adicionar metadados para cada uma das mais de 100 faixas (não pergunte) e eu me livrei dos CDs originais há um tempo também (não pergunte também), então eu não posso re-ripar facilmente eles.

Então, aqui está o problema : Aparentemente, a ferramenta MP3 que eu usei na época adicionou uma fração de segundo "pop" ao início de cada faixa. Eu não sabia - ou não estava prestando atenção - na época, mas cada uma das mais de 100 faixas tem aquele pop irritante logo no começo da faixa.

Eu li este tópico no Stack Overflow, “ Clique em Som no começando ao usar LAME ”e enquanto o conselho é sólido - explicando como às vezes LAME acidentalmente pode codificar o cabeçalho de um arquivo de áudio como áudio puro - a realidade é que as soluções apresentadas me forçariam a transmitir o MP3 já codificado via algo como < href="https://linux.die.net/man/3/fseek"> fseek e, em seguida, re-codificar o MP3 (aka: transcodificar), que está longe de ser ideal.

Então, há alguma maneira de eu cortar cerca de 1/8 de segundo desses MP3s já codificados para me livrar do “pop” e evitar a transcodificação dos MP3s?

Estou procurando especificamente uma solução baseada em macOS relativamente simples que, no máximo, exigiria que uma nova ferramenta (se necessário) fosse instalada via Homebrew. Não pedir um script completo, mas pelo menos uma ferramenta e uma dica de configuração para me apontar na direção certa.

    
por JakeGould 22.07.2018 / 16:39

1 resposta

2

Ok, então eu consegui resolver isso usando a mágica do FFmpeg (que eu já instalei no macOS via Homebrew). Especificamente, o parâmetro -ss (aka: seeking) associado à opção copy aplicada ao fluxo de áudio funciona como um charme! O comando pode ser destilado para isso:

ffmpeg -ss 0.125 -i "input.mp3" -acodec copy "output.mp3"

A configuração de -ss para 0.125 e simplesmente a especificação de entrada e saída com copy definido como -acodec é tudo o que precisa ser feito.

E como - conforme explicado na pergunta - no meu caso eu tenho mais de 100 arquivos para lidar. Eu criei um script Bash simples que vai encontrar todos os MP3s que devem ter 1/8 do áudio de abertura cortado e despejá-los em um subdiretório mp3/ . Espero que isso ajude alguém em uma situação semelhante!

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
    
por 22.07.2018 / 16:47