abox.tools

언어: 한국어

음질을 잃지 않고 오디오 자르는 법

오디오는 잘린 자리가 표시해 둔 그 순간에 정확히 떨어집니다. 어떤 플레이어에서든,언제나요. 영상은 그렇지 않습니다. 그 이유와, 진짜 걸림돌 하나, 그리고 그것을어떻게 다루는지 적었습니다.

오디오 자르기 열기 재생하면서 남길 곳에 표시하십시오. 표시한 만큼이 한 파일로, 말한 자리에서 잘려 돌아옵니다.

Markdown으로 보기

짧은 답

오디오 자르기를 열고 녹음을 넣은 다음, I와 O로 남기고 싶은 구간을 표시하고(몇 개든 상관없습니다) 내보내세요. 잘린 자리는 표시한 그 샘플에 정확히 떨어지고, 남긴 샘플은 들어온 그대로 나오며, 이어 붙인 자리에는 5밀리초 페이드가 들어가 딱 소리를 낼 수가 없습니다.

할 일은 그게 전부입니다. 이 페이지의 나머지는 그 정확함이 광고 문구가 아니라 진짜인 이유와, 소리 두 조각을 이어 붙일 때 실제로 어긋나는 딱 한 가지에 대한 이야기입니다.

영상에서는 안 되는 정확함이 오디오에서는 되는 이유

영상은 완성된 그림을 죽 늘어놓은 형태로 저장되지 않습니다. 그러면 너무 커지니까요. 대부분의 프레임은 이웃 프레임과 무엇이 다른지에 대한 설명으로 저장되어서 혼자서는 디코딩할 수 없습니다. 혼자 설 수 있는 것은 키프레임뿐이고, 키프레임은 보통 1초에서 10초 간격으로 놓입니다. 그래서 프레임을 복사하는 방식의 자르기 도구는 원하는 곳에서 시작할 수 없습니다. 키프레임에서 시작해야 하고, 잘라 낸 영상이 표시보다 1~2초 앞에서 시작하는 일이 생기는 것도 그 때문입니다. 영상 쪽 가이드는 대부분 그 이야기입니다.

소리에는 그에 해당하는 것이 없습니다. 녹음은 디코딩하고 나면 숫자의 줄입니다. 채널마다 초당 수만 개씩이고, 그 하나하나가 온전히 혼자 섭니다. 1,234,567번째 샘플은 1,234,566번째가 없어도 뜻을 잃지 않습니다. 그러니 자르는 자리는 어느 샘플이든 될 수 있고, “표시한 바로 그 자리”는 말 그대로입니다. 초 단위 표시에 샘플레이트를 곱해서 가장 가까운 정수 샘플로 반올림한 값이니까요. 48 kHz라면 그 반올림은 많아야 10마이크로초입니다.

플레이어마다 다르게 굴 걱정도 없습니다. 잘라 낸 영상은 대부분의 플레이어가 지키고 일부는 무시하는 편집 표시에 기대지만, 잘라 낸 WAV는 샘플 그 자체라서 플레이어가 달리 해석할 여지가 남지 않습니다.

걸림돌: 이어 붙인 자리는 끊긴 자리입니다

오디오를 자를 때 실제로 어긋나는 것이 이것이고, 괜찮은 도구가 여기에 설정을 두는 이유이기도 합니다.

소리는 파동입니다. 어떤 낱말 한가운데서 다른 낱말 한가운데로 곧장 이어 붙이면, 앞 조각의 마지막 샘플과 뒤 조각의 첫 샘플 사이에는 아무 관계도 없습니다. 파형이 한 샘플 만에 범위의 꼭대기 근처에서 바닥 근처로 뛸 수도 있습니다. 그 도약을 요구받은 스피커 콘은 자기가 낼 수 있는 가장 날카로운 소리를 내고, 그것이 이어 붙인 자리에서 들리는 딱 소리입니다.

이것은 음질 손실과도, 형식과도 상관이 없습니다. 완벽하게 무손실인 자르기로, 완벽하게 깨끗한 녹음에서도 일어납니다. 끊긴 자리는 원래 그런 소리를 냅니다. 샘플 단위로 정확히 자르고 그 밖에는 아무것도 하지 않는 도구는 어떤 자리에서는 소리를 내고 어떤 자리에서는 내지 않습니다. 두 끝이 파형의 어디에 놓였느냐에만 달렸으니까요.

5밀리초 페이드가 실제로 하는 일

해결책은 자르기 직전에 음량을 무음까지 내리고 직후에 다시 올리는 것입니다. 그러면 뛸 단차가 남지 않습니다. 여기서 말하는 “페이드”는 그것뿐입니다. 양쪽 끝의 몇백 샘플에 걸어 둔 경사면이지요.

재미있는 것은 길이입니다. 5밀리초는 48 kHz에서 대략 240샘플입니다. 콘이 움직임을 마치기에는 충분히 길고(딱 소리는 완전히 사라집니다), 페이드로 들리기에는 턱없이 짧습니다. 5밀리초는 자음 하나를 발음하는 시간의 약 5분의 1입니다. 음량이 움직이는 것은 느끼지 못합니다. 느껴지는 것은 이음매가 깨끗하다는 것뿐입니다.

더 긴 페이드를 고를 수 있게 둔 것은 그것을 원하는 소재가 있기 때문입니다. 음악을 이어 붙일 때는 20이나 50밀리초에 손을 뻗을 만합니다. 거기서 끊기는 것은 음절이 아니라 길게 끄는 음이고, 가장 짧은 경사면으로는 들릴 만한 팝 소리가 남을 수 있으니까요. 말소리라면 5밀리초를 넘길 일이 거의 없습니다.

페이드는 진짜로 잘린 가장자리에만 놓여야 합니다. 어떤 구간이 녹음의 맨 앞에서 시작한다면 그 앞에서는 아무것도 걷어 내지 않은 것입니다. 무엇을 자르기 전에도 파일은 거기서 시작했으니까요. 그런 자리를 서서히 올리는 것은 아무도 부탁하지 않은 편집입니다. 여기 도구는 이음매가 있는 곳에만 페이드를 놓고, 그래서 아무것도 자르지 않으면 모든 샘플이 손대지 않은 채로 남습니다.

내보내기 카드. 비트 깊이 메뉴, 밀리초 단위의 페이드 길이, 그리고 조각과 이음매와 길이를 센 요약.
페이드는 이음매에만 걸립니다. 그 점이 중요한데, 녹음 첫머리에 걸린 페이드는 아무도 청하지 않은 변경이 되기 때문입니다.

MP3를 자르면 왜 WAV가 나오나

MP3든 M4A든 Ogg든 Opus든 열어서 자를 수 있습니다. 돌아오는 것은 WAV인데, 이것은 기능이라기보다 맞바꿈이니 그 점을 분명히 해 두는 편이 낫겠습니다.

압축된 오디오를 자르는 길은 둘입니다. 하나는 압축된 데이터를 그대로 잘라, 부호화된 틀을 통째로 새 파일에 옮기고 디코딩은 하지 않는 방법입니다. 파일은 작게 남고 음질도 치르지 않습니다. 다만 MP3의 틀 하나가 약 26밀리초라서, 모든 자르기가 가장 가까운 틀 경계로 반올림됩니다. 키프레임 문제의 오디오판인 셈입니다. 게다가 형식에 묶인 작업이라, MP3를 읽는 코드는 Opus 파일을 하나도 자르지 못합니다.

다른 길은 디코딩해서 샘플 단위로 정확히 자르고 샘플을 다시 써내는 방법입니다. 반올림되는 것이 없고, 브라우저가 재생할 수 있는 형식이면 전부 같은 방식으로 되며, 페이드가 애초에 가능해집니다. 디코딩하지 않은 음량에는 경사면을 걸 수 없으니까요. 대신 샘플을 어떤 형식으로든 다시 써야 하는데, 여기서 쓸 수 있는 MP3나 AAC 인코더를 싣고 다니는 브라우저는 없습니다. WAV는 인코더가 필요 없습니다. 짧은 머리말을 앞에 붙인 샘플 그 자체라서, 그 단계에서는 잃을 것이 없습니다.

실제 결과는 이렇습니다. 나오는 것은 들어간 것보다 훨씬 큽니다. 스테레오라면 1분에 대략 10메가바이트입니다. 그리고 그것이 출처인 MP3보다 좋아지지는 않습니다. 이미 일어난 압축은 되돌릴 수 없으니까요. WAV는 어디서나 열리고, MP3가 필요한 곳에서는 그것으로 한 단계에 만들 수 있습니다.

여러 구간을 한 번에 표시하기

대부분의 온라인 자르기 도구는 손잡이 한 쌍을 주고 어느 한 구간을 남길지 묻습니다. 실제 녹음에서는 그것이 틀린 질문입니다. 한 시간짜리 인터뷰에 좋은 대목이 하나뿐일 리 없습니다. 여기저기 흩어져 여섯 군데쯤 있고, 그건 한 번 들어 보면서 찾는 것입니다.

그러니 들으면서 표시하세요. 구간이 시작하는 곳에서 I, 끝나는 곳에서 O를 원하는 만큼 누르면 됩니다. 한 쌍마다 시간을 다시 잡거나 순서를 바꿀 수 있는 줄이 하나 생기고, 파형 위에는 띠가 그려집니다. 완성된 파일은 그 줄들을 차례로 이어 붙인 것입니다.

같은 표시 목록이 반대 질문에도 답합니다. 없애고 싶은 것이 “어” 하는 소리, 울리는 전화, 말을 다시 시작한 대목이라면 그것들을 표시하고 “표시한 부분 빼기”로 바꾸세요. 그러면 표시하지 않은 부분이 이어 붙습니다. 어느 쪽이든 같은 표시라서, 둘 사이를 오가며 완성 길이가 바뀌는 것을 볼 수 있고 같은 자리를 두 번 표시할 일도 없습니다.

표시는 공들이는 작업이고, 탭 하나 닫았다고 날아가서는 안 됩니다. 그래서 표시는 평범한 텍스트 파일로 저장되고 다시 불러옵니다. 형식은 동영상 구간 자르기가 쓰는 것과 같아서, 영상에 대고 만든 표시를 그 영상에서 뽑아낸 오디오에 얹을 수도 있고 그 반대도 됩니다.

파형을 보세요

재생 위치를 문질러 가며 소리를 표시하는 것은 짐작이지만, 눈으로 보고 표시하는 것은 아닙니다. 무음은 무음처럼 생겼고, 기침은 기침처럼 생겼고, 누가 말을 시작하기 전의 방 소리 4초는 찾을 것도 없이 바로 보입니다.

이것이 가장 크게 작용하는 곳은 사람들이 조금씩 어긋나게 잡는 표시입니다. 문장의 시작은 대개 숨을 들이쉬는 앞쪽 고요에 놓여야 하지 뒤가 아니고, 끝은 대개 마지막 자음에서 자르기보다 방 소리를 한 박자 남기는 편이 낫습니다. 둘 다 그림에서는 뻔히 보이지만 귀로만 맞히기는 거의 불가능합니다. 표시한 구간의 양 끝을 파형을 따라 끌어서 미세하게 옮기세요.

두 구간이 표시된 파형. 문장 사이의 빈 곳이 뚜렷이 보이고, 각 구간의 시작과 끝과 길이를 적은 표가 있다.
빈 곳은 누군가 말을 멈춘 자리입니다. 초시계와 달리 파형을 볼 값어치가 있는 이유가 거기에 있습니다.

자르기는 페이드가 아니고, 편집도 아닙니다

서로 바꿔 쓰이는 세 낱말입니다. 자르기는 녹음의 어느 부분이 살아남을지를 바꿉니다. 페이드는, 몇 초에 걸쳐 하는 음악 쪽의 그것은, 음량에 일부러 거는 효과이고, 위에서 말한 몇 밀리초는 그것이 아닙니다. 그건 딱 소리를 없애는 일이고, 마침 같은 계산을 쓸 뿐입니다.

녹음을 거꾸로 돌리거나, 빠르게 하거나, 음높이를 그대로 둔 채 느리게 하거나, 너무 작게 녹음돼서 키우고 싶다면 그건 오디오 편집의 일입니다. 디코더도 WAV를 쓰는 부분도 같고, 그사이에 다른 계산을 할 뿐입니다.

이 일에 업로드가 필요 없는 이유

자르기는 배열 위에서 하는 산수입니다. 디코더는 브라우저가 이미 갖고 있습니다. <audio> 요소로 그 파일을 재생하는 바로 그것이지요. 그리고 샘플이 디코딩되고 나면, 일부를 남기고 나머지를 버리는 일은 복사입니다. 이 설명 어디에도 서버가 더 잘할 수 있는 단계는 없고, 서버까지 다녀오는 왕복이 작업 전체에서 가장 느린 부분이 될 것입니다.

게다가 이것은 업로드 비용이 사람들 생각보다 큰 종류의 파일입니다. 녹음은 목소리니까요. 인터뷰, 강의, 통화, 음성 메모, 상담 시간, 간직하고 싶은 아이의 한마디. 여기 도구에는 어떤 종류의 네트워크 기능도 없고, 페이지의 Content-Security-Policy에는 연결해도 되는 주소가 모두 적혀 있는데 그중 이 사이트 것은 하나도 없습니다.

말보다 확인이 낫다면, 인터넷을 끊고 그대로 녹음을 잘라 보세요. 온라인 변환기에 파일을 올려도 괜찮을까요? 에 이런 확인이 세 가지 더 있습니다.