How to get YouTube video content onto your Apple iPod
I’m sure you’ve heard of YouTube by now.
YouTube is a video sharing website where users can upload, view and share video clips with other visitors to the site. YouTube was created in mid-February 2005 by three former PayPal employees.
The San Bruno-based service uses Adobe Flash technology to display a wide variety of user-generated video content, including movie clips, TV clips and music videos, as well as amateur content such as video blogging and short original videos. In October 2006, Google Inc. announced that it had reached a deal to acquire the company for US$1.65 billion in Google stock.
In August 2006, The Wall Street Journal published an article revealing that YouTube was hosting about 6.1 million videos (requiring about 45 terabytes of storage space), and had about 500,000 user accounts.
A YouTube search done today reveals more than 83 million videos and many millions of user channels. In fact, there are so many, YouTube no longer lists how many and restricts all searches to only 1,000 results or less.
Not bad for a company that is completely unprofitable and whose revenues being noted as “immaterial” by Google in a regulatory filing. The bandwidth costs to operate YouTube alone are estimated at approximately $1 million a day.
But enough about the numbers and dollars, let’s talk about how to get that content onto your Apple iPod video device!
I find myself with lots of “spare time” around my commutes, waiting for trains, driving, late at night while I turn off my brain and relax and many other places. I’ve collected lots of audiobooks, music streams and videos that I watch and discard from my ipod on a regular basis. A lot of the video content I watch now comes directly from YouTube.
The first thing you’re going to need is a copy of YouTube Downloader. This is a very simple Python script that takes a YouTube URL as input and will download and copy the file to your local system.
There are versions of youtube-dl available to all of the current Linux distributions if you simply install it with your normal packaging tools (yum, aptitude, synaptic, etc.), as well as a detailed guide to installing YouTube Downloader under Windows XP for those stuck on that legacy platform.
That’s step one.
The second step is to grab a current copy of the ffmpeg Video Encoder. Your Linux distribution may have this already, but if not, you can just download the latest source with SVN or Git and build it yourself.
For Windows users, you can either download a compiled version (you’ll need a copy of 7-zip to unpack it), or follow this HOWTO and build your own on Windows from source.
If you’re building this on Linux or Windows, make sure you include libfaac support in your build. This is critical, because iTunes won’t accept the format if it isn’t in MPEG-4 format (or AVI, but AVI files are enormous).
At the very least, use the following options when building ffmpeg from source:
./configure --prefix=/usr --enable-gpl --enable-pthreads
--enable-libvorbis --enable-libtheora
--enable-libgsm --enable-libfaac --enable-libfaad
--enable-liba52 --enable-shared --enable-libschroedinger
--enable-libx264
If you got it right, you should see something similar to the following:
install prefix /usr
C compiler gcc
.align is power-of-two no
ARCH x86_64 (generic)
big-endian no
MMX enabled yes
CMOV enabled no
CMOV is fast no
EBX available yes
EBP available yes
gprof enabled no
debug symbols yes
strip symbols yes
optimizations yes
static yes
shared yes
postprocessing support no
software scaler enabled no
new filter support no
filters using lavformat no
video hooking yes
Imlib2 support no
FreeType support yes
network support yes
IPv6 support yes
threading support pthreads
SDL support yes
Sun medialib support no
AVISynth enabled no
liba52 support yes
liba52 dlopened no
libamr-nb support no
libamr-wb support no
libdc1394 support no
libdirac enabled no
libfaac enabled yes <--- This is what you want to see
libfaad enabled yes
libfaad dlopened no
libgsm enabled yes
libmp3lame enabled no
libnut enabled no
libschroedinger enabled yes
libtheora enabled yes
libvorbis enabled yes
libx264 enabled yes
libxvid enabled no
zlib enabled yes
bzlib enabled yes
Build it and install it. Now you should have a working ffmpeg encoder.
The third step is to encode the video and lastly, sync it to your iPod.
In this process, I’m going to use the example of “Groovy Dancing Girl” starring “Sophie Merry” from Ireland. She created an Internet sensation with her YouTube video, but now she’s become quite famous as a new face on Etam’s product lines.
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Sr2JneittqQ&hl=en"></param><embed src="http://www.youtube.com/v/Sr2JneittqQ&hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object>
This was a short-enough video to use as an example, but in practice, I’m normally converting 1-2 hour videos found on YouTube for watching on my iPod. Inbox Zero with Merlin Mann is a good example of just such a video.
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/z9UjeTMb3Yk&hl=en"></param><embed src="http://www.youtube.com/v/z9UjeTMb3Yk&hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object>
Let’s put all the steps together:
-l (that’s an ‘ell’, not a ‘one’) option so we save the video itself with the original title as it appeared on the upstream YouTube URL.
$ /usr/bin/youtube-dl -l http://www.youtube.com/watch?v=Sr2JneittqQ
Retrieving video webpage… done.
Extracting video title… done.
Extracting URL “t” parameter… done.
Requesting video file… done.
Video data found at http://208.117.254.159/get_video?video_id=Sr2JneittqQ&origin=sjc-v78.sjc.youtube.com
&signature=7324C862B157C2C77781B15449C09F83FEBDAC71.89013B87A16736E75BB13B354
A03F528D0CEABFC&ip=65.172.152.98&ipbits=16&expire=1213949408&key=yt1&sver=2
Retrieving video data: 100.0% ( 8.81M of 8.81M) at 85.50k/s ETA 00:00 done.
Video data saved to Groovy Dancing Girl-Sr2JneittqQ.flv
$ ffmpeg -i Groovy\ Dancing\ Girl-Sr2JneittqQ.flv -threads 4 -b 604k -ac 1 -ab 256k -ar 44100 -vol 500 Groovy\ Dancing\ Girl.mp4
FFmpeg version SVN-r13835, Copyright (c) 2000-2008 Fabrice Bellard, et al.
libavutil version: 49.7.0
libavcodec version: 51.57.2
libavformat version: 52.16.0
libavdevice version: 52.0.0
built on Jun 19 2008 22:21:44, gcc: 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 29.92 (359/12)
Input #0, flv, from ‘Groovy Dancing Girl-Sr2JneittqQ.flv’:
Duration: 00:03:42.35, start: 0.000000, bitrate: 56 kb/s
Stream #0.0: Video: flv, yuv420p, 320×240, 29.92 tb(r)
Stream #0.1: Audio: mp3, 22050 Hz, mono, 56 kb/s
Output #0, mp4, to ‘Groovy Dancing Girl.mp4′:
Stream #0.0: Video: mpeg4, yuv420p, 320×240, q=2-31, 604 kb/s, 29.92 tb(c)
Stream #0.1: Audio: libfaac, 44100 Hz, mono, 256 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 6654 fps=571 q=2.0 Lsize= 18676kB time=221.63 bitrate= 690.3kbits/s
video:16489kB audio:2055kB global headers:0kB muxing overhead 0.708581%
This will give you a video called “Groovy Dancing Girl.mp4“, which is of type:
VIDEO: [mp4v] 320×240 24bpp 29.917 fps
If you’re solely a Linux user, you can use Songbird (a Mozilla project), or install Amarok (my personal favorite, absolutely blows away iTunes in features).
If you have any questions, contact me or leave your comments here and I’ll do my best to help you out.
Good luck!
FOAF updates: Trust rankings are now exported, making the data available to other users and websites. An external FOAF URI has been added, allowing users to link to an additional FOAF file.
Keep up with the latest Advogato features by reading the Advogato status blog.
If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!