使用ffmpeg來轉換media Video

FFMPEG -i 1.wmv -c:v libx264 -strict -2 1_wmv.mp4html

ffmpeg -i b.mp4 -codec copy -bsf h264_mp4toannexb a.tswindows


ffmpeg -i 1.mp4 -c:v libx264 -crf 24 destination.flvide


ffmpeg -i HYB-wish.wav -acodec libmp3lame -ab 192k -ac 2 HYB-wish.mp3
ffmpeg -i HYB-wish.wav -acodec libfaac -ab 192k -ac 2 HYB-wish.aac
ffmpeg -i HYB-wish.wav -acodec libamr_nb -ab 12.2k -ar 8000 -ac 1 HYB-wish-nb.amr
ffmpeg -i HYB-wish.wav -acodec libamr_wb -ab 23.85k -ar 16000 -ac 1 HYB-wish-wb.amrpost

 

 

 

轉載自:http://www.cnblogs.com/super119/archive/2010/12/09/1901539.html命令行

 

如今絕大部分的所謂轉換軟件都是基於ffmpeg的,mencoder也用的是ffmpeg。ffmpeg就是作mplayer的組織作的。因此,爲何不少軟件轉換不了某些文件和codec呢?就由於ffmpeg不支持。好比:wmvv3(wmv9) encoding,ffmpeg如今不支持,因此,基本上如今能看到的轉換軟件都不支持,只能支持wmvv1(wmv7), wmvv2(wmv8)的decode和encode。  

 

 

 
如下是一些步驟和關鍵點:
1. 本身編譯ffmpeg。Ubuntu reposiroty中的ffmpeg功能不全(主要是看怎麼編譯的),好比因爲沒有將libmp3lame引入,因此,Ubuntu官方repository中的ffmpeg是沒法encode mp3的(只能encode mp2 -- mpeg 1 audio layer 2)。編譯ffmpeg很簡單,configure, make, sudo make install就OK了。主要是configure,看打開哪些支持,此次我作的是:

 

 
./configure --prefix=/usr --enable-gpl --enable-postproc --enable-nonfree --enable-pthreads --enable-x11grab --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libx264 --enable-libxvid --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-armvfp

 

 
按照上面的命令行,要本身安裝faac, faad, libmp3lame, amrnb, amrwb, x264...。特別是要記得安裝這些包的dev版本,dev版本的包中才有頭文件。這裏也能夠看出ffmpeg也不是每一個decoder/encoder都是本身作的,也依賴不少其餘的項目。好比x264,這是VLC player那個組織作的,用於H264的encoder/decoder。

 

 
2. 而後就是使用ffmpeg了。能夠很是方便的轉換媒體文件,好比:
 
ffmpeg -i HYB-wish.wav -acodec libmp3lame -ab 192k -ac 2 HYB-wish.mp3
ffmpeg -i HYB-wish.wav -acodec libfaac -ab 192k -ac 2 HYB-wish.aac
ffmpeg -i HYB-wish.wav -acodec libamr_nb -ab 12.2k -ar 8000 -ac 1 HYB-wish-nb.amr
ffmpeg -i HYB-wish.wav -acodec libamr_wb -ab 23.85k -ar 16000 -ac 1 HYB-wish-wb.amr

 

 
看ffmpeg的manual就能夠知道這些參數的含義,很是簡單:-i -- input file; -acodec -- 指定audio codec,用ffmpeg -formats命令能夠看到當前編譯的ffmpeg支持的全部file formats和codec;-ab -- bitrate,主要數字後面要帶一個k,不然無效;-ac 指定channel數;-ar 指定sample rate,注意amrnb是8000,amrwb是16000,普通的是44100/48000。最後一個參數就是輸出文件的名字,ffmpeg會根據擴展名來檢測咱們要轉換成什麼file format,也能夠用-f option來明確指定output file format。

 

 
3. 轉換video:
 
# 只轉換14400幀 -- 24fps,因此這是10分鐘,也就是將input mp4的前十分鐘導出
ffmpeg -i mada2_h264_aac_24.mp4 -vcodec copy -vframes 14400 -acodec copy mada_h264_aac_24.mp4
 
# -s: size; -r fps; -b bitrate; "copy" means 不轉換,純拷貝
ffmpeg -i samsung_mpeg4_aac_30.mp4 -vcodec h263 -s cif -r 30 -b 496k -acodec copy samsung_h263_aac_30.3gp
ffmpeg -i samsung_mpeg4_aac_30.mp4 -vcodec h263p -r 30 -b 496k -s qvga -acodec copy samsung_h263p_aac_30.mov
ffmpeg -i samsung_mpeg4_aac_30.mp4 -vcodec libx264 -s qvga -r 30 -b 496k -acodec copy samsung_h264_aac_30.mp4
 
# ffmpeg -i samsung_mpeg4_aac_30.mp4 -vcodec mpeg2video -s qvga -r 30 -b 496k -acodec libmp3lame -ab 192k -ac 2 samsung_mpeg2_mp3_30.mpg
 
ffmpeg -i mada_h264_aac_24.mp4 -vcodec h263 -s cif -r 24 -b 952k -acodec copy mada_h263_aac_24.3gp
ffmpeg -i mada_h264_aac_24.mp4 -vcodec h263p -s 480x272 -b 952k -r 24 -acodec copy mada_h263p_aac_24.mov
ffmpeg -i mada_h264_aac_24.mp4 -vcodec mpeg4 -s 480x272 -r 24 -b 952k -acodec copy mada_mpeg4_aac_24.mp4
 
# ffmpeg -i mada_h264_aac_24.mp4 -vcodec mpeg2video -s 480x272 -b 952k -r 24 -acodec libmp3lame -ac 2 -ab 192k mada_mpeg2_mp3_24.mpg

 

 
還有兩點注意:
1. 不一樣的codec支持的video size是不同的。好比h263是不支持qvga(320x240)的。若是設置錯了也不要緊,ffmpeg會提示,並且會打印出h263支持的全部video size大小。若是Audio轉換的參數給錯了,ffmpeg也會打印緣由和提示信息,很是的不錯。

 

2. 不一樣的file format對能放入其中的codec也是有要求的。好比mp4就不能放入h263/mp3。因此上面轉成h263的時候,輸出文件都是3gp。若是file format給錯了,ffmpeg的出錯信息是:[ <file format> <function address>]: could not find tag......

 

 
基本上就是這樣了。ffmpeg仍是很是好用的,特別是用來轉換不一樣的media file和codec。參考ffmpeg的manual能夠查閱每一個參數的解釋。
不過ffmpeg如今也是有不少問題的:好比不少的codec如今仍是不支持,像wmvv3(wmv9), wmav3(wma9)等。還有不少codec只提供了decoder,沒有提供encoder。這對於轉換來講也很是痛苦,對於播放卻是沒什麼。還有一些bug,好比上面命令行中,轉換到h263p的時候,若是輸出文件格式給定的是3gp,就會出錯說could not find tag...,事實上,3gp中是能夠放入h263p的,m.youtube.com上的3gp就是h263++/amr。因此,上面用mov來代替了。

 

 
BTW:若是要轉換成wma/wmv的話,前面說了,若是是wmav1, wmav2, wmvv1, wmvv2(也就是wma7, wma8, wmv7, wmv8),使用ffmpeg就能夠搞定。可是若是是wmav3, wmvv3(wma9, wmv9)的話,就只能用微軟的windows media encoder了。windows media encoder要求輸入文件是bmp, jpg, mp3, wav, mpg, avi, wmv, wma, asf,其餘的一律不能兼容。
相關文章
相關標籤/搜索