지금 사용 중인 유튜브 요금제가 유튜브 프리미엄도 아니고 휴대전화 요금제도 데이터 무제한이 아니라서 외출 시 감상할 목적으로 유튜브 음악 영상에서 ogg 파일을 추출해서 휴대전화에 보관해 두고 듣는 방법을 찾아봤다.
유튜브 영상 다운로드는 yt-dlp 프로그램을 이용하면 된다. https://github.com/yt-dlp/yt-dlp에서 프로그램을 내려받고 다음과 같이 실행하면
yt-dlp.exe -F <유튜브 영상 URL>
다음과 같이 대상 유튜브 영상의 각종 영상/음성 관련 정보가 나온다.
$ yt-dlp.exe -F https://www.youtube.com/watch?v=<video ID>
[youtube] Extracting URL: https://www.youtube.com/watch?v=<video ID>
[youtube] <video ID>: Downloading webpage
[youtube] <video ID>: Downloading ios player API JSON
[youtube] <video ID>: Downloading android player API JSON
WARNING: [youtube] Skipping player responses from android clients (got player responses for video "aQvGIIdgFDM" instead of "<video ID>")
[youtube] <video ID>: Downloading player edea0cc6
[youtube] <video ID>: Downloading m3u8 information
[info] Available formats for <video ID>:
ID EXT RESOLUTION FPS CH │ FILESIZE TBR PROTO │ VCODEC VBR ACODEC ABR ASR MORE INFO
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────
sb3 mhtml 48x27 0 │ mhtml │ images storyboard
sb2 mhtml 80x45 0 │ mhtml │ images storyboard
sb1 mhtml 160x90 0 │ mhtml │ images storyboard
sb0 mhtml 320x180 0 │ mhtml │ images storyboard
233 mp4 audio only │ m3u8 │ audio only unknown [ko] Default
234 mp4 audio only │ m3u8 │ audio only unknown [ko] Default
139 m4a audio only 2 │ 22.15MiB 49k https │ audio only mp4a.40.5 49k 22k [ko] low, m4a_dash
249 webm audio only 2 │ 24.01MiB 53k https │ audio only opus 53k 48k [ko] low, webm_dash
250 webm audio only 2 │ 31.75MiB 70k https │ audio only opus 70k 48k [ko] low, webm_dash
140 m4a audio only 2 │ 58.79MiB 129k https │ audio only mp4a.40.2 129k 44k [ko] medium, m4a_dash
251 webm audio only 2 │ 61.90MiB 136k https │ audio only opus 136k 48k [ko] medium, webm_dash
...
여기서 ACODEC이 ‘opus’로 표시된 데이터가 ogg 데이터일 텐데, 이 데이터를 내려받아 ogg 파일로 저장하면 된다. 특정 데이터를 받으려면 첫 번째 칼럼인 ID를 이용하면 되고, 여기서는 ID가 251인 파일을 다음 명령어로 내려받는다.
yt-dlp.exe -f 251 <유튜브 영상 URL>
그런데 위와 같은 경우 확장자(EXT)가 webm이니 webm 파일로 내려받게 되므로 이 파일에서 오디오 데이터만 추출하려면 ffmpeg를 이용하면 된다. ffmpeg가 설치돼 있다는 가정하에 아래 명령어를 실행하면 ogg 파일이 추출된다.
ffmpeg -i "input.webm" -vn -acodec copy "output.ogg"
그럼 변환된 ogg 파일을 플레이어에 넣고 재생하면 된다.
추가로 유튜브 영상이 여러 곡으로 구성된 경우라면 변환된 ogg 파일을 각 곡별 재생 구간으로 잘라서 추출하면 된다.
ffmpeg -i output.ogg -acodec copy -ss "시작구간<00:00:00>" -to "종료구간<00:99:99>" "<파일명>.ogg"
그럼 각 파일별로 노래를 쪼개서 저장할 수 있으니 재생할 때 편하다.