ffprobe,ffplay ffmpeg常用的命令列命令

Link913發表於2018-01-25

github地址

ffprobe

  • 檢視媒體檔案資訊

      ffprobe 檔案
    複製程式碼

我們先來檢視一個音訊檔案

ffprobe命令列mp3檔案輸出結果

我們可以從上圖第一行看到音訊檔案的播放時長,開始播放時間,以及檔案的位元率.第二行可以看出編碼格式是mp3,取樣率是44.1khz,取樣表示格式是SInt16(short)的planner(平鋪格式),這路流的位元率是320kb/s.

接下來我們來檢視一個視訊檔案

ffprobe命令列mkv檔案輸出結果

我們可以看出這個mkv的encoder是Lavf58.2.100,Lavf表示的是FFmpeg的輸出檔案,後面的代號表示FFmpeg的版本號.時間長度是23分39秒,從零秒開始播放,整個檔案的位元率是1157kb/s.

再來看視訊流,編碼方式是H264,每一幀都是YUV420P的格式,解析度是1440*810,每秒24幀.

再來看看音訊流,編碼方式是aac(封裝格式是HE-AACv2),取樣率是44.1khz.

  • ffprobe輸出格式資訊

輸出檔案的格式資訊(包括時長,檔案大小,格式資訊等等)

	ffprobe -show_format 檔案路徑
複製程式碼

以json格式輸出每個流最詳細的資訊,例如視訊寬高資訊,是否有B幀,視訊幀的總數目,編碼格式,顯示比例,音訊的省道,編碼格式等等.

	ffprobe -print_format json -show_streams 檔案路徑
複製程式碼

顯示幀資訊

	ffprobe -show_frames 檔案路徑
複製程式碼

檢視包資訊

	ffprobe -show_packets 檔案路徑
複製程式碼
  • ffplay命令列

播放音視訊檔案

	ffplay 檔案路徑
複製程式碼

可以利用鍵盤方向鍵操作,w是繪製波形,按s鍵則進入frame-step模式,按一次就會展示下一幀影象

迴圈播放

	ffplay 檔案路徑 -loop 迴圈次數
複製程式碼

播放指定流

	音訊
	ffplay 檔案路徑 -ast 流數字
	//視訊
	ffplay 檔案路徑 -vst 流數字
複製程式碼

播放裸資料

	音訊
	ffplay 原始檔案(pcm檔案) -f 格式 -channels 聲道數 -ar 取樣率
	視訊
	ffplay 原始格式(例如-f rawvideo) 格式(例如-pixel_format yuv420p) 寬高(例如-s 480*480) 原始檔案(yuv)
	RGB
	ffplay -f rawvideo -pixel_format rgb24 -s 480*480 texture.rgb
複製程式碼

上面的引數必須設定正確否則無法播放

ffplay對齊方式(音畫同步)的設定

	ffpaly 檔案路徑 -sync audio //以音訊為基準
	ffpaly 檔案路徑 -sync video //視訊
	ffpaly 檔案路徑 -sync ext   //外部時鐘
複製程式碼
  • ffmpeg的命令列

通用引數

[更多請參考](http://blog.csdn.net/maopig/article/details/6610257)	
-f fmt	指定格式(音訊或視訊格式)
-i filename	指定輸入檔名,在linux下當然也能指定:0.0(螢幕錄製)或攝像頭
-y	覆蓋已有檔案
-t duration	記錄時長為
-fs limit_size 設定檔案大小上限
-ss time_off	從指定的時間(s)開始, [-]hh:mm:ss[.xxx]的格式也支援
-re 代表按照幀率傳送,作為推流工具一定要加入引數,否則ffmpeg會按照最高速率向流媒體伺服器不停傳送資料
複製程式碼

視訊引數

-b 指定位元率(bits/s),似乎ffmpeg是自動VBR的,指定了就大概是平均位元率
-bitexact    使用標準位元率
-vb    指定視訊位元率(bits/s)
-vframes number    設定轉換多少楨(frame)的視訊
-r rate    幀速率(fps) (可以改,確認非標準楨率會導致音畫不同步,所以只能設定為15或者29.97)
-s size    指定解析度 (320x240)
-aspect aspect    設定視訊長寬比(4:3, 16:9 or 1.3333, 1.7777)
-croptop size    設定頂部切除尺寸(in pixels)
-cropbottom size    設定底部切除尺寸(in pixels)
-cropleft size    設定左切除尺寸 (in pixels)
-cropright size    設定右切除尺寸 (in pixels)
-padtop size    設定頂部補齊尺寸(in pixels)
-padbottom size    底補齊(in pixels)
-padleft size    左補齊(in pixels)
-padright size    右補齊(in pixels)
-padcolor color    補齊帶顏色(000000-FFFFFF)
-vn    取消視訊
-vcodec codec    強制使用codec編解碼方式('copy' to copy stream)
-sameq    使用同樣視訊質量作為源(VBR)
-pass n    選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計資訊,第二遍生成精確的請求的位元速率
-passlogfile file    選擇兩遍的紀錄檔名為file
-newvideo    在現在的視訊流後面加入新的視訊流	
複製程式碼

高階視訊選項

-pix_fmt format    set pixel format, 'list' as argument shows all the pixel formats supported
-intra    僅適用幀內編碼
-qscale q    以<數值>質量為基礎的VBR,取值0.01-255,約小質量越好
-loop_input    設定輸入流的迴圈數(目前只對影象有效)
-loop_output    設定輸出視訊的迴圈數,比如輸出gif時設為0表示無限迴圈
-g int    設定影象組大小
-cutoff int    設定截止頻率
-qmin int    設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31
-qmax int    設定最大質量
-qdiff int    量化標度間最大偏差 (VBR)
-bf int    使用frames B 幀,支援mpeg1,mpeg2,mpeg4	
複製程式碼

音訊引數

-ab    設定位元率(單位:bit/s,也許老版是kb/s)前面-ac設為立體聲時要以一半位元率來設定,比如192kbps的就設成96,轉換 預設位元率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上。
-aframes number    設定轉換多少楨(frame)的音訊
-aq quality    設定音訊質量 (指定編碼)
-ar rate    設定音訊取樣率 (單位:Hz),PSP只認24000
-ac channels    設定聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質的DVDrip就可以用2
-an    取消音訊
-acodec codec    指定音訊編碼('copy' to copy stream)
-vol volume    設定錄製音量大小(預設為256) <百分比> ,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍
-newaudio    在現在的音訊流後面加入新的音訊流
複製程式碼

字幕引數

-sn    取消字幕
-scodec codec    設定字幕編碼('copy' to copy stream)
-newsubtitle    在當前字幕後新增
-slang code    設定字幕所用的ISO 639編碼(3個字母)
Audio/Video 抓取選項:
-vc channel    設定視訊捕獲通道(只對DV1394)
-tvstd standard    設定電視標準 NTSC PAL(SECAM)	
複製程式碼

下面會來舉一些例子

列出ffmpeg支援的所有格式

ffmpeg -formats
複製程式碼

剪下一段媒體檔案

ffmpeg -i input.mp4 -ss 00:00:50.0 -codec copy -t 20 output,mp4
複製程式碼

將檔案從50秒開始剪下20秒,輸入到新檔案,-ss是指定時間,-t是指定時長 提取一個視訊中的音訊檔案

ffmpeg -i input.mp4 -vn -acodec copy output.m4a
複製程式碼

使一個視訊中的音訊靜音

ffmpeg -i input.mp4 -an -vcodec copy output.mp4
複製程式碼

從MP4檔案中到處H264裸流

ffmpeg -i output.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb output.h264
複製程式碼

使用aac和h264檔案生成mp4檔案

ffmpeg -i input.aac -i input.h264 -acodec copy -bsf:a aac_adtstoasc -vcodec copy -f mp4 output.mp4
複製程式碼

對音訊檔案的編碼做轉換

ffmpeg -i input.wav -acodec libfdk_aac output.aac
複製程式碼

從wav檔案匯出pcm裸資料

ffmpeg -i input.wav -acodec pcm_s16le -f s16le output.pcm
複製程式碼

將mp4匯出為gif,引數設定為寬度100,幀率10,只處理前五秒

ffmpeg -i input.mp4 -vf sacle=100:-1 -t 5 -r 10 output.gif
複製程式碼

將視訊畫面生成圖片,引數為每四秒擷取一張,生成縮圖

ffmpeg -i input.mp4 -r 0.25 frames_%04d.png
複製程式碼

將兩路聲音合併,例如新增背景音樂,輸出時間是以較短的為準

ffmpeg -i input.wav -i bgm.wav -filter_complex amix=inputs=2:deration=shortest output.wav
複製程式碼

視訊新增水印,視訊寬度為100,水印寬度為20

ffmpeg -i input.mp4 -i image.png -filter_complex '[0:v][1:v]overlay=100-20-10:10:1[out]' -map '[out]' output.mp4
複製程式碼

將視訊推送到流媒體伺服器(-re表示實際速度)

ffmpeg -re -i input.mp4 -acodec copy-vcodec copy -f flv rtmp://xxx
複製程式碼

將流媒體伺服器的流dump到本地

ffmpeg -i http://xxx.flv -acodec copy -vcodec copy -f flv output.flv
複製程式碼

相關文章