分離視頻音頻流 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)碼為封裝文件 說(shuō)明:-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 開(kāi)始時(shí)間,-t 持續(xù)時(shí)間 轉(zhuǎn)視頻格式 ffmpeng -i source.mp4 -c:v libx264 -crf 24 destination.flv ffmpeg 把文件當(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 將一個(gè)直播流,,視頻改用h264壓縮,,音頻改用faac壓縮,送至另一個(gè)直播服務(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 將其中一個(gè)直播流,,視頻改用h264壓縮,音頻不變,,送至另外一個(gè)直播服務(wù)流
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream 將其中一個(gè)直播流,,視頻改用h264壓縮,音頻改用faac壓縮,,送至另外一個(gè)直播服務(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 將其中一個(gè)直播流,,視頻不變,音頻改用faac壓縮,,送至另外一個(gè)直播服務(wù)流
ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream 將一個(gè)高清流,,復(fù)制為幾個(gè)不同視頻清晰度的流重新發(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選項(xiàng)
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)前攝像頭及音頻通過(guò)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)換 比如一個(gè)avi文件,,想轉(zhuǎn)為mp4,或者一個(gè)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 上面的命令,,默認(rèn)mp4的audio codec是aac,如果不是,,可以都轉(zhuǎn)為最常見(jiàn)的aac。 ffmpeg -i test.mp4 -acodec aac -vn output.aac 提取視頻 ffmpeg -i input.mp4 -vcodec copy -an output.mp4 視頻剪切 下面的命令,,可以從時(shí)間為00:00:15開(kāi)始,,截取5秒鐘的視頻。 ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 -ss表示開(kāi)始切割的時(shí)間,,-t表示要切多少,。上面就是從15秒開(kāi)始,切5秒鐘出來(lái),。 碼率控制 碼率控制對(duì)于在線(xiàn)視頻比較重要,。因?yàn)樵诰€(xiàn)視頻需要考慮其能提供的帶寬。
那么,,什么是碼率,?很簡(jiǎn)單: 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。 那么ffmpeg如何控制碼率,。 ffmpg控制碼率有3種選擇,,-minrate -b:v -maxrate -b:v主要是控制平均碼率。 比如一個(gè)視頻源的碼率太高了,,有10Mbps,,文件太大,想把文件弄小一點(diǎn),,但是又不破壞分辨率,。 ffmpeg -i input.mp4 -b:v 2000k output.mp4 上面把碼率從原碼率轉(zhuǎn)成2Mbps碼率,這樣其實(shí)也間接讓文件變小了,。目測(cè)接近一半,。 不過(guò),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 視頻編碼格式轉(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 過(guò)濾器的使用
將輸入的1920x1080縮小到960x540輸出:
ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 //ps: 如果540不寫(xiě),,寫(xiě)成-1,,即scale=960:-1, 那也是可以的,ffmpeg會(huì)通知縮放濾鏡在輸出時(shí)保持原始的寬高比,。 為視頻添加logo
比如,,我有這么一個(gè)圖片
ffmpeg命令添加文字水印 ffmpeg -i balabalayingzhihua1.mp4 -vf "drawtext=fontfile=simhei.ttf:textfile=textfile.txt:x=1590:y=1020:fontsize=24:[email protected]:shadowy=2" balabalayingzhihua12.mp4 相關(guān)說(shuō)明: 1.drawtext必須依賴(lài)libfreetype畫(huà)字庫(kù),libfontconfig字體庫(kù)兩個(gè)庫(kù) scale分辨率filter,,overlay圖片水印filter 2.文字水印的話(huà),,文字水印必須是utf8編碼的,不然會(huì)是亂碼
想要貼到一個(gè)視頻上,,那可以用如下命令: ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay output.mp4 給指定位置添加水?。?/p> $ 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的位置,,第三個(gè)參數(shù)為1,,表示支持透明水印。使用透明的png圖片進(jìn)行視頻編碼后,,成功獲得帶透明水印的視頻,,并且畫(huà)質(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
語(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 結(jié)果如下所示:
截取視頻圖像 ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg -r 表示每一秒幾幀 -q:v表示存儲(chǔ)jpeg的圖像質(zhì)量,一般2是高質(zhì)量,。 如此,,ffmpeg會(huì)把input.mp4,每隔一秒,,存一張圖片下來(lái),。假設(shè)有60s,那會(huì)有60張,。
可以設(shè)置開(kāi)始的時(shí)間,,和你想要截取的時(shí)間。 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg -ss 表示開(kāi)始時(shí)間 -t 表示共要多少時(shí)間,。 如此,,ffmpeg會(huì)從input.mp4的第20s時(shí)間開(kāi)始,往下10s,,即20~30s這10秒鐘之間,,每隔1s就抓一幀,總共會(huì)抓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.視頻倒放,,無(wú)音頻
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.音視頻同時(shí)倒放
ffmpeg -i input.mp4 -vf reverse -af areverse -preset superfast reversed.mp4 部份內(nèi)容引用: FFmpeg ffmpeg 常用命令
|