[TOC]git
這三個工具來講 ffplay和ffmpeg是很經典的兩個,ffprobe平常用的比較少,ffplay和ffmpeg那可真是平常使用,下面只列舉了一些日常常常用到的命令行,以及ffmpeg命令行幫助的方法github
碼農第三滾坑委提醒您:裝逼千萬條,基礎第一條;不敲命令行,臉上兩行淚
安全
請先繫好安全帶以及準備一個視頻文件(舒適提示 最好找個比較好看點的視頻,由於調試過程當中會一直直直直直直看到這個視頻,換視頻又太費時間,因此我建議你們開始的時候找個一比較耐看的視頻 好比 點擊下載) bash
舒適提示 請用命令行進入ffmpeg下載解壓後的目錄的bin目錄下,好比:網絡
ffmpeg -h
這個是最簡單的幫助命令ide
中間的部分是每一個組件的詳細版本號工具
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
查看支持的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 [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:視頻旋轉和反轉能夠組合食用 (據說巧克力和牛奶更配喲)
ffplay -i test_video.mp4 -af atempo=1.5
ffplay -i test_video.mp4 -vf setpts=PTS/1.5
ffplay -i test_video.mp4 -vf setpts=PTS/3 -af atempo=3
效果本身運行看 (留個疑問 根據參數猜原理)
終於到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
ffmpeg -i test_video.mp4 -vcodec copy -an test_copy.264
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
ffmpeg -i test.mp4 -f s16le audio.pcm
提取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
提取3秒數據,分辨率轉爲320x240 ffmpeg -i test_video.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb
ffmpeg -s 968x544 -pix_fmt yuv420p -i yuv420p_orig.yuv -pix_fmt rgb24 orig.rgb
經常使用的命令和選項基本都在這邊了,能夠根據本身的需求去選擇不一樣的命令行實現功能
接下來,咱們就開始着手本身寫一個視頻播放器了(想一想是否是還有點小激動)
未完持續。。。