用GIT從下面地址下載:git://source.ffmpeg.org/ffmpeg.gitgit
例如:在linux下:windows
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg服務器
若是要編譯ffplay,它依賴sdl庫。安裝SDL庫:http://www.libsdl.org/async
ffmpeg 0.11,須要make3.82版本。因爲如今ffmpeg處理活動期,因此最好是在最新的linux操做系統上編譯。這樣autoconf、automake、make這些工具能夠是最新的,就不用升級。ide
若是是windows下編譯,還須要cygwin或者minwin工具
cygwin下能夠會由於回車符產生如下錯誤:post
./makes: line 2: $'\r': command not foundui 解決方法以: 一、配置cygwin系統,讓cygwin忽略dos回車符 如下是具體的修改方法! # ignore return set -o igncr export SHELLOPTS |
二、用dos2unix命令轉換有回車符的文件:
dos2unix 文件
三、用VI替換文件中的回車符
%s/\n/^M/g
其中^M這個須要先Ctrl+v再按回車獲得
./configure --disable-yasm
make
make install
默認安裝在 /usr/local下。
設置pkg-config環境變量:
PKG_CONFIG_PATH=」$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig」
export PKG_CONFIG_PATH
或者用 libdir 指定依賴庫的位置:
./configure --enable-libx264 --enable-gpl --libdir=/usr/local/lib
若是在windows環境下使用,則須要把C:\cygwin\bin加到環境變量PATH中。由於ffmpeg程序依賴的cygwin的庫都存在這裏。
發行時,就須要把相關依賴的庫放到同一目錄中。
用ldd ffmpeg 查看依賴哪些庫。
./configure --cross_prefix=i686-pc-mingw32- --target-os=mingw32 --arch=i686 --prefix=/usr/i686-pc-mingw32/sys-root/mingw --enable-swscale --enable-postproc --enable-gpl
會提示說i686-pc-mingw32-pkg-config沒找到,不過這沒有關係,能夠忽略,若是要安裝,能夠從下面地址下載glib和pkg-config包,pkg-config依賴glib:
而後把它們複製到:
/usr/i686-pc-mingw32/sys-root/mingw 目錄下
若是在windows環境下使用,則須要把C:\cygwin\usr\i686-pc-mingw32\sys-root\mingw\bin加到環境變量PATH中。由於mingw程序依賴的cygwin的庫都存在這裏。
發行時,就須要把相關依賴的庫放到同一目錄中。
ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
若是沒有輸入文件,那麼視音頻捕捉(只在Linux下有效,由於Linux下把音視頻設備看成文件句柄來處理)就會起做用。做爲通用的規則,選項通常用於下一個特定的文件。若是你給 –b 64選項,改選會設置下一個視頻速率。對於原始輸入文件,格式選項多是須要的。缺省狀況下,ffmpeg試圖儘量的無損轉換,採用與輸入一樣的音頻視頻參數來輸出。
./ffmpeg –v debug –i inputfile.mpg –c copy -f asf outfile.asf
-f:設置混合器
-c:設置編碼器。當爲 copy:指複製編碼流
-i:輸入文件
-v:調試信息級別(quiet、panic、fatal、error、warning、info、verbose、debug)
一個容器裏能夠包含許多流,包括任何的音視頻流。那麼在命令行怎樣區分流呢?
答:由「:」進行分隔
./ffmpeg –i inputfile.mpg –c:v h263 –c:a g722 –f asf outfile.asf
./ffmpeg –i inputfile.mpg –c:0 h263 –c:1 g722 –f asf outfile.asf
上面命令表示把輸入文件 inputfile文件的視頻流轉換成h263格式,把音頻流轉換成g722格式。
v:視頻
a:音頻
數字:表示第幾路,從0開始
你能夠使用:ffmpeg –help來得到選項內容
-L license
-h 幫助
-fromats顯示可用的格式,編解碼的,協議的
-codecs 顯示可用的編解碼器
-bsfs 顯示bit流過濾器
-protocols顯示可用的協議
-pix_fmts顯示可用的位圖格式
-sample_fmts顯示可用的音頻採樣格式
-loglevel loglevel set libav* logging level
-v loglevel set libav* logging level
-debug flags set debug flags
-fdebug flags set debug flags
-report generate a report
-f fmt強迫採用格式fmt
-i filename輸入文件
-y 覆蓋輸出文件
-c編解碼器名字
-t duration 設置紀錄時間 hh:mm:ss[.xxx]格式的記錄時間也支持
-ss position 搜索到指定的時間 [-]hh:mm:ss[.xxx]的格式也支持
-timestamp time 設置記錄時間戳(‘now’指定當前時間)
-title string 設置標題
-author string 設置做者
-copyright string 設置版權
-comment string 設置評論
-vframes number 設置記錄的視頻幀數
-r rate 設置幀率 (Hz value, fraction or abbreviation)
-s size 設置幀的大小 (WxH or abbreviation)
-aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number set the number of bits per raw sample
-croptop size Removed, use the crop filter instead
-cropbottom size Removed, use the crop filter instead
-cropleft size Removed, use the crop filter instead
-cropright size Removed, use the crop filter instead
-padtop size Removed, use the pad filter instead
-padbottom size Removed, use the pad filter instead
-padleft size Removed, use the pad filter instead
-padright size Removed, use the pad filter instead
-padcolor color Removed, use the pad filter instead
-vn 禁用視頻
-vcodec codec force video codec ('copy' to copy stream)
-sameq use same quantizer as source (implies VBR)
-same_quant use same quantizer as source (implies VBR)
-timecode hh:mm:ss[:;.]ff set initial TimeCode value.
-pass n select the pass number (1 or 2)
-passlogfile prefix select two pass log file name prefix
-vf filter list video filters
-b bitrate video bitrate (please use -b:v)
-dn disable data
-pix_fmt format 設置位圖格式
-intra deprecated use -g 1
-vdt n discard threshold
-rc_override override rate control override for specific intervals
-deinterlace this option is deprecated, use the yadif filter instead
-psnr calculate PSNR of compressed frames
-vstats dump video coding statistics to file
-vstats_file file dump video coding statistics to file
-intra_matrix matrix specify intra matrix coeffs
-inter_matrix matrix specify inter matrix coeffs
-top top=1/bottom=0/auto=-1 field first
-dc precision intra_dc_precision
-vtag fourcc/tag force video tag/fourcc
-qphist show QP histogram
-force_fps force the selected framerate, disable the best supported framerate selection
-force_key_frames timestamps force key frames at specified timestamps
-vbsf video bitstream_filters deprecated
-vpre preset set the video options to the indicated preset
-aframes number set the number of audio frames to record
-aq quality set audio quality (codec-specific)
-ar rate set audio sampling rate (in Hz)
-ac channels set number of audio channels
-an disable audio
-acodec codec force audio codec ('copy' to copy stream)
-vol volume change audio volume (256=normal)
-af filter list audio filters
-vc channel deprecated, use -channel
-tvstd standard deprecated, use -standard
-isync sync read on input
-vd device 設置視頻捕獲設備。好比/dev/video0
-dv1394 設置DV1394捕獲
-av device 設置音頻設備好比/dev/dsp
-cpuflags flags force specific cpu flags
-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_s set input stream mapping
-map_channel file.stream.channel[:syncfile.syncstream] map an audio channel from one stream to another
-map_chapters input_file_index set chapters mapping
-benchmark add timings for benchmarking
-benchmark_all add timings for each task
-progress url write program-readable progress information
-dump dump 每一個輸入包
-hex 當 dumping包時,也dump其荷載
-re read input at native frame rate
-vsync video sync method
-async audio sync method
-adrift_threshold threshold audio drift threshold
-copyts copy timestamps
-copytb mode copy input stream time base when stream copying
-shortest finish encoding within shortest input
-dts_delta_threshold threshold timestamp discontinuity delta threshold
-dts_error_threshold threshold timestamp error delta threshold
-copyinkf copy initial non-keyframes
-q q use fixed quality scale (VBR)
-qscale q use fixed quality scale (VBR)
-profile profile set profile
-filter_complex graph_description create a complex filtergraph
-debug_ts 打印調試信息時間戳
-streamid streamIndex:value set the value of an outfile streamid
-muxdelay seconds set the maximum demux-decode delay
-muxpreload seconds set the initial demux-decode delay
-fpre filename set options from indicated preset file
1.1.1 截取一張352x240尺寸大小的,格式爲jpg的圖片:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
1.1.2 把視頻的前30幀轉換成一個Animated Gif
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
-ss後跟的時間單位爲秒
ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144
-acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi
:其中,-vd x11:0,0指錄製所使用的偏移爲 x=0和 y=0,-s 1024×768指錄製視頻的大小爲 1024×768。錄製的視頻文件爲 test.avi,將保存到用戶主目錄中
若是你只想錄製一個應用程序窗口或者桌面上的一個固定區域,那麼能夠指定偏移位置和區域大小。使用xwininfo -frame命令能夠完成查找上述參數。
從新調整視頻尺寸大小
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi
注:上面的ffmpeg的屏幕錄製功能只能在Linux環境下有效。在windows下是否可行,本人還不知道如何操做,若是你知道,請告訴我J
在windows有兩種視頻捕獲方式,使用VFW或DSHOW,你須要在編譯ffmpeg時,把相應的組件編譯進libavdevice中,下面使用vfw方式捕獲:
./ffmpeg -t 10 -f vfwcap -i 0 -r 25 -f asf cap.asf
咱們採集10秒,採集設備爲vfwcap類型設備,第0個vfwcap採集設備(若是系統有多個vfw的視頻採集設備,能夠經過-i num來選擇),每秒25幀,輸出方式爲文件,格式爲asf
在Linux平臺上,ffmpeg對V4L2的視頻設備提升了很好的支持,如:
./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp
以上命令表示:採集10秒鐘視頻,對video4linux2視頻設備進行採集,採集QCIF(176*144)的視頻,每秒8幀,視頻設備爲/dev/video0,視頻編碼爲h263,輸出格式爲RTP,後面定義了IP地址及端口,將該碼流所對應的SDP文件重定向到/tmp/ffmpeg.sdp中,將此SDP文件上傳到流媒體服務器就能夠實現直播了。
./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 10 -vpre libx264-hq.ffpreset -i /dev/video0 -vcodec libx264 -f rtp rtp://192.168.1.105:6060 > /tmp/x264.sdp
這條命令與上面的相似,可是視頻編碼爲h264,因爲ffmpeg是用外部庫x264支持h264編碼,所以h264的視頻採集須要更多參數。主要是須要指定-vpre libx264-hq.ffpreset 才能夠。
下面命令則是把捕獲到的視頻保存成文件:
ffmpeg -f video4linux -s 320*240 -r 10 -i /dev/video0 test.asf
./ffmpeg -i udp://@ip:port test.ts
ffmpeg -i a.flv -f flv rtmp://IP/livepkgr/livestream?adbe-live-event=liveevent
IP是你的fms服務器的IP地址
1.1.3 從組播地址接收組播,並把它轉成rtmp協議發給 fms服務器
ffmpeg –i udp://@:port –f flv rtmp://IP/livepkgr/livestream?adbe-live-event=liveevent
ffmpeg -I a.asf -codec copy -map 0 -f segment-segment_list out.m3u8 out%03d.tss
用in.avi做爲輸入視頻,out.avi做爲輸出視頻,pp.png表示要添加的水印圖片,是png格式的,調整水印大小(scale = 50:50)和位置(overlay=10:10)
ffmpeg –i in.avi -i /data/move/long.png -filter_complex '[1:v]scale=50:50[s];[0:v][s]overlay=10:10' -b:v 500000 -c:v h264 -s cif -f mpegts out.avi
使用overlay添加透明水印時,位置參數的位置在 -vfilters 裏面的 overlay= 的後面的前兩個參數,參數之間是冒號分隔的。第一個參數是橫向的間距,第二個是縱向的間距。能夠結合與視頻和水印相關的四個值來設置,這四個值分別是:mainW表示主視頻寬度,mainH表示主視頻高度,overlayW表示水印寬度,overlayH表示水印高度。這些值加在overlay參數中,ffmpeg將自動識別。
也就是說要讓水印
顯示在視頻的左上角overlay參數爲 overlay=0:0
顯示在右上角爲 overlay= main_w-overlay_w:0
顯示在右下角爲 overlay= main_w-overlay_w:main_h-overlay_h
顯示在左下角爲 overlay=0: main_h-overlay_h
上面的0能夠改成5,或10像素,以便多留出一些空白。
用複合過濾器添加水印:
ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
input:輸入流
logo:水印文件,也能夠是一個流。注意:須要編譯時把相應的解碼器編譯。例如PNG圖片。須要編譯PNG解碼器。Ffmpeg纔可以識別圖片文件,把圖片作爲一種流。注意:PNG圖片必須含有alpha通道。Overlay過濾器是根據alpha通道來進行復蓋的。因此,你想要透明效果時,須先製作一張透明的PNG圖片。
output:輸出流
也能夠用下面命令:
ffmpeg -i input -vf 'movie=long.png[logo];[in][logo]overlay=10:10[out]' output
movie過濾器用來把兩個流組合成一個流。它有一個輸出PAD。