How to extract Audio Sound and Music from Flash
Videos (.flv) files and convert it to (.mp3) on Linux and BSD
In my quest to know Linux better and use it capabilities to fulfill
a multimedia tasks I came across the question:
How can I extract audio sound and music from Flash Videos
.flv file format?
After a bit of investigation online I've found out in order to
achieve this task the quickest way is via the handy
ffmpeg
conversion tool .
It's rather easy actually, all necessery to do the conversion is to
have the
ffmpeg installed.
FFMpeg is part of Debian and Ubuntu repositories, so if you haven't
installed it yet, go straigh and install it with:
debian:~# apt-get install ffmpeg
...
Many modern day Linux distributions already have the ffmpeg
pre-installed by default, ffmpeg even have a Windows version so
this little tutorial should be directly applied on a Windows host
with installed ffmpeg.
Convertion of a
.flv file to
.mp3 file for example is
a real piece of cake to so do issue the command:
debian:~# ffmpeg -i input_file.flv -ab 128 -ar 44100
output_file.mp3
The few mmpeg options meaning is as follows:
-i (specifies input file)
-ab (Set the audio bitrate in bit/s 64k by default)
-ar (Set the audio sampling frequency (default = 44100
Hz).)
For more options checkout the ffmpeg help.
I found
ffmpeg to be a bit slower than I expected. A 17
minutes .flv video file is converted to .mp3 for 38 seconds
time.
Here is the textual output I got on my Debian Linux while
extracting the flash video's sound and converting it to mp3:
debian:~# time ffmpeg -i g7tvI6JCXD0.flv -ab 128 -ar 44100
output.mp3
FFmpeg version SVN-r25838, Copyright (c) 2000-2010 the FFmpeg
developers
built on Jan 21 2011 08:21:58 with gcc 4.4.5
configuration: --enable-libdc1394 --prefix=/usr
--extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared
--enable-libmp3lame --enable-gpl --enable-libvorbis
--enable-pthreads --enable-libfaac --enable-libxvid
--enable-postproc --enable-x11grab --enable-libgsm
--enable-libtheora --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libx264 --enable-libspeex
--enable-nonfree --disable-stripping --enable-avfilter
--enable-libdirac --disable-decoder=libdirac
--enable-libschroedinger --disable-encoder=libschroedinger
--enable-version3 --enable-libopenjpeg --enable-libvpx
--enable-librtmp --extra-libs=-lgcrypt --disable-altivec
--disable-armv5te --disable-armv6 --disable-vis
libavutil 50.33. 0 / 50.39. 0
libavcore 0.14. 0 / 0.14. 0
libavcodec 52.97. 2 / 52.97. 2
libavformat 52.87. 1 / 52.87. 1
libavdevice 52. 2. 2 / 52. 2. 2
libavfilter 1.65. 0 / 1.65. 0
libswscale 0.12. 0 / 0.12. 0
libpostproc 51. 2. 0 / 51. 2. 0
[flv @ 0x1336760] Estimating duration from bitrate, this may be
inaccurate
Seems stream 0 codec frame rate differs from container frame rate:
2000.00 (2000/1) -> 29.92 (359/12)
Input #0, flv, from 'g7tvI6JCXD0.flv':
Metadata:
duration : 1060
starttime : 0
totalduration : 1060
width : 480
height : 360
videodatarate : 76
audiodatarate : 94
totaldatarate : 179
framerate : 30
bytelength : 23723246
canseekontime : true
sourcedata : B5F9E82C6HH1302704673918653
purl :
pmsg :
Duration: 00:17:40.35, start: 0.000000, bitrate: 174 kb/s
Stream #0.0: Video: h264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], 77
kb/s, 29.92 tbr, 1k tbn, 2k tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 96 kb/s
WARNING: The bitrate parameter is set too low. It takes bits/s as
argument, not kbits/s
Output #0, mp3, to 'output.mp3':
Metadata:
duration : 1060
starttime : 0
totalduration : 1060
width : 480
height : 360
videodatarate : 76
audiodatarate : 94
totaldatarate : 179
framerate : 30
bytelength : 23723246
canseekontime : true
sourcedata : B5F9E82C6HH1302704673918653
purl :
pmsg :
TSSE : Lavf52.87.1
Stream #0.0: Audio: libmp3lame, 44100 Hz, stereo, s16, 0 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Press [q] to stop encoding
size= 16576kB time=1060.81 bitrate= 128.0kbits/s
video:0kB audio:16575kB global headers:0kB muxing overhead
0.002404%
real 0m38.489s
user 0m37.126s
sys 0m0.764s
When talking about conversions, another very useful application of
ffmpeg is in case if you want to:
Extract Audio from online streams
Let's say you have a favourite radio, you often listen and there
are a podcast you want to capture for later listening, or just
catch a few nice songs, using ffmpeg it's a piece of cake by using
the command like:
debian:~# ffmpeg -i http:///xxx.xxx.xxx.xxx/some -ab 128
-ar 44100 captured-radio-sound.mp3
The possible ways of use of
ffmpeg is truly versatily, you
can use it for instance
if you have to convert some kind of
audio or video format to another one I have given a very simple
example of converting a .flv file to .avi and vice versa in
my previous post