ffprobe
-
檢視媒體檔案資訊
ffprobe 檔案 複製程式碼
我們先來檢視一個音訊
檔案
我們可以從上圖第一行看到音訊檔案的播放時長,開始播放時間,以及檔案的位元率.第二行可以看出編碼格式是mp3,取樣率是44.1khz,取樣表示格式是SInt16(short)的planner(平鋪格式),這路流的位元率是320kb/s.
接下來我們來檢視一個視訊
檔案
我們可以看出這個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
複製程式碼