日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ffmpeg 小结

發(fā)布時(shí)間:2024/3/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ffmpeg 小结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

視頻播放器的原理算法

封裝格式緩存

做用:視頻碼流和音頻碼流按照必定的格式儲存在一個(gè)文件匯總服務(wù)器

視頻編碼數(shù)據(jù)網(wǎng)絡(luò)

做用:將視頻像素?cái)?shù)據(jù)(RGB,YUV等)壓縮成為視頻碼流,從而下降視頻的數(shù)據(jù)量app

音頻編碼數(shù)據(jù)ide

做用:將音頻采樣數(shù)據(jù)(PCM等)壓縮成為音頻碼流,從而下降音頻的數(shù)據(jù)量函數(shù)

視頻像素?cái)?shù)據(jù)工具

做用:保存了屏幕上每個(gè)像素點(diǎn)的像素值

格式:常見的像素?cái)?shù)據(jù)格式有RGB24, RGB32, YUV420P,YUV422P,YUV444P等。壓縮編碼中通常使用的是YUV格式的像素?cái)?shù)據(jù),最為常見的格式為YUV420P。

特色:視頻像素?cái)?shù)據(jù)體積很大,通常狀況下一小時(shí)高清視頻的RGB24格式的數(shù)據(jù)體積為:360025192010803=559.9GB(PS:這里假定幀率為25HZ,取樣精度8bit)

音頻采樣數(shù)據(jù)

做用:保存了音頻中每一個(gè)采樣點(diǎn)的值。

特色:音頻采樣數(shù)據(jù)體積很大,通常狀況下一首4分鐘的PCM格式的
歌曲體積為:
4604410022=42.3MByte
PS:這里假定采樣率為44100Hz,采樣精度為16bit

1 術(shù)語:

什么是影片?其實(shí)就是一組(不少張)圖片,時(shí)間間隔很小的連續(xù)展現(xiàn)出來,人們就以為畫面中的人物在動(dòng),這就是影片。那電影的實(shí)質(zhì)就是N多張圖片的集合。那 每張圖片和幀又有什么關(guān)系呢?事實(shí)上,若是一部影片里面的圖片,咱們原封不動(dòng)的所有存起來,空間會(huì)很大很大很大,可是若是經(jīng)過必定的算法(這里不講相關(guān)算 法),把每一張圖片壓縮(編碼_encode)一下,變成 幀。再把幀連起來變成流,再把不一樣的流放到某個(gè)容器里面,這就是咱們?nèi)粘?匆姷碾娪拔募?#xff0c;文件 碟中諜4.H264.ACC.mkv,他為何要這樣命名呢? mkv表達(dá)了它的容器是.mkv的,且包含至少兩個(gè)流,h264的視頻流,ACC的音頻流。這是一種典型的 犧牲時(shí)間來換取空間的作法。

容器(Container)——容器就是一種文件格式,好比flv,mkv等。包含下面5種流以及文件頭信息。

流(Stream)——是一種視頻數(shù)據(jù)信息的傳輸方式,5種流:音頻,視頻,字幕,附件,數(shù)據(jù)。

幀(Frame)——幀表明一幅靜止的圖像,分為I幀,P幀,B幀。

編解碼器(Codec)——是對視頻進(jìn)行壓縮或者解壓縮,CODEC =COde (編碼) +DECode(解碼)

復(fù)用/解復(fù)用(mux/demux)——把不一樣的流按照某種容器的規(guī)則放入容器,這種行為叫作復(fù)用(mux)

把不一樣的流從某種容器中解析出來,這種行為叫作解復(fù)用(demux)

附1:I幀,P幀,B幀 (http://blog.csdn.net/abcjennifer/article/details/6577934)

視頻壓縮中,每幀表明一幅靜止的圖像。而在實(shí)際壓縮時(shí),會(huì)采起各類算法減小數(shù)據(jù)的容量,其中IPB就是最多見的。

(1)I幀表示關(guān)鍵幀,你能夠理解為這一幀畫面的完整保留;解碼時(shí)只須要本幀數(shù)據(jù)就能夠完成(由于包含完整畫面)

(2)P幀表示的是這一幀跟以前的一個(gè)關(guān)鍵幀(或P幀)的差異,解碼時(shí)須要用以前緩存的畫面疊加上本幀定義的差異,生成最終畫面。(也就是差異幀,P幀沒有完整畫面數(shù)據(jù),只有與前一幀的畫面差異的數(shù)據(jù))

(3)B幀是雙向差異幀,也就是B幀記錄的是本幀與先后幀的差異(具體比較復(fù)雜,有4種狀況),換言之,要解碼B幀,不只要取得以前的緩存畫面,還要解碼以后的畫面,經(jīng)過先后畫面的與本幀數(shù)據(jù)的疊加取得最終的畫面。B幀壓縮率高,可是解碼時(shí)CPU會(huì)比較累。
   從上面的解釋看,咱們知道I和P的解碼算法比較簡單,資源占用也比較少,I只要本身完成就好了,P呢,也只須要解碼器把前一個(gè)畫面緩存一下,遇到P時(shí)就使用以前緩存的畫面就行了,若是視頻流只有I和P,解碼器能夠無論后面的數(shù)據(jù),邊讀邊解碼,線性前進(jìn),你們很舒服。但網(wǎng)絡(luò)上的電影不少都采用了B幀,由于B幀記錄的是先后幀的差異,比P幀能節(jié)約更多的空間,但這樣一來,文件小了,解碼器就麻煩了,由于在解碼時(shí),不只要 用以前緩存的畫面,還要知道下一個(gè)I或者P的畫面(也就是說要預(yù)讀預(yù)解碼),并且,B幀不能簡單地丟掉,由于B幀其實(shí)也包含了畫面信息,若是簡單丟掉,并 用以前的畫面簡單重復(fù),就會(huì)形成畫面卡(其實(shí)就是丟幀了),而且因?yàn)榫W(wǎng)絡(luò)上的電影為了節(jié)約空間,每每使用至關(guān)多的B幀,B幀用的多,對不支持B幀的播放器 就形成更大的困擾,畫面也就越卡。 通常平均來講,I的壓縮率是7(跟JPG差很少),P是20,B能夠達(dá)到50,可見使用B幀能節(jié)省大量空間,節(jié)省出來的空間能夠用來保存多一些I幀,這樣在相同碼率下,能夠提供更好的畫質(zhì)。

附2: 編解碼過程

1. 注冊全部容器格式和CODEC:av_register_all()

2. 打開文件:av_open_input_file()

3. 從文件中提取流信息:av_find_stream_info()

4. 窮舉全部的流,查找其中種類為CODEC_TYPE_VIDEO

5. 查找對應(yīng)的解碼器:avcodec_find_decoder()

6. 打開編解碼器:avcodec_open()

7. 為解碼幀分配內(nèi)存:avcodec_alloc_frame()

8. 不停地從碼流中提取出幀數(shù)據(jù):av_read_frame()

9. 判斷幀的類型,對于視頻幀調(diào)用:avcodec_decode_video()

10. 解碼完后,釋放解碼器:avcodec_close()

11. 關(guān)閉輸入文件:av_close_input_file()

  • 簡介(http://derekzhan.iteye.com/blog/1989274)
  • 資料

    FFmpeg官網(wǎng): http://www.ffmpeg.org

    FFmpeg doc : http://www.ffmpeg.org/documentation.html

    FFmpeg wiki : https://trac.ffmpeg.org/wiki

    FFmpeg基礎(chǔ): http://wenku.baidu.com/view/296eefcaf90f76c661371af1.html

    FFmpeg的名稱來自MPEG視頻編碼標(biāo)準(zhǔn),前面的“FF”表明“Fast Forward”,FFmpeg是一套能夠用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。能夠輕易地實(shí)現(xiàn)多種視頻格式之間的相互轉(zhuǎn)換。FFmpeg的用戶有Google,Facebook,Youtube,優(yōu)酷,愛奇藝,土豆等。

    組成

    一、libavformat:用于各類音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結(jié)構(gòu)和讀取音視頻幀等功能,包含demuxers和muxer庫;

    二、libavcodec:用于各類類型聲音/圖像編解碼;

    三、libavutil:包含一些公共的工具函數(shù);

    四、libswscale:用于視頻場景比例縮放、色彩映射轉(zhuǎn)換;

    五、libpostproc:用于后期效果處理;

    六、ffmpeg:是一個(gè)命令行工具,用來對視頻文件轉(zhuǎn)換格式,也支持對電視卡實(shí)時(shí)編碼;

    七、ffsever:是一個(gè)HTTP多媒體實(shí)時(shí)廣播流服務(wù)器,支持時(shí)光平移;

    八、ffplay:是一個(gè)簡單的播放器,使用ffmpeg 庫解析和解碼,經(jīng)過SDL顯示;

    2.1 過濾器(Filter)

    在多媒體處理中,filter的意思是被編碼到輸出文件以前用來修改輸入文件內(nèi)容的一個(gè)軟件工具。如:視頻翻轉(zhuǎn),旋轉(zhuǎn),縮放等。

    語法:[input_link_label1][input_link_label2]… filter_name=parameters [output_link_label1][output_link_label2]…

    過濾器圖link label :是標(biāo)記過濾器的輸入或輸出的名稱

    (1).視頻過濾器 -vf

    如testsrc視頻按順時(shí)針方向旋轉(zhuǎn)90度  ffplay -f lavfi -i testsrc -vf transpose=1

    如testsrc視頻水平翻轉(zhuǎn)(左右翻轉(zhuǎn))  ffplay -f lavfi -i testsrc -vf hflip

    (2).音頻過濾器 -af

    實(shí)現(xiàn)慢速播放,聲音速度是原始速度的50%  ffplay p629100.mp3 -af atempo=0.5

    (3)如何實(shí)現(xiàn)順時(shí)針旋轉(zhuǎn)90度并水平翻轉(zhuǎn)?

    過濾器鏈(Filterchain)

    基本語法 Filterchain = 逗號分隔的一組filter

       語法:“filter1,filter2,filter3,…filterN-2,filterN-1,filterN”

    順時(shí)針旋轉(zhuǎn)90度并水平翻轉(zhuǎn) ffplay -f lavfi -i testsrc -vf transpose=1,hflip

    (4)如何實(shí)現(xiàn)水平翻轉(zhuǎn)視頻和源視頻進(jìn)行比較?

    方法一: 過濾器鏈(Filterchain)

    第一步: 源視頻寬度擴(kuò)大兩倍  ffmpeg -i jidu.mp4 -t 10 -vf pad=2*iw output.mp4

    第二步:源視頻水平翻轉(zhuǎn)  ffmpeg -i jidu.mp4 -t 10 -vf hflip output2.mp4

    第三步:水平翻轉(zhuǎn)視頻覆蓋output.mp4  ffmpeg -i output.mp4 -i output2.mp4 -filter_complex overlay=w compare.mp4

    方法二:過濾器圖(Filtergraph)

    基本語法   Filtergraph = 分號分隔的一組filterchain

    “filterchain1;filterchain2;…filterchainN-1;filterchainN”

    用ffplay直接觀看結(jié)果:  fplay -f lavfi -i testsrc -vf split[a][b];[a]pad=2*iw[1];[b]hflip[2];[1][2]overlay=w

    F1: split過濾器建立兩個(gè)輸入文件的拷貝并標(biāo)記為[a],[b]

    F2: [a]做為pad過濾器的輸入,pad過濾器產(chǎn)生2倍寬度并輸出到[1].

    F3: [b]做為hflip過濾器的輸入,vflip過濾器水平翻轉(zhuǎn)視頻并輸出到[2].

    F4: 用overlay過濾器把 [2]覆蓋到[1]的旁邊.

    2.2 選擇媒體流

    一些多媒體容器好比AVI,mkv,mp4等,能夠包含不一樣種類的多個(gè)流,如何從容器中抽取各類流呢?

    語法:  -map file_number:stream_type[:stream_number]

    這有一些特別流符號的說明:

    一、-map 0 選擇第一個(gè)文件的全部流

    二、-map i:v 從文件序號i(index)中獲取全部視頻流, -map i:a 獲取全部音頻流,-map i:s 獲取全部字幕流等等。

    三、特殊參數(shù)-an,-vn,-sn分別排除全部的音頻,視頻,字幕流。

    注意:文件序號和流序號從0開始計(jì)數(shù)。

    2.3 查看幫助

    可用的bit流 :ffmpeg –bsfs

    可用的編解碼器:ffmpeg –codecs

    可用的解碼器:ffmpeg –decoders

    可用的編碼器:ffmpeg –encoders

    可用的過濾器:ffmpeg –filters

    可用的視頻格式:ffmpeg –formats

    可用的聲道布局:ffmpeg –layouts

    可用的license:ffmpeg –L

    可用的像素格式:ffmpeg –pix_fmts

    可用的協(xié)議:ffmpeg -protocals

    2.4 碼率、幀率和文件大小

    碼率和幀率是視頻文件的最重要的基本特征,對于他們的特有設(shè)置會(huì)決定視頻質(zhì)量。若是咱們知道碼率和時(shí)長那么能夠很容易計(jì)算出輸出文件的大小。

    幀率:幀率也叫幀頻率,幀率是視頻文件中每一秒的幀數(shù),肉眼想看到連續(xù)移動(dòng)圖像至少須要15幀。 fps

    碼率:比特率(也叫碼率,數(shù)據(jù)率)是一個(gè)肯定總體視頻/音頻質(zhì)量的參數(shù),秒為單位處理的字節(jié)數(shù),碼率和視頻質(zhì)量成正比,在視頻文件中中比特率用bps來表達(dá)

    幀率

    一、用 -r 參數(shù)設(shè)置幀率 (fps 每秒傳輸幀數(shù)(Frames Per Second))

    ffmpeg –i input –r fps output

    二、用fps filter設(shè)置幀率

    ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm

    例如設(shè)置幀率為29.97fps,下面三種方式具備相同的結(jié)果:

    ffmpeg -i input.avi -r 29.97 output.mpg

    ffmpeg -i input.avi -r 30000/1001 output.mpg

    ffmpeg -i input.avi -r netsc output.mpg

    碼率、文件大小

    設(shè)置碼率 –b 參數(shù)  ffmpeg -i film.avi -b 1.5M film.mp4

    音頻:-b:a 視頻: - b:v  設(shè)置視頻碼率為1500kbps  ffmpeg -i input.avi -b:v 1500k output.mp4

    控制輸出文件大小

    -fs (file size首字母縮寫)   ffmpeg -i input.avi -fs 1024K output.mp4

    計(jì)算輸出文件大小  (視頻碼率+音頻碼率) * 時(shí)長 /8 = 文件大小K

  • 調(diào)整視頻分辨率
  • 3.1 調(diào)整視頻分辨率

    用-s參數(shù)設(shè)置視頻分辨率,參數(shù)值wxh,w寬度單位是像素,h高度單位是像素    ffmpeg -i input_file -s 320x240 output_file

    3.2 預(yù)約義的視頻尺寸

    下面兩條命令有相同效果

    ffmpeg -i input.avi -s 640x480 output.avi

    ffmpeg -i input.avi -s vga output.avi

    Scale filter調(diào)整分辨率 ,Scale filter的優(yōu)勢是可使用一些額外的參數(shù) , 語法: Scale=width:height[:interl={1|-1}]

    下面兩條命令有相同效果

    ffmpeg -i input.mpg -s 320x240 output.mp4

    ffmpeg -i input.mpg -vf scale=320:240 output.mp4

    對輸入視頻成比例縮放

    改變?yōu)樵匆曨l一半大小   ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4

    改變?yōu)樵曨l的90%大小 ffmpeg -i input.mpg -vf scale=iw0.9:ih0.9 output.mp4

    在未知視頻的分辨率時(shí),保證調(diào)整的分辨率與源視頻有相同的橫縱比。

    例如寬度固定400,高度成比例:

    ffmpeg -i input.avi -vf scale=400:400/a

    ffmpeg -i input.avi -vf scale=400:-1

    相反地,高度固定300,寬度成比例:

    ffmpeg -i input.avi -vf scale=-1:300

    ffmpeg -i input.avi -vf scale=300*a:300

  • 裁剪/填充視頻
  • 4.1 裁剪視頻crop filter

    從輸入文件中選取你想要的矩形區(qū)域到輸出文件中,常見用來去視頻黑邊。 語法:crop:ow[:oh[:x[:y:[:keep_aspect]]]]

    裁剪輸入視頻的左三分之一,中間三分之一,右三分之一:

    ffmpeg -i input -vf crop=iw/3:ih :0:0 output

    ffmpeg -i input -vf crop=iw/3:ih :iw/3:0 output

    ffmpeg -i input -vf crop=iw/3:ih :iw/3*2:0 output

    裁剪幀的中心, 當(dāng)咱們想裁剪區(qū)域在幀的中間時(shí),裁剪filter能夠跳過輸入x和y值,他們的默認(rèn)值是

    Xdefault = ( input width - output width)/2 , Ydefault = ( input height - output height)/2

    ffmpeg -i input_file -v crop=w:h output_file

    裁剪中間一半?yún)^(qū)域: ffmpeg -i input.avi -vf crop=iw/2:ih/2 output.avi

    比較裁剪后的視頻和源視頻比較

    ffplay -i jidu.mp4 -vf split[a][b];[a]drawbox=x=(iw-300)/2:(ih-300)/2:w=300:h=300:c=yellow[A];[A]pad=2*iw[C];[b]crop=300:300:(iw-300)/2:(ih-300)/2[B];

    [C][B]overlay=w*2.4:40

    自動(dòng)檢測裁剪區(qū)域 , cropdetect filter 自動(dòng)檢測黑邊區(qū)域

    ffplay jidu.mp4 -vf cropdetect

    而后用檢測到的值來裁剪視頻

    ffplay jidu.mp4 –vf crop=672:272:0:54

    填充視頻(pad) , 在視頻幀上增長一快額外額區(qū)域,常常用在播放的時(shí)候顯示不一樣的橫縱比  語法:pad=width[:height:[:x[:y:[:color]]]]

    建立一個(gè)30個(gè)像素的粉色寬度來包圍一個(gè)SVGA尺寸的圖片: ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink framed_photo.jpg

    同理能夠制做testsrc視頻用30個(gè)像素粉色包圍視頻:  ffplay -f lavfi -i testsrc -vf pad=iw+60:ih+60:30:30:pink

    4:3到16:9---------- 一些設(shè)備只能播放16:9的橫縱比,4:3的橫縱比必須在水平方向的兩邊填充成16:9,高度被保持,寬度等于高度乘以16/9,x(輸入文件水平位移)值由表達(dá)式(output_width - input_width)/2來計(jì)算。

    4:3到16:9的通用命令是:  ffmpeg -i input -vf pad=ih*16/9:ih :(ow-iw)/2:0:color output

    舉例: ffplay -f lavfi -i testsrc -vf pad=ih*16/9:ih:(ow-iw)/2:0:pink

    16:9到4:3----------為了用4:3的橫縱比來顯示16:9的橫縱比,填充輸入文件的垂直兩邊,寬度保持不變,高度是寬度的3/4,y值(輸入文件的垂直偏移量)是由一個(gè)表達(dá)式(output_height-input_height)/2計(jì)算出來的。

    16:9到4:3的通用命令:  ffmpeg -i input -vf pad=iw :iw*3/4:0:(oh-ih)/2:color output

    舉例:ffplay -f lavfi -i testsrc=size=320x180 -vf pad=iw:iw*3/4:0:(oh-ih)/2:pink

  • 翻轉(zhuǎn)和旋轉(zhuǎn)
  • 翻轉(zhuǎn)

    水平翻轉(zhuǎn)語法: -vf hflip:   ffplay -f lavfi -i testsrc -vf hflip

    垂直翻轉(zhuǎn)語法:-vf vflip:  ffplay -f lavfi -i testsrc -vf vflip

    旋轉(zhuǎn)

    語法:transpose={0,1,2,3}

    0:逆時(shí)針旋轉(zhuǎn)90°而后垂直翻轉(zhuǎn)

    1:順時(shí)針旋轉(zhuǎn)90°

    2:逆時(shí)針旋轉(zhuǎn)90°

    3:順時(shí)針旋轉(zhuǎn)90°而后水平翻轉(zhuǎn)

  • 模糊,銳化
  • 模糊, 語法:boxblur=luma_r:luma_p[:chroma_r:chram_p[:alpha_r:alpha_p]] , fplay -f lavfi -i testsrc -vf boxblur=1:10:4:10

    注意:luma_r和alpha_r半徑取值范圍是0~min(w,h)/2, chroma_r半徑的取值范圍是0~min(cw/ch)/2

    銳化, 語法:-vf unsharp=l_msize_x:l_msize_y:l_amount:c_msize_x:c_msize_y:c_amount, 全部的參數(shù)是可選的,默認(rèn)值是5:5:1.0:5:5:0.0

    l_msize_x:水平亮度矩陣,取值范圍3-13,默認(rèn)值為5

    l_msize_y:垂直亮度矩陣,取值范圍3-13,默認(rèn)值為5

    l_amount:亮度強(qiáng)度,取值范圍-2.0-5.0,負(fù)數(shù)為模糊效果,默認(rèn)值1.0

    c_msize_x:水平色彩矩陣,取值范圍3-13,默認(rèn)值5

    c_msize_y:垂直色彩矩陣,取值范圍3-13,默認(rèn)值5

    c_amount:色彩強(qiáng)度,取值范圍-2.0-5.0,負(fù)數(shù)為模糊效果,默認(rèn)值0.0

    舉例

    使用默認(rèn)值,亮度矩陣為5x5和亮度值為1.0  ffmpeg -i input -vf unsharp output.mp4

    高斯模糊效果(比較強(qiáng)的模糊):  ffplay -f lavfi -i testsrc -vf unsharp=13:13:-2

  • 覆蓋(畫中畫)
  • 覆蓋, 語法:overlay[=x[:y], 全部的參數(shù)都是可選,默認(rèn)值都是0

    舉例

    Logo在左上角:  ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay pair1.mp4

    右上角:     ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w pair2.mp4

    左下角: ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=0:H-h pair2.mp4

    右下角: ffmpeg -i pair.mp4 -i logo.png -filter_complex overlay=W-w:H-h pair2.mp4

    刪除logo,  語法:-vf delogo=x:y:w:h[:t[:show]]

    x:y 離左上角的坐標(biāo)

    w:h logo的寬和高

    t: 矩形邊緣的厚度默認(rèn)值4

    show:若設(shè)置為1有一個(gè)綠色的矩形,默認(rèn)值0.

    ffplay -i jidu.mp4 -vf delogo=50:51:60:60💯0

  • 添加文本
  • 語法:drawtext=fontfile=font_f:text=text1[:p3=v3[:p4=v4[…]]]

    經(jīng)常使用的參數(shù)值

    x:離左上角的橫坐標(biāo)  y: 離左上角的縱坐標(biāo)  fontcolor:字體顏色  fontsize:字體大小  text:文本內(nèi)容

    textfile:文本文件  t:時(shí)間戳,單位秒  n:幀數(shù)開始位置為0  draw/enable:控制文件顯示,若值為0不顯示,1顯示,可使用函數(shù)

    簡單用法

    一、在左上角添加Welcome文字

    ffplay -f lavfi -i color=c=white -vf drawtext=fontfile=arial.ttf:text=Welcom

    二、在中央添加Good day

    ffplay -f lavfi -i color=c=white -vf drawtext=“fontfile=arial.ttf:text=‘Goodday’:x=(w-tw)/2:y=(h-th)/2”

    三、設(shè)置字體顏色和大小

    ffplay -f lavfi -i color=c=white -vf drawtext=“fontfile=arial.ttf:text=‘Happy Holidays’:x=(w-tw)/2:y=(h-th)/2:fontcolor=green:fontsize=30”

    動(dòng)態(tài)文本

    用 t (時(shí)間秒)變量實(shí)現(xiàn)動(dòng)態(tài)文本

    一、頂部水平滾動(dòng)

    ffplay -i jidu.mp4 -vf drawtext=“fontfile=arial.ttf:text=‘Dynamic RTL text’:x=w-t*50:fontcolor=darkorange:fontsize=30”

    二、底部水平滾動(dòng)

    ffplay -i jidu.mp4 -vf drawtext=“fontfile=arial.ttf:textfile=textfile.txt:x=w-t*50:y=h-th:fontcolor=darkorange:fontsize=30”

    三、垂直從下往上滾動(dòng)

    ffplay jidu.mp4 -vf drawtext="textfile=textfile:fontfile=arial.ttf:x=(w-tw)/2:y=h-t*100:fontcolor=white:fontsize=30“

    4.實(shí)現(xiàn)右上角顯示當(dāng)前時(shí)間?

    動(dòng)態(tài)文本

    在右上角顯示當(dāng)前時(shí)間 localtime

    ffplay jidu.mp4 -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text=’%{localtime:%H\:%M\:%S}’“

    每隔3秒顯示一次當(dāng)前時(shí)間

    ffplay jidu.mp4 -vf drawtext=“fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text=’%{localtime:%H\:%M\:%S}’:enable=lt(mod(t,3),1)”

  • 圖片處理
  • 圖片支持: FFmpeg支持絕大多數(shù)圖片處理, 除LJPEG(無損JPEG)以外,其余都能被解碼,除了EXR,PIC,PTX以外,全部的都能被編碼。

    截取一張圖片使用 –ss(seek from start)參數(shù):  ffmpeg -ss 01:23:45 -i jidu.mp4 image.jpg

    從視頻中生成GIF圖片:  ffmpeg -i jidu.mp4 -t 10 -pix_fmt rgb24 jidu.gif

    轉(zhuǎn)換視頻為圖片(每幀一張圖):  ffmpeg -i clip.avi frame%4d.jpg

    圖片轉(zhuǎn)換為視頻:  ffmpeg -f image2 -i img%4d.jpg -r 25 video.mp4

    裁剪:  ffmpeg -f lavfi -i rgbtestsrc -vf crop=150:150 crop_rg.png

    填充:  ffmpeg -f lavfi -i smptebars -vf pad=360:280:20:20:orange pad_smpte.jpg

    翻轉(zhuǎn):  ffmpeg -i orange.jpg -vf hflip orange_hfilp.jpg

    ffmpeg -i orange.jpg -vf vflip orange_vfilp.jpg

    旋轉(zhuǎn):  ffmpeg -i image.png -vf transpose=1 image_rotated.png

    覆蓋:  ffmpeg -f lavfi -i rgbtestsrc -s 400x300 rgb .png

    ffmpeg -f lavfi -i smptebars smpte.png

    ffmpeg -i rgb .png -i smpte.png -filter_complex overlay= (W-w)/2:(H-h)/2 rgb_smpte.png

    10.其余高級技巧

    屏幕錄像

    顯示設(shè)備名稱:  ffmpeg -list_devices 1 -f dshow -i dummy

    調(diào)用攝像頭:   ffplay -f dshow -i video=“Integrated Camera”

    保存為文件:   ffmpeg -y -f dshow -s 320x240 -r 25 -i video=“Integrated Camera” -b:v 800K -vcodec mpeg4 new.mp4

    添加字幕subtitles:  語法 –vf subtitles=file,   ffmpeg -i jidu.mp4 -vf subtitles=rgb.srt output.mp4

    視頻顫抖:  ffplay –i jidu.mp4 -vf crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)

    色彩平衡:  ffplay -i jidu.mp4 -vf curves=vintage

    色彩變幻:  fplay -i jidu.mp4 -vf hue="H=2PIt: s=sin(2PIt)+1“

    彩色轉(zhuǎn)換黑白:  ffplay -i jidu.mp4 -vf lutyuv=“u=128:v=128”

    設(shè)置音頻視頻播放速度:

    3倍視頻播放視頻: ffplay -i jidu.mp4 -vf setpts=PTS/3

    ?速度播放視頻:   ffplay -i jidu.mp4 -vf setpts=PTS/(3/4)

    2倍速度播放音頻:  ffplay -i speech.mp3 -af atempo=2

    截圖

    每隔一秒截一張圖:  ffmpeg -i input.flv -f image2 -vf fps=fps=1 out%d.png

    每隔20秒截一張圖:  ffmpeg -i input.flv -f image2 -vf fps=fps=1/20 out%d.png

    多張截圖合并到一個(gè)文件里(2x3) ?每隔一千幀(秒數(shù)=1000/fps25)即40s截一張圖

    ffmpeg? -i jidu.mp4 -frames 3 -vf “select=not(mod(n,1000)),scale=320:240,tile=2x3” out.png

    馬賽克視頻

    用多個(gè)輸入文件建立一個(gè)馬賽克視頻:

    ffmpeg -i jidu.mp4 -i jidu.flv -i “Day By Day SBS.mp4” -i “Dangerous.mp4” -filter_complex “nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240” -c:v libx264 output.mkv

    Logo動(dòng)態(tài)移動(dòng)

    2秒后logo從左到右移動(dòng):  ffplay -i jidu.mp4 -vf movie=logo.png[logo];[in][logo]overlay=x=‘if(gte(t,2),((t-2)*80)-w,NAN)’:y=0

    2秒后logo從左到右移動(dòng)后中止在左上角:  ffplay -i jidu.mp4 -vf movie=logo.png[logo];[in][logo]overlay=x=‘if(gte(((t-2)*80)-w,W),0,((t-2)*80)-w)’:y=0

    每隔10秒交替出現(xiàn)logo:  ffmpeg -y -t 60 -i jidu.mp4 -i logo.png -i logo2.png -filter_complex “overlay=x=if(lt(mod(t,20),10),10,NAN ):y=10,overlay=x=if(gt(mod(t,20),10),W-w-10,NAN ) :y=10” overlay.mp4

    感謝這兩篇文檔的做者:

    http://blog.csdn.net/coloriy/article/details/47337729

    http://blog.csdn.net/Bobsweetie/article/details/50935109

    總結(jié)

    以上是生活随笔為你收集整理的ffmpeg 小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。