分離視頻音頻流
ffmpeg -i input_file -vcodec copy -an output_file_video //分離視頻流ffmpeg -i ffmpeg -i input_file -acodec copy -vn output_file_audio //分離音頻流視頻解復(fù)用
ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264視頻轉(zhuǎn)碼
ffmpeg –i test.mp4 –vcodec h264 –s 352:278 –an –f m4v test.264
轉(zhuǎn)換視頻分辯率
ffmpeg -i input.mp4 -vf scale=1080:1920 output.mp4
轉(zhuǎn)碼為碼流原始文件
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352:278 –an –f m4v test.264 //轉(zhuǎn)碼-
為碼流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //轉(zhuǎn)碼為封裝文件說明:-bf B幀數(shù)目控制,-g 關(guān)鍵幀間隔控制,-s 分辨率控制
視頻剪切
ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取圖片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切視頻//-r 提取圖像的頻率狈蚤,-ss 開始時間,-t 持續(xù)時間轉(zhuǎn)視頻格式
ffmpeng -i source.mp4 -c:v libx264 -crf 24 destination.flvffmpeg 把文件當(dāng)做直播推送至服務(wù)器 (RTMP + FLV)
ffmpeg - re -i demo.mp4 -c copy - f flv rtmp://w.gslb.letv/live/streamid將直播的媒體保存到本地
ffmpeg -i rtmp://r.glsb.letv/live/streamid -c copy streamfile.flv將一個直播流带族,視頻改用h264壓縮,音頻改用faac壓縮蟀给,送至另一個直播服務(wù)器
ffmpeg -i rtmp://r.glsb.letv/live/streamidA -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://w.glsb.letv/live/streamb提取視頻中的音頻,并保存為mp3 然后輸出
ffmpeg -i input.avi -b:a 128k output.mp3合成視頻和音頻
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg將.avi轉(zhuǎn)成.flv
ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv
- 從flv提取mp3
ffmpeg -i source.flv -ab 128k dest.mp3
13蝙砌、將文件當(dāng)做直播送至live
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName
- 將直播媒體保存至本地文件
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
- 將其中一個直播流,視頻改用h264壓縮跋理,音頻不變择克,送至另外一個直播服務(wù)流
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream
- 將其中一個直播流,視頻改用h264壓縮前普,音頻改用faac壓縮肚邢,送至另外一個直播服務(wù)流
ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream
- 將其中一個直播流,視頻不變拭卿,音頻改用faac壓縮骡湖,送至另外一個直播服務(wù)流
ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream
- 將一個高清流,復(fù)制為幾個不同視頻清晰度的流重新發(fā)布峻厚,其中音頻不變
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k
- 功能一樣响蕴,只是采用-x264opts選項
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k
- 將當(dāng)前攝像頭及音頻通過DSSHOW采集,視頻h264惠桃、音頻faac壓縮后發(fā)布
ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name
視頻轉(zhuǎn)換
比如一個avi文件浦夷,想轉(zhuǎn)為mp4,或者一個mp4想轉(zhuǎn)為ts辜王。
ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts提取音頻
ffmpeg -i test.mp4 -acodec copy -vn output.aac
上面的命令劈狐,默認mp4的audio codec是aac,如果不是,可以都轉(zhuǎn)為最常見的aac誓禁。
ffmpeg -i test.mp4 -acodec aac -vn output.aac提取視頻
ffmpeg -i input.mp4 -vcodec copy -an output.mp4視頻剪切
下面的命令懈息,可以從時間為00:00:15開始肾档,截取5秒鐘的視頻摹恰。
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示開始切割的時間辫继,-t表示要切多少。上面就是從15秒開始俗慈,切5秒鐘出來姑宽。碼率控制
碼率控制對于在線視頻比較重要。因為在線視頻需要考慮其能提供的帶寬闺阱。
那么炮车,什么是碼率?很簡單:
bitrate = file size / duration
比如一個文件20.8M酣溃,時長1分鐘瘦穆,那么,碼率就是:
biterate = 20.8M bit/60s = 20.810241024*8 bit/60s= 2831Kbps
一般音頻的碼率只有固定幾種赊豌,比如是128Kbps扛或,
那么,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps碘饼。
那么ffmpeg如何控制碼率熙兔。
ffmpg控制碼率有3種選擇,-minrate -b:v -maxrate
-b:v主要是控制平均碼率艾恼。
比如一個視頻源的碼率太高了住涉,有10Mbps,文件太大钠绍,想把文件弄小一點舆声,但是又不破壞分辨率。
ffmpeg -i input.mp4 -b:v 2000k output.mp4
上面把碼率從原碼率轉(zhuǎn)成2Mbps碼率柳爽,這樣其實也間接讓文件變小了纳寂。目測接近一半。
不過泻拦,ffmpeg官方wiki比較建議毙芜,設(shè)置b:v時,同時加上 -bufsize
-bufsize 用于設(shè)置碼率控制緩沖器的大小争拐,設(shè)置的好處是腋粥,讓整體的碼率更趨近于希望的值,減少波動架曹。(簡單來說隘冲,比如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就簡單了绑雄,在線視頻有時候展辞,希望碼率波動,不要超過一個閾值万牺,可以設(shè)置maxrate罗珍。
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
- 視頻編碼格式轉(zhuǎn)換
比如一個視頻的編碼是MPEG4洽腺,想用H264編碼,咋辦覆旱?
ffmpeg -i input.mp4 -vcodec h264 output.mp4
相反也一樣
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4
當(dāng)然了蘸朋,如果ffmpeg當(dāng)時編譯時,添加了外部的x265或者X264扣唱,那也可以用外部的編碼器來編碼藕坯。(不知道什么是X265,可以 Google一下噪沙,簡單的說炼彪,就是她不包含在ffmpeg的源碼里,是獨立的一個開源代碼正歼,用于編碼HEVC霹购,ffmpeg編碼時可以調(diào)用它。當(dāng)然 了朋腋,ffmpeg自己也有編碼器)
ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4
- 過濾器的使用
將輸入的1920x1080縮小到960x540輸出:
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
//ps: 如果540不寫齐疙,寫成-1,即scale=960:-1, 那也是可以的旭咽,ffmpeg會通知縮放濾鏡在輸出時保持原始的寬高比贞奋。為視頻添加logo
比如,我有這么一個圖片
ffmpeg命令添加文字水印
ffmpeg -i balabalayingzhihua1.mp4 -vf "drawtext=fontfile=simhei.ttf:textfile=textfile.txt:x=1590:y=1020:fontsize=24:fontcolor=white@0.9:shadowy=2" balabalayingzhihua12.mp4
相關(guān)說明:
1.drawtext必須依賴libfreetype畫字庫穷绵,libfontconfig字體庫兩個庫
scale分辨率filter轿塔,overlay圖片水印filter
2.文字水印的話,文字水印必須是utf8編碼的仲墨,不然會是亂碼
想要貼到一個視頻上勾缭,那可以用如下命令:
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4
給指定位置添加水印:
$ ffmpeg -i /Users/nenhall_work/Movies/I’m-so-sick-1080P—Apink_m.mp4 -vf
"movie=/Users/nenhall_work/Desktop/logo_white.png[watermark];[in][watermark]overlay=50:50:1[out]"
-acodec copy -vcodec copy /Users/nenhall_work/Movies/I’m-so-sick-1080P—Apink_m2.mp4
overlay=50:50:1代表x目养,y的位置俩由,第三個參數(shù)為1,表示支持透明水印癌蚁。使用透明的png圖片進行視頻編碼后幻梯,成功獲得帶透明水印的視頻,并且畫質(zhì)也比較好努释,
-acodec copy -vcodec copy表示保持音視頻編碼不變
-vf “…” 中間便是水印處理參數(shù)碘梢,movie是指圖片水印路徑,搭配overlay一起使用
結(jié)果如下所示:
要貼到其他地方伐蒂?看下面:
右上角:
./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
- 去掉視頻的logo
語法:-vf delogo=x:y:w:h[:t[:show]]
x:y 離左上角的坐標
w:h logo的寬和高
t: 矩形邊緣的厚度默認值4
show:若設(shè)置為1有一個綠色的矩形煞躬,默認值0。
ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4
結(jié)果如下所示:
- 截取視頻圖像
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r 表示每一秒幾幀
-q:v表示存儲jpeg的圖像質(zhì)量,一般2是高質(zhì)量恩沛。
如此在扰,ffmpeg會把input.mp4,每隔一秒复唤,存一張圖片下來健田。假設(shè)有60s烛卧,那會有60張佛纫。
可以設(shè)置開始的時間,和你想要截取的時間总放。
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-ss 表示開始時間
-t 表示共要多少時間呈宇。
如此,ffmpeg會從input.mp4的第20s時間開始局雄,往下10s甥啄,即20~30s這10秒鐘之間,每隔1s就抓一幀炬搭,總共會抓10幀蜈漓。
29.視頻轉(zhuǎn)成圖片
ffmpeg -i video.mp4 /outputPath/video-frame-%d.png
fmpeg/ffprobe查看音視頻文件信息并輸出為json格式
ffprobe -v quiet -print_format json -show_format -show_streams 文件路
eg.:ffprobe -v quiet -print_format json -show_format -show_streams /Users/xiud/Downloads/IMG_1070.mp4
30.倒序播放
//reversed.mp4: 處理后的視頻輸出
1.視頻倒放,無音頻
ffmpeg -i input.mp4 -filter_complex
"[0:v]reverse[v]" -map "[v]" -preset superfast reversed.mp4
2.視頻倒放宫盔,音頻不變
ffmpeg -i input.mp4 -vf reverse reversed.mp4
3.音頻倒放融虽,視頻不變
ffmpeg -i input.mp4 -c:v copy -af areverse reversed_audio.mp4
4.音視頻同時倒放
ffmpeg -i input.mp4 -vf reverse -af areverse -preset superfast reversed.mp4
部份內(nèi)容引用:
FFmpeg ffmpeg 常用命令
短視頻SDK基本免費功能實現(xiàn)