国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

音視頻學(xué)習(xí)之ffmpeg常用基礎(chǔ)命令整理

這篇具有很好參考價(jià)值的文章主要介紹了音視頻學(xué)習(xí)之ffmpeg常用基礎(chǔ)命令整理。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

基于windows環(huán)境安裝好必要的ffmpeg后,對(duì)ffmpeg基礎(chǔ)命令進(jìn)行一些了解:

1:ffmpeg查看版本

ffmpeg -version

2:ffmpeg查詢命令:

基本信息:ffmpeg -h
高級(jí)信息:ffmpeg -h long
所有信息:ffmpeg -h full

ffplay查看幫助: ffplay -h
ffprobe查看幫助: ffprobe -h

ffmpeg具體分類支持的參數(shù)查看幫助: ffmepg -h type=name
比如:		
		ffmpeg -h muxer=flv
		ffmpeg -h filter=atempo (atempo調(diào)整音頻播放速率)
		ffmpeg -h encoder=libx264

3:ffmpeg分類查詢命令:

ffmpeg命令大全,ffmpeg,音視頻,學(xué)習(xí)

?文章來源地址http://www.zghlxwxcb.cn/news/detail-660354.html

	-version 	顯示版本 
	-buildconf 	顯示編譯配置 
	-protocols 	顯示可用的協(xié)議 
	-formats 	顯示可用格式 (muxers+demuxers) 
	
	-filters 	顯示可用的過濾器 
	-muxers 	顯示可用復(fù)用器 

	-demuxers 	顯示可用解復(fù)用器 
	-codecs 	顯示可用編解碼器 (decoders+encoders)
	-decoders 	顯示可用解碼器
	-encoders 	顯示可用編碼器
	-layouts 	顯示標(biāo)準(zhǔn)聲道名稱 
	
	-pix_fmts 		顯示可用的像素格式 
	-sample_fmts 	顯示可用的音頻采樣 格式 
	-bsfs 			顯示可用比特流filter 
	-colors 		顯示可用的顏色名稱 

4:ffmpeg基礎(chǔ)命令:

 主要參數(shù):
	? -i 設(shè)定輸入流
	? -f 設(shè)定輸出格式(format)
	? -ss 開始時(shí)間
	? -t 時(shí)間長(zhǎng)度
	
音頻參數(shù):
	? -aframes 		設(shè)置要輸出的音頻幀數(shù)
	? -b:a 			音頻碼率
	? -ar 			設(shè)定采樣率
	? -ac			設(shè)定聲音的Channel數(shù)
	? -acodec 		設(shè)定聲音編解碼器,如果用copy表示原始編解碼數(shù)據(jù)必須被拷貝。
	? -an 			不處理音頻
	? -af 			音頻過濾器
ffmpeg -i test.mp4 -b:a 192k -ar 48000 -ac 2 -acodec libmp3lame -aframes 200 out2.mp3

視頻參數(shù):
	? -vframes 			設(shè)置要輸出的視頻幀數(shù)
	? -b 				設(shè)定視頻碼率
	? -b:v 				視頻碼率
	? -r 				設(shè)定幀速率
	? -s 				設(shè)定畫面的寬與高
	? -vn 				不處理視頻
	? -aspect aspect 	設(shè)置橫縱比 4:3 16:9 或 1.3333 1.7777
	? -vcodec 			設(shè)定視頻編解碼器,如果用copy表示原始編解碼數(shù)據(jù)必須被拷貝。
	? -vf 				視頻過濾器
ffmpeg -i test.mp4 -vframes 300 -b:v 300k -r 30 -s 640x480 -aspect 16:9 -vcodec libx265

5:ffmepg使用命令提取音頻或視頻:

提取音視頻數(shù)據(jù):
? 保留封裝格式
	ffmpeg -i test.mp4 -acodec copy -vn audio.mp4
	ffmpeg -i test.mp4 -vcodec copy -an video.mp4
? 提取視頻
	保留編碼格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264
	強(qiáng)制格式:ffmpeg -i test.mp4 -vcodec libx264 -an test.h264
? 提取音頻
	保留編碼格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac
	強(qiáng)制格式:ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3
	
提取像素格式和PCM數(shù)據(jù):
? 提取YUV
	? 提取3秒數(shù)據(jù),分辨率和源視頻一致
		ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv
	? 提取3秒數(shù)據(jù),分辨率轉(zhuǎn)為320x240
		ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv
? 提取RGB
	? 提取3秒數(shù)據(jù),分辨率轉(zhuǎn)為320x240
		ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb
? RGB和YUV之間的轉(zhuǎn)換
	ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb
	
? 提取PCM
	ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
	ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav
	ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav
	ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm
	ffmpeg -i test.mp4 -t 10 -vn -ar 48000 -ac 2 -f f32le 48000_2_f32le_2.pcm

6:ffmpeg命令轉(zhuǎn)封裝:

? 保持編碼格式:
	ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts
	ffmpeg -i test.mp4 -codec copy test_copy2.ts
? 改變編碼格式:
	ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv
	
? 修改幀率:
	ffmpeg -i test.mp4 -r 15 -codec copy output.mp4 (錯(cuò)誤命令)
	ffmpeg -i test.mp4 -r 15 output2.mp4
? 修改視頻碼率:
	ffmpeg -i test.mp4 -b 400k output_b.mkv (此時(shí)音頻也被重新編碼)
? 修改視頻碼率:
	ffmpeg -i test.mp4 -b:v 400k output_bv.mkv
	
? 修改音頻碼率:
	ffmpeg -i test.mp4 -b:a 192k output_ba.mp4
	如果不想重新編碼video,需要加上-vcodec copy
? 修改音視頻碼率:
	ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4
	
? 修改視頻分辨率:
	ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4
? 修改音頻采樣率: 
	ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4

7:ffmpeg過濾器命令:

1:生成測(cè)試文件

? 找三個(gè)不同的視頻每個(gè)視頻截取10秒內(nèi)容
	ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4
	ffmpeg -i 復(fù)仇者聯(lián)盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4
	ffmpeg -i 紅海行動(dòng).mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4
		如果音視頻格式不統(tǒng)一則強(qiáng)制統(tǒng)一為 -vcodec libx264 -acodec aac
? 將上述1.mp4/2.mp4/3.mp4轉(zhuǎn)成ts格式
	ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
	ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts
	ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts
? 轉(zhuǎn)成flv格式
	ffmpeg -i 1.mp4 -codec copy 1.flv
	ffmpeg -i 2.mp4 -codec copy 2.flv
	ffmpeg -i 3.mp4 -codec copy 3.flv
分離某些封裝格式(例如MP4/FLV/MKV等)中的H.264的時(shí)候,需要首先寫入SPS和PPS,否則會(huì)導(dǎo)致分離出來的數(shù)據(jù)沒有SPS、PPS而無法播放。
	H.264碼流的SPS和PPS信息存儲(chǔ)在AVCodecContext結(jié)構(gòu)體的extradata中。
	需要使用ffmpeg中名稱為“h264_mp4toannexb”的bitstream filter處理
	
2:開始拼接文件:
? 以MP4格式進(jìn)行拼接
	方法1:ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy out_mp4.mp4 
	方法2:ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4
	自己新建 mp4list.txt,在其中實(shí)現(xiàn) file '1.mp4'
	
	
? 以TS格式進(jìn)行拼接
	方法1:ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4 
	方法2:ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4
	自己新建 tslist.txt,在其中實(shí)現(xiàn) file '1.ts'
	
? 以FLV格式進(jìn)行拼接
	方法1:ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv.mp4 
	方法2:ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4

需要驗(yàn)證最后結(jié)果是否正常:
? 方法1只適用部分封裝格式,比如TS
? 建議:
	(1)使用方法2進(jìn)行拼接
	(2)轉(zhuǎn)成TS格式再進(jìn)行拼接

3:測(cè)試不同編碼拼接:
? 修改音頻編碼
	ffmpeg -i 2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb 2.ts
	ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out1.mp4 結(jié)果第二段沒有聲音
? 修改音頻采樣率
	ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts
	ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out2.mp4 第二段播放異常
? 修改視頻編碼格式
	ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts
	ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out3.mp4 
? 修改視頻分辨率
	ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 800x472 -vbsf h264_mp4toannexb 1.ts
	ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out4.mp4
? 注意:
	把每個(gè)視頻封裝格式也統(tǒng)一為ts,拼接輸出的時(shí)候再輸出你需要的封裝格式,比如MP4
	視頻分辨率可以不同,但是編碼格式需要統(tǒng)一
	音頻編碼格式需要統(tǒng)一,音頻參數(shù)(采樣率/聲道等)也需要統(tǒng)一

8:ffmpeg 圖片與視頻互轉(zhuǎn):

? 截取一張圖片
	ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg
	ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp
		-i 輸入
		-y 覆蓋
		-f 格式
		image2 一種格式
		-ss 起始值
		-vframes 幀 如果大于1 那么 輸出加%03d test%03d.jpg 
		-s 格式大小size
? 轉(zhuǎn)換視頻為圖片(每幀一張圖):
	ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg 
? 圖片轉(zhuǎn)換為視頻:
	ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4


? 從視頻中生成GIF圖片
	ffmpeg -i test.mp4 -t 5 -r 1 image1.gif
	ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif
? 將 GIF 轉(zhuǎn)化為 視頻
	ffmpeg -f gif -i image2.gif image2.mp4

9:ffmpeg 視頻錄制命令:

有時(shí)候?qū)懭隡P4文件會(huì)不成功,改成flv就好

? 先安裝dshow軟件 Screen Capturer Recorder,
	項(xiàng)目地址:https://sourceforge.net/projects/screencapturer/files/ 
	然后查看可用設(shè)備名字:
		ffmpeg -list_devices true -f dshow -i dummy

? 錄制視頻(默認(rèn)參數(shù))
	桌面:		 ffmpeg -f dshow -i video="screen-capture-recorder" v-out.mp4 
	攝像頭: 	 ffmpeg -f dshow -i video="Integrated Webcam" -y v-out2.flv (要根據(jù)自己攝像頭名稱)
? 錄制聲音(默認(rèn)參數(shù))
	系統(tǒng)聲音:			ffmpeg -f dshow -i audio="virtual-audio-capturer" a-out.aac
	系統(tǒng)+麥克風(fēng)聲音:	  ffmpeg -f dshow -i audio="麥克風(fēng) (Realtek(R) Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 a-out2.aac

? 查看視頻錄制的可選參數(shù)
	ffmpeg -f dshow -list_options true -i video="screen-capture-recorder"	
? 查看音頻錄制的可選參數(shù)
	ffmpeg -f dshow -list_options true -i audio="virtual-audio-capturer"
	ffmpeg -f dshow -list_options true -i audio="麥克風(fēng) (Realtek(R) Audio)"

指定參數(shù)錄制音視頻:
	? ffmpeg -f dshow -i audio="麥克風(fēng) (Realtek(R) Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -video_size 1920x1080 -framerate 15 -pixel_format yuv420p -i video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M -y av-out.flv
	? ffmpeg -f dshow -i audio="麥克風(fēng) (Realtek(R) Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -i video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M -r 15 -y av-out2.mp4
	? ffmpeg -f dshow -i audio="麥克風(fēng) (Realtek(R) Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f dshow -framerate 15 -pixel_format yuv420p -i video="screen-capture-recorder" -vcodec h264_qsv -b:v 3M -r 15 -y av-out3.mp4

10:ffmpeg直播推流/拉流命令:

? 直播拉流
	ffplay rtmp://server/live/streamName 
	ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
		對(duì)于不是rtmp的協(xié)議 -c copy要謹(jǐn)慎使用
? 可用地址
	HKS:rtmp://live.hkstv.hk.lxdns.com/live/hks2
	大熊兔(點(diǎn)播):rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
	CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8
		ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy cctv1.ts
		ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 cctv1.flv
		ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -acodec aac -vcodec libx264 cctv1-2.flv
	CCTV3高清:http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8
	CCTV5高清:http://ivi.bupt.edu.cn/hls/cctv5hd.m3u8
	CCTV5+高清:http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8
	CCTV6高清:http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8

? 直播推流
	ffmpeg -re -i out.mp4 -c copy flv rtmp://server/live/streamName
		-re,表示按時(shí)間戳讀取文件

11:ffmpeg filter過濾器應(yīng)用:

1:視頻裁剪:

ffmpeg命令大全,ffmpeg,音視頻,學(xué)習(xí)

?

變量 			   用于 ow 和 oh 參數(shù)的表達(dá)式中的可用變量

x, y			對(duì) x 的計(jì)算值(從左上角水平方向的像素個(gè)數(shù))和 y(垂直像素的數(shù)量),對(duì)每個(gè)幀進(jìn)行評(píng)估,x的默認(rèn)值為(iw - ow)/2, y 的默認(rèn)值為(ih - oh)/2
in_w, iw 		輸入的寬度
in_h, ih 		輸入的高度
out_w,ow		輸出(裁剪)寬度,默認(rèn)值= iw
out_h,oh 		輸出(裁剪)高度,默認(rèn)值= ih
a 				縱橫比,與 iw/ih 相同
sar 			輸入樣本比例
dar 			輸入顯示寬比,等于表達(dá)式 a*sar
hsub, vsub 		水平和垂直的色度子樣本值,對(duì)于像素格式 yuv422p, hsub 的值為 2,vsub 為 1
n 				輸入幀的數(shù)目,從 0 開始
pos 			位置在輸入框的文件中,如果不知道 NAN
t 				時(shí)間戳以秒表示,如果輸入時(shí)間戳未知

ow 的值可以從 oh 得到,反之亦然,但不能從 x 和 y 中得到,因?yàn)檫@些值是在 ow 和 oh 之后進(jìn)行的。
x 的值可以從 y 的值中得到,反之亦然。
	例如,在輸入框的左三、中三和右三,我們可以使用命令(iw/3*2)是開始裁剪的位置:
		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

(1)裁剪 100x100 的區(qū)域,起點(diǎn)為(12,34).
		crop=100:100:12:34
		相同效果:
		crop=w=100:h=100:x=12:y=34
(2)裁剪中心區(qū)域,大小為 100x100
		crop=100:100
(3)裁剪中心區(qū)域,大小為輸入視頻的 2/3
		crop=2/3*in_w:2/3*in_h
(4)裁剪中心區(qū)域的正方形,高度為輸入視頻的高
		crop=out_w=in_h
		crop=in_h
(5)裁剪偏移左上角 100 像素
		crop=in_w-100:in_h-100:100:100
(6)裁剪掉左右 10 像素,上下 20 像素
		crop=in_w-2*10:in_h-2*20
(7)裁剪右下角區(qū)域
		crop=in_w/2:in_h/2:in_w/2:in_h/2

2:文字水印:

編譯的時(shí)候需要支持 FreeType、FontConfig、iconv,系統(tǒng)中需要有相關(guān)的子庫(kù),

在 FFmpeg 中增加純字母水印可以使用 drawtext 濾鏡進(jìn)行支持:

drawtext 參數(shù)相關(guān):
text 		字符串 	   文字
textfile 	字符串 	   文字文件
box 		布爾 			文字區(qū)域背景框(缺省 false)
boxcolor 	色彩 			展示字體區(qū)域塊的顏色
font 		字符串 	   字體名稱(默認(rèn)為 Sans 字體)
fontsize 	整數(shù) 			顯示字體的大小
x 			字符串 		缺省為 0
y 			字符串 		缺省為 0
alpha 		浮點(diǎn)數(shù) 		透明度(默認(rèn)為 1),值從 0~1

相關(guān)使用實(shí)例:

(1)將文字的水印加在視頻的左上角:
	ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':x=20:y=20"
將字體的顏色設(shè)置為綠色:
	ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green"
如果想調(diào)整文字水印顯示的位置,調(diào)整 x 與 y 參數(shù)的數(shù)值即可。
	ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:x=400:y=200"
修改透明度
	ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':fontcolor=green:x=400:y=200:alpha=0.5"
	
(2)文字水印還可以增加一個(gè)框,然后給框加上背景顏色:
	ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='hello world':fontcolor=green:box=1:boxcolor=yellow"
	
(3)有些時(shí)候文字水印希望以本地時(shí)間作為水印內(nèi)容,可以在 drawtext 濾鏡中配合一些特殊用法來完成,在 text 中顯示本地當(dāng)前時(shí)間,格式為年月日時(shí)分秒的方式,
	ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=gree
n:box=1:boxcolor=yellow"
在使用 ffmpeg 轉(zhuǎn)碼存儲(chǔ)到文件時(shí)需要加上-re,否則時(shí)間不對(duì)。
	ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':fontcolor=gree n:box=1:boxcolor=yellow" out.mp4
(4)在個(gè)別場(chǎng)景中,需要定時(shí)顯示水印,定時(shí)不顯示水印,這種方式同樣可以配合 drawtext 濾鏡進(jìn)行處理,使用 drawtext 與 enable 配合即可,
	例如每 3 秒鐘顯示一次文字水?。?	ffplay -i input.mp4 -vf "drawtext=fontsize=60:fontfile=FreeSerif.ttf:text='test':fontcolor=green:box=1:boxcolor=yellow:enable=lt(mod(t\,3)\,1)" 
	在使用 ffmpeg 轉(zhuǎn)碼存儲(chǔ)到文件時(shí)需要加上-re,否則時(shí)間不對(duì)。
	表達(dá)式參考:http://www.ffmpeg.org/ffmpeg-utils.html 3 Expression Evaluation 
		lt(x, y) Return 1 if x is lesser than y, 0 otherwise.
		mod(x, y) Compute the remainder of division of x by y.
		
(5)跑馬燈效果
	ffplay -i input.mp4 -vf "drawtext=fontsize=100:fontfile=FreeSerif.ttf:text='helloworld':x=mod(100*t\,w):y=abs(sin(t))*h*0.7"
修改字體透明度,修改字體顏色
	ffplay -i input.mp4 -vf  "drawtext=fontsize=40:fontfile=FreeSerif.ttf:text='liaoqingfu':x=mod(50*t\,w):y=abs(sin(t))*h*0.7:alpha=0.5:fontcolor=white:enable=lt(mod(t\,3)\,1)"

3:圖片水印:

? 為視頻添加圖片水印可以使用?movie?濾鏡,相關(guān)參數(shù):

filename		 	字符串		輸入的文件名,可以是文件,協(xié)議,設(shè)備
format_name, f 		字符串 	輸入的封裝格式
stream_index, si 	整數(shù) 		輸入的流索引編號(hào)
seek_point, sp 		浮點(diǎn)數(shù) 	Seek 輸入流的時(shí)間位置
streams, s 			字符串 	輸入的多個(gè)流的流信息
loop 				整數(shù) 		循環(huán)次數(shù)
discontinuity 		時(shí)間差值   支持跳動(dòng)的時(shí)間戳差值

例如:
ffmpeg -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=10:y=10[out]" output.mp4
	? 原始視頻文件路徑:input.mp4
	? 水印圖片路徑:logo.png
	? 水印位置:(x,y)=(10,10)<=(left,top)距離左側(cè)、頂部各 10 像素;
	? 輸出文件路徑:output.mp4
		main_w 視頻單幀圖像寬度
		main_h 視頻單幀圖像高度
		overlay_w 水印圖片的寬度
		overlay_h 水印圖片的高度
	對(duì)應(yīng)地可以將 overlay 參數(shù)設(shè)置成如下值來改變水印圖片的位置:
		左上角 10:10
		右上角 main_w-overlay_w-10:10
		左下角 10:main_h-overlay_h-10
		右下角 main_w-overlay_w-10:main_h-overlay_h-10

使用實(shí)例:

在 FFmpeg 中加入圖片水印有兩種方式:
	一種是通過 movie 指定水印文件路徑,
	另外一種方式是通過filter 讀取輸入文件的流并指定為水印。
讀取 movie 圖片文件作為水?。?
(1)圖片 logo.png 將會(huì)打入到 input.mp4 視頻中,顯示在 x 坐標(biāo) 50、y 坐標(biāo) 20 的位置
		ffplay -i input.mp4 -vf "movie=logo.png[logo];[in][logo]overlay=50:10[out]"
由于 logo.png 圖片的背景色是白色,所以顯示起來比較生硬,如果水印圖片是透明背景的,效果會(huì)更好,
下面找一張透明背景色的圖片試一下:
	ffplay -i input.mp4 -vf "movie=logo2.png[watermark];[in][watermark]overlay=50:10[out]"
(2)顯示位置
		ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=10:10[out]"
		ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=main_w-overlay_w-10:10[out]"
		ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=10:main_h-overlay_h-10[out]"
		ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out]"
(3)跑馬燈效果
		ffplay -i input.mp4 -vf "movie=logo.png[watermark];[in][watermark]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*h*0.7[out]"

4:生成畫中畫:

可以通過?overlay?將 多個(gè)視頻流、多個(gè)多媒體采集設(shè)備、多個(gè)視頻文件合并到一個(gè)界面中,生成畫中畫的效果。

相關(guān)參數(shù)介紹:

x 			字符串 		X 坐標(biāo)
y 			字符串 		Y 坐標(biāo)
eof_action 	整數(shù) 			遇到 eof 表示時(shí)的處理方式,默認(rèn)為重復(fù)
							? repeat(值為 0):重復(fù)前一幀
							? endcall(值為 1):停止所有的流
							? pass(值為 2):保留主圖層
shortest 	布爾 			終止最短的視頻時(shí)全部終止(默認(rèn) false)
format 		整數(shù) 			設(shè)置 output 的像素格式,默認(rèn)為 yuv420
							? yuv420 (值為 0)
							? yuv422 (值為 1)
							? yuv444 (值為 2)
							? rgb (值為 3)
(1)顯示畫中畫效果
		ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20[out]"
		ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:eof_action=1[out]"
		ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[sub];[in][sub]overlay=x=20:y=20:shortest =1[out]"
縮放子畫面尺寸
	ffplay -i input.mp4 -vf "movie=sub_320x240.mp4,scale=640x480[sub];[in][sub]overlay=x=20:y=20[out]"
(2)跑馬燈
	ffplay -i input.mp4 -vf "movie=sub_320x240.mp4[test];[in][test]overlay=x=mod(50*t\,main_w):y=abs(sin(t))*main_h*0.7[out]"

5:多宮格處理:

從前文中可以看出進(jìn)行視頻圖像處理時(shí),overlay 濾鏡為關(guān)鍵畫布,可以通過 FFmpeg建立一個(gè)畫布,也可以使用默認(rèn)的畫布。如果想以多宮格的方式展現(xiàn),則可以自己建立一個(gè)足夠大的畫布, 下面就來看一下多宮格展示的例子:

ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.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" out.mp4

1.2.3.4.mp4 為文件路徑,out.MP4 為輸出文件路徑,通過 nullsrc 創(chuàng)建 overlay 畫布,畫布大小 640:480,使用[0:v][1:v][2:v][3:v]將輸入的 4 個(gè)視頻流去除,分別進(jìn)行縮放處理,然后基于 nullsrc 生成的畫布進(jìn)行視頻平鋪,命令中自定義 upperleft,upperright,lowerleft,lowerright 進(jìn)行不同位置平鋪。

只疊加左上右上的命令(輸出到tmp1中,可以最后加[out]):
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "nullsrc=size=640x480[base];[0:v]setpts=PTS-STARTPTS,scale=320x240[upperleft];[1:v]setpts=PTS-STARTPTS,scale=320x240[upperright];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][upperright]overlay=shortest=1:x=320" out2.mp4

6:視頻倒放相關(guān)控制:

通過ffmpeg命令行進(jìn)行音視頻倒放,android平臺(tái)同樣可以以將ffmpeg集成進(jìn)去實(shí)現(xiàn)音視頻的相關(guān)編輯

1.視頻倒放,無音頻
	ffmpeg.exe -i inputfile.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4
 
2.視頻倒放,音頻不變
	ffmpeg.exe -i inputfile.mp4 -vf reverse reversed.mp4
 
3.音頻倒放,視頻不變
	ffmpeg.exe -i inputfile.mp4 -map 0 -c:v copy -af "areverse" reversed_audio.mp4
 
4.音視頻同時(shí)倒放
	ffmpeg.exe -i test.mp4 -vf reverse -af areverse -preset superfast outtest.mp4
 
6、查看音視頻實(shí)際時(shí)長(zhǎng)
	ffprobe.exe  -v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
	ffprobe.exe  -v error -select_streams a:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
 
7、查看NV21
	ffplay.exe -i input.nv21 -pix_fmt nv21 -s 4624x3472
 
8、nv21轉(zhuǎn)jpg
	ffmpeg -y -s 1920x1080 -pix_fmt nv21 -i image.nv21.yuv image.jpg
 
9.jpg轉(zhuǎn)nv21
	ffmpeg -i input.jpg -pix_fmt nv21 output_1080x1920.yuv
 
10、rgba轉(zhuǎn)png
	ffmpeg -f rawvideo -pixel_format rgba -video_size 1080x1920 -i input.raw output.png
 
11、jpg轉(zhuǎn)rgba
	ffmpeg -i input.jpg -vcodec rawvideo -pix_fmt rgba raw1.rgb
 
12、剔除mp4中音頻或視頻(-map 0:0 -map 0:1)
	ffmpeg.exe -i input.mp4 -map 0:0 -vcodec copy -acodec copy output.mp4
		-map 0:0: 第1個(gè)輸入文件的第一個(gè)流,也就是主要的視頻流。
		-map 0:1: 第1個(gè)輸入文件的第二個(gè)流,是視頻的聲音。
		-vcodec copy: 拷貝選擇的視頻流。
		-acodec copy: 拷貝選擇的聲音流

12:分離H264或mpeg2video視頻格式數(shù)據(jù)命令:

#提取H264:
	ffmpeg -i source.200kbps.768x320_10s.flv -vcodec libx264 -an -f h264 source.200kbps.768x320_10s.h264
#提取MPEG2:
	ffmpeg -i source.200kbps.768x320_10s.flv -vcodec mpeg2video -an -f mpeg2video source.200kbps.768x320_10s.mpeg2v
	
#播放YUV
	ffplay -pixel_format yuv420p -video_size 768x320 -framerate 25 source.200kbps.768x320_10s.yuv

13:ffmpeg 命令查找重定向(-f fmt 對(duì)應(yīng)的參數(shù))

	?如我們?cè)?f fmt打算指定格式時(shí),怎么知道什么樣的格式才是適合的format?
		可以通過ffmpeg -formats | findstr xx的?式去查找。
		對(duì)于findstr,/i是忽略??寫
?如:
	查找Audio的裸流解復(fù)?器:ffmpeg -formats | findstr /i audio
	查找Video的裸流解復(fù)?器:ffmpeg -formats | findstr /i video

14:ffmpeg其他基礎(chǔ)命令:

#查看視頻元信息  比如 編碼格式和比特率
$ ffmpeg -i input.mp4
#只查看元信息
$ ffmpeg -i input.mp4 -hide_banner 

#將音頻和視頻合并到一個(gè)文件:
$ ffmpeg -i input.aac -i input.mp4 output.mp4

#截取一張圖片:
$ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg

#為音頻添加封面:
$ ffmpeg -loop 1 -i cover.jpg -i input.mp3 -c:v libx264 -c:a aac -b:a 192k -shortest output.mp4
#	有兩個(gè)輸入文件,一個(gè)是封面圖片cover.jpg,另一個(gè)是音頻文件input.mp3。
#		-loop 1參數(shù)表示圖片無限循環(huán),-shortest參數(shù)表示音頻文件結(jié)束,輸出視頻就結(jié)束。

15:花屏 綠屏

綠屏的主要是:?無法渲染的畫面有些用黑色填充,有些用綠色填充,有些用上一幀畫面填充。

===> 視頻參數(shù)改變, 而解碼端的SPS&PPS信息未及時(shí)重新獲取更新,會(huì)導(dǎo)致畫面無法正常渲染,繼而導(dǎo)致綠屏的現(xiàn)象出現(xiàn)。

15.1:全屏花屏:

? 正?;ㄆ粒?/p>

==>碼率特別低的時(shí)候出現(xiàn)的大面積馬賽克,編碼器每秒產(chǎn)生的視頻數(shù)據(jù)太少。

==>視頻參數(shù)問題:

======>視頻源修改過視頻參數(shù)(如從720P修改1080P),此時(shí)客戶端用于解碼的SPS&PPS如果沒有重新獲取的話,就會(huì)出現(xiàn)整個(gè)畫面花屏的現(xiàn)象。

======>不會(huì)恢復(fù)。

15.2:局部花屏:

? SO_SNDBUF的Buffer太小,丟失P幀

? P幀丟失。

總結(jié):視頻播放時(shí),相關(guān)SPS和PPS參數(shù)不匹配/丟幀


原文鏈接:https://blog.csdn.net/yun6853992/article/details/121870328

?

★文末名片可以免費(fèi)領(lǐng)取音視頻開發(fā)學(xué)習(xí)資料,內(nèi)容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音視頻學(xué)習(xí)路線圖等等。

見下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

?

到了這里,關(guān)于音視頻學(xué)習(xí)之ffmpeg常用基礎(chǔ)命令整理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • FFmpeg進(jìn)階: 音視頻常用開源庫(kù)

    在音視頻應(yīng)用開發(fā)過程中我們會(huì)用到各種各樣的開源庫(kù)來提升開發(fā)效率,這里對(duì)各種常用的開源庫(kù)進(jìn)行了匯總,方便大家參考使用。 FFmpeg FFmpeg是一個(gè)開源的音視頻處理庫(kù)和工具集,可以進(jìn)行音視頻編碼、解碼、轉(zhuǎn)碼、剪輯等操作,支持眾多音視頻格式和協(xié)議。各個(gè)模塊: 封裝

    2023年04月10日
    瀏覽(18)
  • 音視頻 ffmpeg命令轉(zhuǎn)封裝

    保持編碼格式: 改變編碼格式: 修改幀率: 修改視頻碼率: 修改視頻碼率: 修改音頻碼率: 修改音視頻碼率: 修改視頻分辨率: 修改音頻采樣率: 推薦一個(gè)零聲學(xué)院項(xiàng)目課,個(gè)人覺得老師講得不錯(cuò),分享給大家: 零聲白金學(xué)習(xí)卡(含基礎(chǔ)架構(gòu)/高性能存儲(chǔ)/golang云原生/音

    2024年02月10日
    瀏覽(28)
  • 音視頻 ffmpeg命令參數(shù)說明

    主要參數(shù): -i 設(shè)定輸入流 -f 設(shè)定輸出格式(format) -ss 開始時(shí)間 -t 時(shí)間長(zhǎng)度 音頻參數(shù): -aframes 設(shè)置要輸出的音頻幀數(shù) -b:a 音頻碼率 -ar 設(shè)定采樣率 -ac 設(shè)定聲音的Channel數(shù) -acodec 設(shè)定聲音編解碼器,如果用copy表示原始編解碼數(shù)據(jù)必須被拷貝。 -an 不處理音頻 -af 音頻過濾器 視頻

    2024年02月10日
    瀏覽(24)
  • 音視頻 FFmpeg命令行搭建

    音視頻 FFmpeg命令行搭建

    以FFmpeg4.2.1 win32為例 解壓ffmpeg-4.2.1-win32-shared.zip 拷?可執(zhí)??件到C:Windows 拷?動(dòng)態(tài)鏈接庫(kù)到C:WindowsSysWOW64 注:WoW64 (Windows On Windows64)是?個(gè)Windows操作系統(tǒng)的?系統(tǒng),被設(shè)計(jì)?來處理許多在32-bit Windows和64-bit Windows之間的不同的問題,使得可以在64-bit Windows中運(yùn)?32-bit程序 推薦

    2024年02月13日
    瀏覽(23)
  • 音視頻 ffmpeg命令圖片與視頻互轉(zhuǎn)

    截取一張圖片 轉(zhuǎn)換視頻為圖片(每幀一張圖): 圖片轉(zhuǎn)換為視頻: 從視頻中生成GIF圖片 將 GIF 轉(zhuǎn)化為 視頻 推薦一個(gè)零聲學(xué)院項(xiàng)目課,個(gè)人覺得老師講得不錯(cuò),分享給大家: 零聲白金學(xué)習(xí)卡(含基礎(chǔ)架構(gòu)/高性能存儲(chǔ)/golang云原生/音視頻/Linux內(nèi)核) https://xxetb.xet.tech/s/VsFMs

    2024年02月10日
    瀏覽(20)
  • 音視頻 ffmpeg命令分類查詢

    命令參數(shù) 內(nèi)容 -version 顯示版本 -bsfs 顯示可用比特流filter -buildconf 顯示編譯配置 -formats 顯示可用格式(muxers+demuxers) -muxers 顯示可用復(fù)用器 -demuxers 顯示可用解復(fù)用器 -codecs 顯示可用編解碼器(decoders+encoders) -decoders 顯示可用解碼器 -encoders 顯示可用編碼器 -bsfs 顯示可用比特流f

    2024年02月12日
    瀏覽(24)
  • 音視頻 ffmpeg命令提取PCM數(shù)據(jù)

    提取PCM 推薦一個(gè)零聲學(xué)院項(xiàng)目課,個(gè)人覺得老師講得不錯(cuò),分享給大家: 零聲白金學(xué)習(xí)卡(含基礎(chǔ)架構(gòu)/高性能存儲(chǔ)/golang云原生/音視頻/Linux內(nèi)核) https://xxetb.xet.tech/s/VsFMs

    2024年02月09日
    瀏覽(31)
  • 音視頻 FFmpeg如何查詢命令幫助文檔

    ffmpeg:超快音視頻編碼器 ffplay:簡(jiǎn)單媒體播放器 ffprobe:簡(jiǎn)單多媒體流分析器 基本信息:ffmpeg -h 高級(jí)信息:ffmpeg -h long 所有信息:ffmpeg -h full 所有信息:ffplay -h 所有信息:ffprobe -h ffmpeg/ffplay/ffprobe部分參數(shù)通用,部分參數(shù)不通用,在使用時(shí)需要注意 推薦一個(gè)零聲學(xué)院項(xiàng)目課,個(gè)

    2024年02月12日
    瀏覽(22)
  • 音視頻 ffmpeg命令直播拉流推流

    對(duì)于不是rtmp的協(xié)議 -c copy要謹(jǐn)慎使用 參數(shù):-re,表示按時(shí)間戳讀取文件 參考:Nginx搭建rtmp流媒體服務(wù)器(Ubuntu 16.04)https://www.jianshu.com/p/16741e363a77 推薦一個(gè)零聲學(xué)院項(xiàng)目課,個(gè)人覺得老師講得不錯(cuò),分享給大家: 零聲白金學(xué)習(xí)卡(含基礎(chǔ)架構(gòu)/高性能存儲(chǔ)/golang云原生/音視頻/

    2024年02月10日
    瀏覽(30)
  • 音視頻開發(fā)實(shí)戰(zhàn)03-FFmpeg命令行工具移植

    音視頻開發(fā)實(shí)戰(zhàn)03-FFmpeg命令行工具移植

    作為一個(gè)音視頻開發(fā)者,在日常工作中經(jīng)常會(huì)使用ffmpeg 命令來做很多事比如轉(zhuǎn)碼 ffmpeg -y -i test.mov -g 150 -s 1280x720 -codec libx265 -r 25 test_h265.mp4 ,水平翻轉(zhuǎn)視頻: ffmpeg -i src.mp4 -vf hflip -acodec copy -vcodec h264 -b 22000000 out.mp4 ,視頻截?。?ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 ou

    2024年02月16日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包