← 블로그 목록
오디오작성 · 8분 읽기

WAV를 MP3로 바꾸는 법 — 윈도우 기본 기능으로, 설치 없이

오디오를 잘라 받았더니 확장자가 `.wav` 이고, 10초짜리가 1.7MB나 됩니다. 메일로 보내거나 휴대폰에 넣기에는 부담스러운 크기입니다. WAV는 소리를 압축하지 않고 그대로 담는 형식이라 원래 큽니다. 다행히 윈도우 안에는 MP3로 바꾸는 기능이 이미 들어 있어서, 아무것도 설치하지 않고 폴더째 바꿀 수 있습니다. 직접 돌려서 잰 용량과 품질 차이, 그리고 온라인 변환기를 쓸 때 조심할 점을 정리했습니다.

이 글에서 소개하는 무료 도구
오디오 자르기 — 구간만 잘라 저장

구간을 골라 무손실 WAV로 저장합니다. 그 파일이 커서 부담스러울 때 이 글의 방법으로 MP3로 줄이면 됩니다.

무료로 사용하기 →

WAV는 왜 이렇게 큰가

WAV는 소리를 압축하지 않고 숫자 그대로 담습니다. 그래서 용량이 계산으로 딱 떨어집니다. CD 음질(44,100Hz·16비트·스테레오)이면 1초에 176,400바이트, 10초면 약 1.7MB입니다. 이 글을 쓰면서 만든 10초짜리 시험 파일이 정확히 1,764,044바이트였습니다.

압축하지 않으니 음질 손실이 전혀 없다는 장점이 있습니다. 편집을 계속할 파일이라면 WAV로 두는 편이 낫습니다. 문제는 주고받을 때입니다. 메일 첨부 용량, 메신저 전송, 휴대폰 저장 공간에서 몇 배 차이가 나기 때문에, 완성된 파일은 MP3로 줄이는 것이 보통입니다.

ℹ️

브라우저에서 오디오를 자르는 도구가 결과를 WAV로 주는 것도 같은 이유입니다. 브라우저에는 MP3 인코더가 없습니다. 크롬에서 확인해 보면 MediaRecorder 가 지원한다고 답하는 형식은 WebM/Opus 와 MP4/AAC 뿐이고, audio/mpeg 는 거짓입니다. MP3로 내보내려면 인코더를 따로 싣고 다녀야 해서, 대부분은 손실 없는 WAV로 저장합니다.

바꾸는 길은 세 가지입니다. 파일을 남에게 올리지 않으려면 첫 번째가 답입니다.

방법 1 — 윈도우 기본 기능 (설치 없음)

윈도우에는 미디어 파일을 다른 형식으로 옮겨 담는 기능(Media Foundation)이 들어 있고, 그 안에 MP3 인코더가 있습니다. PowerShell에서 바로 부를 수 있어서 따로 설치할 것이 없습니다. 아래 명령을 PowerShell 창에 통째로 붙여 넣으면 폴더 안의 WAV를 모두 MP3로 바꿉니다.

powershell
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$ms = [System.WindowsRuntimeSystemExtensions].GetMethods()
$op = ($ms | Where-Object { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -like 'IAsyncOperation*' })[0]
$ap = ($ms | Where-Object { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -like 'IAsyncActionWithProgress*' })[0]
function Wait-Op($o, $t) { $x = $op.MakeGenericMethod($t).Invoke($null, @($o)); $x.Wait(-1) | Out-Null; $x.Result }
function Wait-Act($a) { $x = $ap.MakeGenericMethod([double]).Invoke($null, @($a)); $x.Wait(-1) | Out-Null }

[Windows.Storage.StorageFile,   Windows.Storage, ContentType=WindowsRuntime] | Out-Null
[Windows.Storage.StorageFolder, Windows.Storage, ContentType=WindowsRuntime] | Out-Null
[Windows.Media.MediaProperties.MediaEncodingProfile, Windows.Media, ContentType=WindowsRuntime] | Out-Null
[Windows.Media.Transcoding.MediaTranscoder, Windows.Media, ContentType=WindowsRuntime] | Out-Null

$folderPath = "C:\Users\내계정\Music"          # 바꿀 파일이 있는 폴더
$folder  = Wait-Op ([Windows.Storage.StorageFolder]::GetFolderFromPathAsync($folderPath)) ([Windows.Storage.StorageFolder])
$profile = [Windows.Media.MediaProperties.MediaEncodingProfile]::CreateMp3("High")

Get-ChildItem "$folderPath\*.wav" | ForEach-Object {
    $src  = Wait-Op ([Windows.Storage.StorageFile]::GetFileFromPathAsync($_.FullName)) ([Windows.Storage.StorageFile])
    $dst  = Wait-Op ($folder.CreateFileAsync([IO.Path]::ChangeExtension($_.Name, ".mp3"), 1)) ([Windows.Storage.StorageFile])
    $t    = New-Object Windows.Media.Transcoding.MediaTranscoder
    $prep = Wait-Op ($t.PrepareFileTranscodeAsync($src, $dst, $profile)) ([Windows.Media.Transcoding.PrepareTranscodeResult])
    if ($prep.CanTranscode) { Wait-Act ($prep.TranscodeAsync()); "$($_.Name) -> $($dst.Name)" }
    else { "$($_.Name): $($prep.FailureReason)" }
}

폴더 경로만 자기 것으로 바꾸면 됩니다. 원본 WAV는 지우지 않고 옆에 같은 이름의 .mp3 가 새로 생깁니다. 파일마다 clip1.wav -> clip1.mp3 처럼 한 줄씩 결과가 찍히고, 바꾸지 못한 파일은 이유가 함께 나옵니다.

⚠️

앞부분의 Wait-Op·Wait-Act 가 길어 보이지만 꼭 필요합니다. 변환이 끝나기를 기다리는 부분인데, 이걸 빼면 아직 쓰는 중인 파일 크기를 읽어 엉뚱한 값이 나옵니다. 실제로 이 글을 준비하면서 그렇게 해서 10초짜리가 4KB로 나온 적이 있습니다.

품질은 셋 중에 — 실제로 재 본 용량

위 명령의 CreateMp3("High") 자리에 Medium·Low 를 넣으면 품질이 바뀝니다. 같은 10초짜리 WAV(1,764,044바이트)를 세 가지로 바꿔 크기를 재 봤습니다.

설정비트레이트결과 크기원본 대비
High192kbps · 48kHz241,775 바이트7.3배 작아짐
Medium128kbps · 44.1kHz160,976 바이트11배
Low96kbps · 44.1kHz120,936 바이트14.6배

음악이라면 High(192kbps)를 권합니다. 말소리 위주의 녹음이라면 Medium 으로도 충분하고, 용량이 급할 때만 Low 를 쓰세요. 한 가지 알아 둘 점은 High 로 하면 샘플레이트가 48kHz 로 바뀐다는 것입니다. 원본이 44.1kHz 여도 48kHz 로 다시 계산해 담습니다. 원본 주파수를 그대로 두고 싶다면 Medium 이 44.1kHz 를 유지합니다.

막히는 지점은 네 군데입니다. 어디서 멈췄는지부터 정하면 고칠 것이 분명해집니다.

방법 2 — 온라인 변환기 (한두 개일 때)

파일 하나를 급히 바꿀 때는 검색해서 나오는 변환 사이트가 빠릅니다. 다만 알고 쓰는 편이 좋습니다. 이런 사이트는 파일을 서버로 올려서 바꾼 뒤 결과를 내려 줍니다. 음악 한 곡이면 몰라도, 회의 녹음이나 통화 녹음, 가족 목소리가 든 파일이라면 남의 서버에 올리는 일을 한 번 더 생각해 보세요.

브라우저 안에서만 처리하는 방식으로는 MP3를 만들 수 없습니다. 앞서 말한 대로 브라우저에 MP3 인코더가 없기 때문입니다. 그래서 "업로드 없는 WAV→MP3 변환기"는 사실상 없다고 보면 됩니다. 업로드가 싫다면 방법 1이나 3을 쓰는 것이 맞습니다.

방법 3 — 편집 프로그램 (자주 할 일이면)

자르기·페이드·볼륨 조절까지 함께 할 일이 많다면 오디오 편집 프로그램을 하나 두는 편이 낫습니다. 무료로는 Audacity 가 널리 쓰이고, 내보내기에서 MP3 를 고르면 됩니다. 명령줄이 편하다면 ffmpeg 도 좋습니다. 둘 다 설치가 필요하니, 한 번 쓰고 말 일이라면 방법 1이 더 간단합니다.

바꾸기 전에 알아 둘 것

되돌릴 수 없습니다. MP3는 사람 귀에 잘 안 들리는 정보를 버려서 용량을 줄이는 방식입니다. MP3를 다시 WAV로 바꿔도 버려진 소리는 돌아오지 않습니다. 파일 크기만 원래대로 커질 뿐입니다.

원본은 남겨 두세요. 나중에 다시 자르거나 편집할 생각이라면 WAV 원본을 보관하는 편이 좋습니다. MP3를 편집해서 다시 MP3로 저장하면 압축을 두 번 하게 되어 소리가 조금씩 나빠집니다.

용량이 목적이라면 길이부터 보세요. 5분짜리를 192kbps로 바꾸면 약 7MB입니다. 필요한 구간만 30초로 잘라 두면 그 자체로 10분의 1이 됩니다. 자르기와 변환을 함께 쓰면 효과가 가장 큽니다.

자주 묻는 질문

Q. 윈도우 10에서도 되나요?

됩니다. 이 방법은 윈도우에 들어 있는 미디어 기능을 부르는 것이라 별도 설치가 필요 없습니다. PowerShell 창에 그대로 붙여 넣으면 동일하게 동작합니다.

Q. MP3 대신 다른 형식으로도 바꿀 수 있나요?

같은 방법으로 M4A(AAC)도 됩니다. CreateMp3 대신 CreateM4a 를 쓰면 됩니다. 아이폰·애플 기기 위주라면 M4A 가 더 잘 맞습니다.

Q. 변환한 MP3가 원본보다 소리가 나쁜가요?

엄밀히는 그렇습니다. 다만 192kbps 정도면 일반적인 재생 환경에서 구분하기 어렵습니다. 편집용 원본만 WAV로 남겨 두고, 듣고 나눠 줄 파일은 MP3로 쓰는 것이 보통입니다.

Q. 명령이 길어서 붙여 넣기가 부담스럽습니다.

메모장에 붙여 넣고 wav2mp3.ps1 로 저장한 뒤, PowerShell에서 그 파일을 실행해도 됩니다. 폴더 경로만 고치면 다음부터는 실행만 하면 됩니다.

Q. 왜 브라우저에서 바로 MP3로 저장해 주지 않나요?

브라우저에 MP3 인코더가 없기 때문입니다. 크롬에서 MediaRecorder 가 지원한다고 답하는 오디오 형식은 WebM/Opus 와 MP4/AAC 뿐입니다. MP3를 만들려면 인코더를 웹페이지에 함께 실어야 해서, 무설치·무업로드를 지키는 도구는 보통 WAV로 저장합니다.

이 글에서 소개하는 무료 도구
오디오 자르기 — 구간만 잘라 저장

구간을 골라 무손실 WAV로 저장합니다. 그 파일이 커서 부담스러울 때 이 글의 방법으로 MP3로 줄이면 됩니다.

무료로 사용하기 →

다른 글