3、ffplay、ffmpeg平常食用的簡單姿式

[TOC]git

開始前的BB

這三個工具來講 ffplay和ffmpeg是很經典的兩個,ffprobe平常用的比較少,ffplay和ffmpeg那可真是平常使用,下面只列舉了一些日常常常用到的命令行,以及ffmpeg命令行幫助的方法github

碼農第三滾坑委提醒您:裝逼千萬條,基礎第一條;不敲命令行,臉上兩行淚安全

請先繫好安全帶以及準備一個視頻文件(舒適提示 最好找個比較好看點的視頻,由於調試過程當中會一直直直直直直看到這個視頻,換視頻又太費時間,因此我建議你們開始的時候找個一比較耐看的視頻 好比 點擊下載) bash

願天堂沒有愛情

舒適提示 請用命令行進入ffmpeg下載解壓後的目錄的bin目錄下,好比:網絡

飆車ing...

幫助命令

幫助命令的幫助

ffmpeg -h 這個是最簡單的幫助命令ide

這個部分 上面configuration是說當前用的ffmpeg的編譯設置選項,--disable-XXX就是禁用XXX的意思 --enable-XXX就是啓用XXX的意思,相信憑你們的機制一眼就看懂了

中間的部分是每一個組件的詳細版本號工具

usage 是說明使用ffmpeg命令行的格式,也就是 ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...oop

簡單來說就是優化

ffmpeg [一些選項] [[輸入文件的選項] -i 輸出文件的路徑] {[輸出文件的選項] 輸出文件路徑}ui

你們若是對於類Unix命令行不太熟悉,能夠選擇先記下這個格式,下面咱們寫的時候再看

獲取幫助 -h 打印基本的選項 -h long 這個選項會打印的很是全,通常控制檯顯示不下 建議輸出爲文本看,好比ffmpeg -h full > ffmpeg_full.log -h type=name 這個type的選項能夠爲decoder/encoder/demuxer/muxer/filter/bsf中的任意一個,name的話就是裏面一個詳細的格式,經過這個命令能夠來查看是否支持指定格式,好比 ffmpeg -h decoder=h264

這邊顯示的支持h264的解碼器的列表 除自帶的之外,還開啓了X264的解碼支持

查看支持的formats/decoders

查看支持的formats/decoders等:

//支持的封裝格式(合併&&分離)
ffmpeg -formats 
//合併
ffmpeg -muxers
//分離
ffmpeg -demuxers

//支持的過濾器
ffmpeg -filters

//支持的編解碼器
ffmepg -codecs
//支持的解碼器
ffmpeg -decoders
//支持的編碼器
ffmpeg -encoders

//支持的硬編解列表
ffmpeg -hwaccels

//位流格式
ffmpeg -bsfs

//像素格式
ffmpeg -pix_fmts

//採樣格式
ffmpeg -sample_fmts
複製代碼

查看具體支持某一種格式,相似這樣

ffmpeg -h muxer=flv
複製代碼

若是不支持 就是unknown了

其餘的還有

ffmpeg -h filter=atempo

ffmpeg -h encoder=libx264
複製代碼

之類
幫助的用法大概就是這樣

FFPlay

命令格式

ffplay 是一個播放器 他的命令格式爲: ffplay [options] [input_url]

主要命令

主要選項有

選項	說明
-x width	強制顯示寬帶。
-y height	強制顯示高度。
-s size	幀尺寸 設置顯示幀存儲(WxH格式),僅適用於相似原始YUV等沒有包含幀大小(WxH)的視頻。該參數已經被廢棄,請嘗試用-video_size代替
-fs	以全屏模式啓動。
-an	禁用音頻(不播放聲音)
-vn	禁用視頻(不播放視頻)
-sn	禁用字幕(不顯示字幕)
-ss pos	根據設置的秒進行定位拖動,注意時間單位:好比'55' 55 seconds, '12:03:45' ,12 hours, 03 minutes and 45 seconds, '23.189' 23.189 second
-t duration	設置播放視頻/音頻長度,時間單位如 -ss選項
-bytes	按字節進行定位拖動。
-seek_interval interval	自定義左/右鍵定位拖動間隔(以秒爲單位),默認值爲10秒
-nodisp	關閉圖形化顯示窗口,視頻將不顯示
-noborder	無邊框窗口
-volume vol	設置起始音量。音量範圍[0 ~100]
-f fmt	強制使用設置的格式進行解析。好比-f s16le
-window_title title	設置窗口標題(默認爲輸入文件名)
-loop number	設置播放循環次數
-showmode mode	設置顯示模式,可用的模式值:0 顯示視頻,1 顯示音頻波形,2 顯示音頻頻譜。缺省爲0,若是視頻不存在則自動選擇2
-vf filtergraph	設置視頻濾鏡
-af filtergraph	設置音頻濾鏡
複製代碼

高級命令

高級選項

-pix_fmt format	格式設置像素格式。此選項已被棄用,有利於私有選項,try -pixel_format
-stats	打印多個回放統計信息,包括顯示流持續時間,編解碼器參數,流中的當前位置,以及音頻/視頻同步差值。默認狀況下處於啓用狀態,要顯式禁用它則須要指定-nostats。
-fast	非標準化規範的多媒體兼容優化
-genpts	生成pts。
-sync type	同步類型 將主時鐘設置爲audio(type=audio),video(type=video)或external(type=ext),默認是音頻爲主時鐘。
-ast audio_stream_specifier	指定音頻流索引,好比-ast 3,播放流索引爲3的音頻流
-vst video_stream_specifier	指定視頻流索引,好比-vst 4,播放流索引爲4的視頻流
-sst subtitle_stream_specifier	指定字幕流索引,好比-sst 5,播放流索引爲5的字幕流
-autoexit	視頻播放完畢後退出。
-exitonkeydown	鍵盤按下任何鍵退出播放
-exitonmousedown	鼠標按下任何鍵退出播放
-codec:media_specifier codec_name	強制使用設置的多媒體解碼器,media_specifier可用值爲a(音頻), v(視頻)和s字幕。好比-codec:v h265 強制視頻採用h265解碼
-acodec codec_name	強制使用設置的音頻解碼器進行音頻解碼
-vcodec codec_name	強制使用設置的視頻解碼器進行視頻解碼
-scodec codec_name	強制使用設置的字幕解碼器進行字幕解碼
-autorotate	根據文件元數據自動旋轉視頻。默認狀況下啓用,若需禁用則使用-noautorotate
-framedrop	若是視頻不一樣步則丟棄視頻幀。當主時鐘非視頻時鐘時默認開啓。若需禁用則使用 -noframedrop
-infbuf	不限制輸入緩衝區大小。儘量快地從輸入中讀取儘量多的數據。播放實時流時默認啓用,若是未及時讀取數據,則可能會丟棄數據。此選項將不限制緩衝區的大小。若需禁用則使用-noinfbuf
複製代碼

播放控制

播放控制

選項	說明
q, ESC	退出播放
f	全屏切換
p, SPC	暫停
m	靜音切換
9, 0	9減小音量,0增長音量
/, *	/減小音量,*增長音量
a	循環切換音頻流
v	循環切換視頻流
t	循環切換字幕流
c	循環切換節目
w	循環切換過濾器或顯示模式
s	逐幀播放
left/right	向後/向前拖動10秒
down/up	向後/向前拖動1分鐘
page down/page up	拖動上一個/下一個。或者若是沒有章節向後/向前拖動10分鐘。
鼠標右鍵單擊	拖動與顯示寬度對應百分比的文件進行播放
鼠標左鍵雙擊	全屏切換
複製代碼

舉個🌰?

BB這麼多 來幾個使用的例子

播放本地文件

最直接的: ffplay test_video.mp4

這邊咱們看到,在命令行裏輸出裏一些有關視頻的信息,在新的窗口裏已經播放出來了視頻

咱們加上一些上面的參數後 也能夠這種播 ffplay -window_title "mirs ffplay" -ss 2 -t 10 -autoexit test.mp4

效果你們本身去根據上面的提示和本身實際動手操做一下,我這就不說了

啦啦啦 打我啊

播放網絡流

食用方式與樓上同樣

ffplay rtmp://live.hkstv.hk.lxdns.com/live/hks1

(偷懶是真滴舒服)

舒服

視頻旋轉播放

ffplay -i test_video.mp4 -vf transpose=1

視頻反轉播放

(鏡面) ffplay test_video.mp4 -vf hflip

(上下) ffplay test_video.mp4 -vf vflip

ps:視頻旋轉和反轉能夠組合食用 (據說巧克力和牛奶更配喲)

變速播放
音頻變速視頻不變速 (1.5倍食用更佳)

ffplay -i test_video.mp4 -af atempo=1.5

視頻變速音頻不變速

ffplay -i test_video.mp4 -vf setpts=PTS/1.5

音視頻一塊兒變速(3倍!!!)

ffplay -i test_video.mp4 -vf setpts=PTS/3 -af atempo=3

效果本身運行看 (留個疑問 根據參數猜原理)

FFmpeg

終於到ffmepg了,咱們首先來吧他經常使用的參數分個類

經常使用參數

主要參數:
-i 設定輸入流
-f 設定輸出格式
-ss 開始時間
-t   時間長度

視頻參數:
-vframes 設置要輸出的視頻幀數
-b 設定視頻碼率,默認爲200Kbit/s
-b:v 視頻碼率
-r 設定幀速率,默認爲25
-s 設定畫面的寬與高
-aspect 設定畫面的比例
-vn 不處理視頻
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器
-vf 視頻濾波器

音頻參數:
-aframes 設置要輸出的音頻幀數
-b:a 音頻碼率
-ar 設定採樣率
-ac 設定聲音的Channel數
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器
-an 不處理音頻
-af 音頻濾波器
複製代碼

使用示例

分離視頻音頻流

分離音頻 ffmpeg -i test_video.mp4 -acodec copy -vn audio.aac 而後...

分離視頻 ffmpeg -i test_video.mp4 -vcodec copy -an video.mp4

提取H264

ffmpeg -i test_video.mp4 -vcodec copy -an test_copy.264

提取AAC

ffmpeg -i test_video.mp4 -acodec copy -vn test.aac

改變編碼格式

ffmpeg -i test_video.mp4 -vcodec copy -acodec copy test_copy.ts

修改幀率

ffmpeg -i test_video.mp4 -r 15 output.mp4

修改碼率

ffmpeg -i test_video.mp4 -b:v 1.5M output2.mp4

修改音頻碼率

ffmpeg -i test_video.mp4 -b:a 192k output2.mp4

修改音視頻碼率

ffmpeg -i test_video.mp4 -b:v 1.5M -b:a 192k output2.mp4

修改分辨率

ffmpeg -i test_video.mp4 -s 640x480 output.mp4

提取PCM

ffmpeg -i test.mp4 -f s16le audio.pcm

提取YUV

提取3秒 分辨率和原來的一致 ffmpeg -i test_video.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv 提取3秒 指定分辨率 ffmpeg -i test_video.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv

提取RGB

提取3秒數據,分辨率轉爲320x240 ffmpeg -i test_video.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb

RGB和YUV轉換

ffmpeg -s 968x544 -pix_fmt yuv420p -i yuv420p_orig.yuv -pix_fmt rgb24 orig.rgb

經常使用的命令和選項基本都在這邊了,能夠根據本身的需求去選擇不一樣的命令行實現功能

接下來,咱們就開始着手本身寫一個視頻播放器了(想一想是否是還有點小激動)

那擼多!啥事gay!

未完持續。。。

相關文章
相關標籤/搜索