五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

rodert教你學(xué)FFmpeg實(shí)戰(zhàn)這一篇就夠了

2022-03-18 22:23 作者:JavaPub  | 我要投稿

rodert教你學(xué)FFmpeg實(shí)戰(zhàn)這一篇就夠了

建議收藏,以備查閱

pdf閱讀版: 鏈接:https://pan.baidu.com/s/11kIaq5V6A_pFX3yVoTUvzA 提取碼:java

@

  • rodert教你學(xué)FFmpeg實(shí)戰(zhàn)這一篇就夠了

  • 前言

  • 1. 簡(jiǎn)介

  • 2. 安裝

    • 2.1. windows安裝

    • 2.2. linux安裝

  • 3. 命令行操使用


前言

todo

有人問(wèn)rodert哥這篇文章干貨有多干,問(wèn)就是,硌牙。

ffmpeg有多強(qiáng)大,我想你都知道了,現(xiàn)在很多市場(chǎng)上的剪輯軟件都是基于它做的,只是加了一些包裝。讀完本篇,你會(huì)發(fā)現(xiàn)一切如此簡(jiǎn)單。

1. 簡(jiǎn)介

官網(wǎng)地址:https://trac.ffmpeg.org/wiki

FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)libavcodec,為了保證高可移植性和編解碼質(zhì)量,libavcodec里很多code都是從頭開(kāi)發(fā)的。

FFmpeg在Linux平臺(tái)下開(kāi)發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X等。這個(gè)項(xiàng)目最早由Fabrice Bellard發(fā)起,2004年至2015年間由Michael Niedermayer主要負(fù)責(zé)維護(hù)。許多FFmpeg的開(kāi)發(fā)人員都來(lái)自MPlayer項(xiàng)目,而且當(dāng)前FFmpeg也是放在MPlayer項(xiàng)目組的服務(wù)器上。項(xiàng)目的名稱(chēng)來(lái)自MPEG視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"Fast Forward"。

2. 安裝

2.1. windows安裝

2.2. linux安裝

  1. 下載

wget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2

  1. 解壓

tar -jxvf ffmpeg-3.4.1.tar.bz2

  1. 安裝

yum install yasm

cd ffmpeg-3.4.1

./configure --enable-shared ?--prefix=/usr/local/ffmpeg

make && make install

  • 編譯時(shí)間較長(zhǎng)

修改文件/etc/ld.so.conf 中增加/usr/local/ffmpeg/lib

使其生效:ldconfig

加入環(huán)境變量:vim /etc/profile

export FFMPEG_HOME=/usr/local/ffmpeg

export PATH=

PATH

配置生效: source /etc/profile

3. 命令行操使用

3.1.簡(jiǎn)單說(shuō)明

在操作前,簡(jiǎn)單介紹一下常用指令

ffmpeg的使用方式:?
ffmpeg?[options]?[[infile?options]?-i?infile]...?{[outfile?options]?outfile}...

常用參數(shù)說(shuō)明:?
主要參數(shù):?
-i?設(shè)定輸入流?
-f?設(shè)定輸出格式?
-ss?開(kāi)始時(shí)間?
視頻參數(shù):?
-b?設(shè)定視頻流量,默認(rèn)為200Kbit/s?
-r?設(shè)定幀速率,默認(rèn)為25?
-s?設(shè)定畫(huà)面的寬與高?
-aspect?設(shè)定畫(huà)面的比例?
-vn?不處理視頻?
-vcodec?設(shè)定視頻編解碼器,未設(shè)定時(shí)則使用與輸入流相同的編解碼器?
音頻參數(shù):?
-ar?設(shè)定采樣率?
-ac?設(shè)定聲音的Channel數(shù)?
-acodec?設(shè)定聲音編解碼器,未設(shè)定時(shí)則使用與輸入流相同的編解碼器?
-an?不處理音頻

3.2.視頻剪切

3.2.1.掐頭去尾

ffmpeg -ss 00:00:15 -t 00:00:06 -i input.mp4 -vcodec copy -acodec copy output.mp4

剪輯原視頻input.mp4,15s開(kāi)始向后6s,保存到output.mp4

-ss 表示開(kāi)始切割時(shí)間,-t 表示要切多少

3.2.2.

3.3.視頻格式轉(zhuǎn)換

準(zhǔn)確來(lái)說(shuō),是視頻容器轉(zhuǎn)換

ffmpeg -i input.avi output.mp4

avi文件轉(zhuǎn)為mp4

ffmpeg -i input.mp4 output.ts

mp4文件轉(zhuǎn)為ts

3.4.提取音頻

ffmpeg -i JavaPub講壇.mp4 -acodec copy -vn output.aac

提取JavaPub講壇.mp4音頻到output.acc,acc是一種常見(jiàn)默認(rèn)視頻,也可以轉(zhuǎn)為其他格式?;蛘叻乐钩霈F(xiàn)異常,直接使用下面方式

ffmpeg -i JavaPub講壇.mp4 -acodec aac -vn output.aac

3.5.提取音頻

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

純視頻

3.6.碼率控制

碼率控制對(duì)于在線(xiàn)視頻比較重要。因?yàn)樵诰€(xiàn)視頻需要考慮其能提供的帶寬?,F(xiàn)在這個(gè)直播使用很廣泛的時(shí)代

碼率是什么:

bitrate = file size / duration

比如一個(gè)文件20.8M,時(shí)長(zhǎng)1分鐘,那么,碼率就是: biterate = 20.8M bit/60s = 20.810241024*8 bit/60s= 2831Kbps 一般音頻的碼率只有固定幾種,比如是128Kbps, 那么,video的就是 video biterate = 2831Kbps -128Kbps = 2703Kbps。

  • 控制碼率主要還是為了縮小文件大小,盡量不影響分辨率

ffmpg控制碼率有3種選擇,-minrate -b:v -maxrate

-b:v 控制平均碼率

比如一個(gè)視頻源的碼率太高了,有10Mbps,文件太大,想把文件弄小一點(diǎn),但是又不破壞分辨率。

ffmpeg -i input.mp4 -b:v 2000k output.mp4

ffmpeg官方wiki比較建議,設(shè)置b:v時(shí),同時(shí)加上 -bufsize -bufsize 用于設(shè)置碼率控制緩沖器的大小,設(shè)置的好處是,讓整體的碼率更趨近于希望的值,減少波動(dòng)。(簡(jiǎn)單來(lái)說(shuō),比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 當(dāng)然是第二種比較好)

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

-minrate -maxrate就簡(jiǎn)單了,在線(xiàn)視頻有時(shí)候,希望碼率波動(dòng),不要超過(guò)一個(gè)閾值,可以設(shè)置maxrate。

ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

3.7. 視頻編碼格式轉(zhuǎn)換

比如一個(gè)視頻的編碼是MPEG4,想用H264編碼

ffmpeg -i input.mp4 -vcodec h264 output.mp4

相反也一樣

ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

當(dāng)然了,如果ffmpeg當(dāng)時(shí)編譯時(shí),添加了外部的x265或者X264,那也可以用外部的編碼器來(lái)編碼。(不知道什么是X265,可以Google一下,簡(jiǎn)單的說(shuō),就是她不包含在ffmpeg的源碼里,是獨(dú)立的一個(gè)開(kāi)源代碼,用于編碼HEVC,ffmpeg編碼時(shí)可以調(diào)用它。當(dāng)然了,ffmpeg自己也有編碼器)

ffmpeg -i input.mp4 -c:v libx265 output.mp4

ffmpeg -i input.mp4 -c:v libx264 output.mp4

3.8. 只提取視頻ES數(shù)據(jù)

這個(gè)是不常用的,更多閱讀下面鏈接

ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

更多:http://www.360doc.com/content/13/0829/15/13084517_310733557.shtml

3.9.過(guò)濾器的使用

3.9.1. 將輸入的1920x1080縮小到960x540輸出

fmpeg -i input.mp4 -vf scale=960:540 output.mp4`

//ps: 如果540不寫(xiě),寫(xiě)成-1,即scale=960:-1, 那也是可以的,ffmpeg會(huì)通知縮放濾鏡在輸出時(shí)保持原始的寬高比。

3.9.2.視頻添加logo

左上角

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4

右上角:

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4

左下角:

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4

右下角:

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4

3.9.3.去掉視頻的logo

有時(shí)候,下載了某個(gè)網(wǎng)站的視頻,但是有l(wèi)ogo很煩,咋辦?有辦法,用ffmpeg的delogo過(guò)濾器。 語(yǔ)法:-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。

ffmpeg?-i?input.mp4?-vf?delogo=0:0:220:90:100:1?output.mp4

處理后的視頻樣式是在過(guò)濾處加磨砂處理,并加綠色邊框

3.10.抓取視頻的一些幀,存為jpeg圖片

視頻抽取一些幀作為圖片時(shí)很常用的操作。

  • 情況一

ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-r 表示每一秒幾幀, -q:v表示存儲(chǔ)jpeg的圖像質(zhì)量,一般2是高質(zhì)量。

假設(shè)60s,會(huì)保存60張圖片。

  • 情況二

ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

ffmpeg會(huì)從input.mp4的第20s時(shí)間開(kāi)始,往下10s,即20~30s這10秒鐘之間,每隔1s就抓一幀,總共會(huì)抓10幀。

  • 情況三

ffmpeg -i input.mp4 -vf "select=between(n,84,208)*not(mod(n,4))" -vsync 0 image_%05d.jpg

主體是一個(gè)select 的過(guò)濾語(yǔ)句:

其中:between(n,*) 是指 從第幾幀到第幾幀之間進(jìn)行提取...

not(mode(n, K))是指每隔幾幀輸出一幀。

3.11.查詢(xún)操作

3.11.1.查詢(xún)視頻總幀數(shù)

ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 input.mp4

說(shuō)明:讀取幀數(shù)需要文件解碼,時(shí)長(zhǎng)取決于文件大小

-v error:這隱藏了“info”輸出(版本信息等),使解析更容易。 -count_frames:計(jì)算每個(gè)流的幀數(shù),并在相應(yīng)的流部分中報(bào)告。 -select_streams v:0 :僅選擇視頻流。 -show_entries stream = nb_read_frames :只顯示讀取的幀數(shù)。 -of default = nokey = 1:noprint_wrappers = 1 :將輸出格式(也稱(chēng)為“writer”)設(shè)置為默認(rèn)值,不打印每個(gè)字段的鍵(nokey = 1),不打印節(jié)頭和頁(yè)腳(noprint_wrappers = 1)。

3.11.2.查詢(xún)FFmpeg軟件信息

version?顯示版本
demuxers?顯示可用的demuxers
muxers?顯示可用的muxers
devices?顯示可用的設(shè)備
codecs?顯示所有編解碼器
decoders?顯示可用編解碼器
encoders?顯示所有編碼器
bsfs?顯示比特流filter
formats?顯示可用的格式
protocols?顯示可用的協(xié)議
filters?顯示可用的過(guò)濾器
pix_fmts?顯示可用的像素格式
sample_fmts?顯示可用的采樣格式
layouts?顯示channel名稱(chēng)
colors?顯示識(shí)別的顏色名稱(chēng)

ffmpeg -version

3.12.錄制

查詢(xún)有哪些設(shè)備

ffmpeg?-f?avfoundation?-list_devices?true?-i?""

錄屏

ffmpeg?-f?avfoundation?-i?1?-r?30?out.yuv

-f 指定使用 avfoundation 采集數(shù)據(jù)。 -i 指定從哪兒采集數(shù)據(jù),它是一個(gè)文件索引號(hào)。在我的MAC上,1代表桌面(可以通過(guò)上面的命令查詢(xún)?cè)O(shè)備索引號(hào))。 -r 指定幀率。按ffmpeg官方文檔說(shuō)-r與-framerate作用相同,但實(shí)際測(cè)試時(shí)發(fā)現(xiàn)不同。-framerate 用于限制輸入,而-r用于限制輸出。 注意,桌面的輸入對(duì)幀率沒(méi)有要求,所以不用限制桌面的幀率。其實(shí)限制了也沒(méi)用。

錄屏+聲音

ffmpeg?-f?avfoundation?-i?1:0?-r?29.97?-c:v?libx264?-crf?0?-c:a?libfdk_aac?-profile:a?aac_he_v2?-b:a?32k?out.flv

-i 1:0 冒號(hào)前面的 “1” 代表的屏幕索引號(hào)。冒號(hào)后面的"0"代表的聲音索相號(hào)。 -c:v 與參數(shù) -vcodec 一樣,表示視頻編碼器。c 是 codec 的縮寫(xiě),v 是video的縮寫(xiě)。 -crf 是 x264 的參數(shù)。 0 表式無(wú)損壓縮。 -c:a 與參數(shù) -acodec 一樣,表示音頻編碼器。 -profile 是 fdk_aac 的參數(shù)。 aac_he_v2 表式使用 AAC_HE v2 壓縮數(shù)據(jù)。 -b:a 指定音頻碼率。 b 是 bitrate的縮寫(xiě), a是 audio的縮與。

錄視頻

ffmpeg?-framerate?30?-f?avfoundation?-i?0?out.mp4

-framerate 限制視頻的采集幀率。這個(gè)必須要根據(jù)提示要求進(jìn)行設(shè)置,如果不設(shè)置就會(huì)報(bào)錯(cuò)。 -f 指定使用 avfoundation 采集數(shù)據(jù)。 -i 指定視頻設(shè)備的索引號(hào)。

錄音

ffmpeg?-f?avfoundation?-i?:0?out.wav

3.13.直播相關(guān)

推流

ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName`

拉流保存

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv`

轉(zhuǎn)流

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v copy -f flv rtmp://server/live/h264Stream`

實(shí)時(shí)推流

ffmpeg -framerate 15 -f avfoundation -i "1" -s 1280x720 -c:v libx264 -f flv rtmp://localhost:1935/live/room`


rodert教你學(xué)FFmpeg實(shí)戰(zhàn)這一篇就夠了的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
临泉县| 丹棱县| 共和县| 夹江县| 日照市| 贵德县| 泰安市| 资阳市| 安化县| 莆田市| 定陶县| 和龙市| 建德市| 内乡县| 临猗县| 千阳县| 桂平市| 分宜县| 孟津县| 墨竹工卡县| 辽宁省| 乳源| 沅江市| 宝山区| 新干县| 萍乡市| 信丰县| 云南省| 九台市| 若尔盖县| 贵南县| 莫力| 祁门县| 太仆寺旗| 桂林市| 化隆| 专栏| 马鞍山市| 漠河县| 永平县| 读书|