MP3를 다시 트랜스코딩하지 않고 이미 인코딩된 MP3 파일의 시작 부분을 몇 분의 1초씩 자르려면 어떻게 해야 합니까?

MP3를 다시 트랜스코딩하지 않고 이미 인코딩된 MP3 파일의 시작 부분을 몇 분의 1초씩 자르려면 어떻게 해야 합니까?

저는 macOS 10.3.6(High Sierra)을 사용하고 있으며 얼마 전에는 음악이 들어 있는 4개의 CD 상자 세트가 있었고 트랙을 MP3로 추출한 다음 파일을 시스템에 저장했습니다. 100개 이상의 트랙 각각에 수동으로 태그를 지정하고 메타데이터를 추가해야 했고(묻지 마세요) 얼마 전에 원본 CD도 제거했기 때문에(둘 다 묻지 마세요) 쉽게 다시 리핑할 수 없습니다. 그들을.

그래서 여기에 문제가 있습니다: 당시 제가 사용했던 MP3 도구는 각 트랙의 시작 부분에 몇 분의 1초의 "팝"을 추가한 것 같습니다. 그 당시 나는 깨닫지 못했거나 주의를 기울이지 않았지만, 100개가 넘는 트랙 각각의 트랙 시작 부분에 짜증나는 팝이 있습니다.

저는 Stack Overflow에서 이 스레드를 읽었습니다.LAME 사용 시 처음에 소리를 클릭하세요.” 그리고 LAME이 실수로 오디오 파일의 헤더를 순수 오디오로 인코딩할 수 있다는 점을 설명하는 확실한 조언이 있지만 실제로는 제시된 솔루션을 사용하면 이미 인코딩된 MP3를 다음과 같은 방법으로 스트리밍해야 한다는 것입니다.fseek그런 다음 이상적이지 않은 MP3를 다시 인코딩(일명: 트랜스코딩)합니다.

그렇다면 "팝"을 제거하고 MP3 트랜스코딩을 방지하기 위해 이미 인코딩된 MP3에서 약 1/8초를 줄일 수 있는 방법이 있습니까?

저는 특히 Homebrew를 통해 새 도구(필요한 경우)만 설치하면 되는 비교적 간단한 macOS 기반 솔루션을 찾고 있습니다. 전체 스크립트를 요구하는 것이 아니라 올바른 방향을 알려줄 최소한의 도구와 구성 팁을 요구합니다.

답변1

좋아요, 그래서 저는 FFmpeg(Homebrew를 통해 macOS에 이미 설치한)의 마법을 사용하여 이 문제를 해결했습니다. 구체적으로-ss(일명: 탐색) 매개변수오디오 스트림에 적용된 옵션 과 결합하면 copy정말 매력적입니다! 명령은 다음과 같이 정리될 수 있습니다.

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

-ss를 설정 0.125한 다음 단순히 입력과 출력을 로 copy설정 하여 지정 -acodec하기만 하면 됩니다.

그리고 질문에 설명된 대로 제 경우에는 처리해야 할 파일이 100개 이상 있으므로 오프닝 오디오의 1/8을 잘라야 하는 모든 MP3를 찾아 하위 디렉터리에 덤프하는 간단한 Bash 스크립트를 만들었습니다 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

관련 정보