How to get audio from an online video
Suppose that there is a song on YouTube and you want the audio from it. For instance: Le Freak, by Chic. Questions of potential Copyright infringement left unexamined, how do you get it?
Step 1, download the audio
The tool to use for downloading streaming video on the Internet is youtube-dl. It works for other sites besides YouTube (vimeo, for instance), though I've not yet had luck with ABC/BBC's iView.
First, you download only the audio. You can download the video and extract the audio stream, you'll just be wasting network bandwidth/quota.
I like ogg-vorbis audio if I can get it, so I look for any webm formats available (the audio stream is vorbis in webm):
mjl@tesla:~/Music> youtube-dl -F https://www.youtube.com/watch?v=EVZh4WcdC3s [youtube] EVZh4WcdC3s: Downloading webpage [youtube] EVZh4WcdC3s: Extracting video information [youtube] EVZh4WcdC3s: Downloading js player en_US-vfl3g8JP2 [youtube] EVZh4WcdC3s: Downloading DASH manifest [info] Available formats for EVZh4WcdC3s: format code extension resolution note 140 m4a audio only DASH audio 127k , m4a_dash container, aac @128k (44100Hz), 3.71MiB 171 webm audio only DASH audio 138k , audio@128k (44100Hz), 3.78MiB 141 m4a audio only DASH audio 255k , m4a_dash container, aac @256k (44100Hz), 7.44MiB 242 webm 320x240 DASH video 55k , 1fps, video only, 1.36MiB 160 mp4 192x144 DASH video 119k , 15fps, video only, 2.41MiB 243 webm 480x360 DASH video 143k , 1fps, video only, 2.80MiB 134 mp4 480x360 DASH video 241k , 30fps, video only, 4.37MiB 133 mp4 320x240 DASH video 268k , 30fps, video only, 3.08MiB 244 webm 640x480 DASH video 285k , 1fps, video only, 5.37MiB 135 mp4 640x480 DASH video 497k , 30fps, video only, 8.75MiB 17 3gp 176x144 36 3gp 320x240 5 flv 400x240 43 webm 640x360 18 mp4 640x360 (best)
Here, format 171 is the best quality webm audio stream available, so I'll download that:
mjl@tesla:~/Music> youtube-dl -f 171 https://www.youtube.com/watch?v=EVZh4WcdC3s -o freakout.webm [youtube] EVZh4WcdC3s: Downloading webpage [youtube] EVZh4WcdC3s: Extracting video information [youtube] EVZh4WcdC3s: Downloading DASH manifest [download] Destination: freakout.webm [download] 100% of 3.78MiB in 00:00 mjl@tesla:~/Music>
Step 2, extract the audio stream
Okay, you have the audio, but it's encoded in a webm container. It would be much easier to put Vorbis data in an Ogg container, as music players know how to work with that. For this purpose, I use ffmpeg:
ffmpeg -i freakout.webm -vn -acodec 'copy' freakout.ogg
(You can also use it's fork, libav and avconv, but that's a Debian/Ubuntu confusion that you shouldn't need to worry about).
If you download a format other than webm (because webm is not available, for instance), you will need to know the embedded audio stream encoded in that format if you want to extract that stream. For instance an mp4 video will usually contain audio as mp3, but sometimes aac or something. ffmpeg can usually tell you what it finds.
Step 3, play the stream
One you have the audio stream in an audio container file, you can play it with a music player, any time I want, no unnecessary bandwidth use.
You can also import it into an audio editor, such as Audacity and trim or add leading/trailing blank sound, filter out noise, remove skips between tracks and so on.
Happy hacking!