오디오 자르기 정밀도: MP3가 아무 지점에서나 안 잘리는 이유

오디오 편집 도구에서 시작 시간과 끝 시간을 정확히 입력했는데도, 잘라낸 파일을 재생해보면 원하던 지점보다 살짝 앞서거나 뒤에서 소리가 시작되는 경우가 있습니다. 숫자를 잘못 입력한 게 아닌데도 이런 일이 생기는 이유는 음원 파일이 저장되는 방식 자체에 있습니다.
MP3나 AAC 같은 압축 오디오는 초 단위로 자유롭게 나뉘어 저장되지 않습니다. 정해진 크기의 블록으로 인코딩되어 있어서, 이 블록 경계와 정확히 맞아떨어지지 않는 지점을 자르려면 추가 처리가 필요할 수 있습니다. 이 원리를 알면 오디오 자르기 결과가 왜 상황마다 다르게 느껴지는지 이해할 수 있습니다.
요약 ① 압축 오디오는 초 단위가 아니라 일정 크기의 블록(프레임) 단위로 저장됩니다. ② 블록 경계와 맞지 않는 지점을 그대로 잘라내면(스트림 복사) 원하는 지점보다 앞뒤로 어긋난 소리가 남을 수 있습니다. ③ 임의의 지점에서 정확히 자르려면 오디오를 디코딩한 뒤 다시 인코딩해야 하며, audio-trim은 이 방식으로 동작합니다.
압축 오디오는 "블록" 단위로 저장됩니다
MP3 같은 압축 형식은 소리를 아주 작은 단위(블록·프레임)로 나눠서 각각을 압축한 뒤 이어 붙인 파일입니다. 각 블록은 보통 수십 밀리초 분량의 소리를 담고 있고, 재생 프로그램은 이 블록들을 순서대로 풀어서 이어 재생합니다.
문제는 "1분 30초 지점에서 잘라줘"라는 요청이 항상 어느 한 블록의 시작과 정확히 일치하지는 않는다는 점입니다. 원하는 지점이 블록 중간에 걸쳐 있으면 그 블록을 통째로 남기거나 통째로 버리는 수밖에 없어, 실제 잘리는 위치가 요청한 시간과 살짝 어긋나게 됩니다.
"스트림 복사"로 자르면 왜 위치가 밀릴까
가장 빠른 자르기 방식은 압축된 블록을 풀었다 다시 압축하지 않고, 블록 단위 그대로 잘라 붙이는 "스트림 복사"입니다. 이 방식은 속도는 빠르지만, 자를 수 있는 지점이 블록 경계로 제한됩니다.
그 결과 사용자가 입력한 시간과 실제 파일에 반영되는 지점 사이에 오차가 생길 수 있습니다. 이 오차는 보통 아주 짧지만, 노래 시작 부분의 무음을 정확히 걷어내려 하거나 특정 대사 직전에서 딱 끊고 싶을 때는 체감되는 차이로 남습니다.
정확히 자르려면 왜 다시 인코딩해야 하는가
블록 경계에 상관없이 임의의 지점에서 정확히 자르려면, 압축된 블록을 일단 원래의 소리 신호로 풀어낸 뒤(디코딩) 원하는 지점에서 정확히 잘라내고, 그 결과를 다시 압축하는(인코딩) 과정이 필요합니다. 디코딩된 신호는 블록이 아니라 연속된 소리 값이므로, 여기서는 임의의 지점을 정확히 지정할 수 있습니다.
다만 이 방식은 결과물을 다시 압축하는 과정을 한 번 더 거치기 때문에, 원본 파일의 인코딩 데이터를 그대로 재사용하는 스트림 복사와는 성격이 다릅니다.
시작·끝 시간을 입력하고 구간 자르기를 누르면 브라우저 안에서 바로 잘라 MP3로 다운로드할 수 있는 오디오 자르기 도구

audio-trim은 이 원리를 어떻게 처리하나
audio-trim은 스트림 복사가 아니라 방금 설명한 디코딩 후 재인코딩 방식으로 동작합니다. 사용자가 입력한 시작·끝 시간을 그대로 받아 그 구간을 잘라낸 뒤, 결과를 MP3(libmp3lame, 192kbps)로 다시 인코딩해 내려받을 수 있게 해줍니다. 그래서 원본이 WAV든 M4A든 어떤 형식이든, 잘리는 위치는 입력한 시간에 맞춰지지만 결과 파일은 항상 MP3로 나옵니다.
이 처리는 브라우저 안에서 이뤄집니다. 파일을 올려도 오디오 데이터 자체는 서버로 전송되지 않고, 브라우저에 불러온 오디오 처리 엔진이 로컬에서 직접 자르고 다시 인코딩한 뒤 그 결과를 곧바로 재생하거나 내려받을 수 있게 보여줍니다. 최초 실행 시에는 이 엔진을 내려받는 시간이 더 걸릴 수 있습니다.
정리
- 압축 오디오는 초 단위가 아니라 일정 크기의 블록(프레임) 단위로 저장됩니다.
- 블록 경계를 그대로 두고 자르는 스트림 복사 방식은 빠르지만, 자를 수 있는 위치가 블록 단위로 제한됩니다.
- 임의의 지점에서 정확히 자르려면 디코딩 후 재인코딩하는 과정이 필요합니다.
- audio-trim은 시작·끝 시간을 입력받아 이 방식으로 구간을 자르고, 결과를 항상 MP3(192kbps)로 다시 인코딩해 내려줍니다.
- 이 과정은 브라우저 안에서 처리되며, 원본 오디오 파일 자체는 서버로 전송되지 않습니다.
시작·끝 시간을 입력하고 구간 자르기를 누르면 브라우저 안에서 바로 잘라 MP3로 다운로드할 수 있는 오디오 자르기 도구
자주 묻는 질문
MP3를 자르면 원본과 완전히 동일한 음질로 무손실 자르기가 되나요?
아닙니다. 임의의 지점에서 정확히 자르려면 오디오를 디코딩한 뒤 다시 인코딩하는 과정을 거쳐야 하므로, 원본 압축 데이터를 그대로 재사용하는 무손실 방식은 아닙니다. audio-trim도 잘라낸 결과를 MP3(192kbps)로 다시 인코딩해 제공합니다. 원본 인코딩 데이터를 손대지 않고 블록 단위로만 잘라내는 방식은 속도는 빠르지만 자를 수 있는 위치가 블록 경계로 제한된다는 차이가 있습니다.
시작 시간을 정확히 입력했는데 왜 소리가 살짝 밀려서 들리는 도구가 있나요?
블록 단위 그대로 잘라내는 스트림 복사 방식을 쓰는 도구라면, 입력한 시간이 블록 경계와 정확히 일치하지 않을 경우 가장 가까운 블록 경계로 잘리는 위치가 옮겨질 수 있습니다. 디코딩 후 재인코딩하는 방식은 이런 블록 단위 제약 없이 입력한 시간에 맞춰 자르기 때문에 이런 어긋남이 생기지 않습니다.
시작·끝 시간은 어떤 형식으로 입력해야 하나요?
분:초 형식(예 1:30), 시:분:초 형식(예 0:01:05), 또는 초 단위 숫자(예 90)로 입력할 수 있습니다. 파일을 올리면 시작 시간은 0:00으로, 끝 시간은 원본 길이 전체로 자동 채워지므로 원하는 구간만큼만 값을 바꾸면 됩니다.
원본이 WAV나 M4A여도 결과가 항상 MP3로 나오나요?
네. audio-trim은 입력 형식과 관계없이 잘라낸 구간을 항상 MP3(192kbps)로 다시 인코딩해 다운로드로 제공합니다. 원본과 동일한 형식·비트레이트로 결과물을 유지하고 싶다면 이 점을 미리 확인해야 합니다.
