1.ffmpeg、ffplay、ffprobe命令使用


1.學前知識 

1.1視頻碼率值

碼率公式: 碼率(kbps)=文件大小(KB)*8/時間(秒)

所以碼率和視頻文件大小成正比的,不過碼率超過一定值后,人眼是看不出效果的.

 

接下來,我們便先來學習ffmpeg命令使用

 

2.ffmpeg常用命令使用

ffmpeg命令- 用於轉碼的應用程序, 也可以從url/現場音頻/視頻源抓取輸入源

參考:http://ffmpeg.org/ffmpeg.html

常用參數使用

主要參數

  • -i 設定輸入流
  • -f 設定輸出格式
  • -ss 00:00:15 從制定時間開始轉換(如果不加:則表示為秒,比如-ss 70,表示從第70秒開始)
  • -t 00:01:15 設置輸出的視頻時長時間(如果不加:則表示為秒,比如-t 110,表示110秒)
  • -y 覆蓋已有文件
  • -fs limit_size  設置文件大小上限

視頻參數

  • -b:v 640k設定視頻碼率為640k,默認為200Kbit/s
  • -minratee 600k 設定視頻碼率最小閾值為700k
  • -maxrate 700k 設定視頻碼率最大閾值為700k
  • -r 60 設定幀速率fps為60,默認為25
  • -s 720x352 設定畫面的寬與高為720X352
  • -aspect 16:9 設定畫面的比例為16:9 (也可以使用1.3333, 1.7777)
  • -vn 不處理視頻(比如只提取音頻的時候)
  • -vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器(比如-vcodec codec,表示使用輸入流的格式, -vcodec xvid表示使用XVID編碼壓縮視頻)
  • -vf scale=960:540 將輸入的視頻壓縮至960X540輸出,如果寫為960:-1,則輸出時保持原始的寬高比

音頻參數

  • -ar 22500 設定采樣率(audio rate)為22.5khz (單位:Hz),PSP只認24000
  • -b:a 640k 設定音頻碼率為640k,默認為200Kbit/s
  • -ac 2 設定聲音的Channel數為2(1就是單聲道,2就是立體聲)
  • -acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器(比如-acodec codec,表示使用輸入流的格式, -acodec aac表示使用aac編解碼)
  • -an 不處理音頻(比如只提取視頻的時候)

示例命令如下所示:

ffmpeg –h //打開幫助

ffmpeg -i input.avi -b:v 640k output.ts          //轉換為ts視頻文件

ffmpeg -i test.mp4 -f s16le out.pcm         //提取原始音頻數據,s16le表示(signed 16 bits little endian, 有符號 16 位小端)

ffmpeg -i v1080.mp4 -t 10 -s 240x128 -pix_fmt yuv420p out240x128.yuv //提取yuv420p數據,時長10s
ffmpeg
-i test.mp4 -vn music.aac //提取出音頻文件 ffmpeg -i test.mp4 -vn music.aac //提取出音頻文件 ffmpeg -i input.mp4 -vcodec copy -an output.mp4 //輸出的視頻取消掉音頻流 //-i input.avi:表示輸入文件為input.avi //-b:v 640k:設置輸出的視頻文件碼率值 // output.ts:生成的文件名稱 ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv //-an:取消output.ts視頻文件的音頻流 ./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4 //將logo貼在左上角 ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4 //貼在右下角 ./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay0:H-h output.mp4 //貼在左下角, overlay W-w:0 貼在右上角 ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4 //添加過濾器,位置位於[0,0],w=220,h=90,厚度為100(厚度越大,越模糊).1:表示有一個綠色的矩形,設置為0就表示沒有 ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg // -r :設置幀數為1, -q:v:設置jpeg圖片質量為高質量(2),所以每隔一秒,存一張圖片下來 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg // - ss :設置開始時間,-t:設置time時間長度, -f 設定輸出格式 , 所以會從input.mp4的第20s時間開始,往下10s,每隔1s就抓一幀,總共會抓10幀。 ffmpeg -i input.mkv -y -f image2 -ss 10 -r 1 -t 1 –s 350x220 a.jpg //截取一張第10秒的352x220尺寸大小的,格式為jpg的a.jpg圖片

 

 

3.ffplay常用命令使用

ffplay命令- FFplay是一個非常簡單和可移植的媒體播放器,使用FFmpeg庫和SDL庫。它主要用作各種FFmpeg API的測試平台

參考: http://ffmpeg.org/ffplay.html

最簡單的播放命令: ffplay input.avi

播放的時候,支持的快捷鍵有:

  • q,ESC : 退出。
  • f : 切換全屏。
  • P,空格鍵 : 停下來。
  • m : 切換靜音。
  • 9, 0 : 分別減少和增加體積。
  • /, * : 分別減少和增加體積。
  • a : 在當前程序中循環音頻通道。
  • v : 循環視頻頻道。
  • t : 當前程序中的循環字幕通道。
  • c : 循環程序。
  • w:循環視頻過濾器或顯示模式。
  • s : 進入下一幀
  • left/right : 尋找向后/向前10秒。
  • down/up : 向后/前進1分鍾。
  • page down/page up : 尋找上一視頻/下一視頻。或者,如果沒有,請向后/向前尋求10分鍾。
  • 鼠標右鍵單擊 : 在文件中尋求與寬度分數相對應的百分比。
  • 鼠標左鍵雙擊 : 切換全屏。

 

4.ffprobe常用命令使用

ffprobe命令- ffprobe用來查看多媒體文件的信息

常用命令如下所示:

ffprobe -show_packets input.mp4
//獲取文件信息並顯示文件中每個幀的包信息(包含audio和video包),如下圖所示:

 

  • codec_type : 幀類型,如視頻包、音頻包等
  • stream_index : 多媒體的stream索引(上圖的stream0表示video數據,steam1表示audio數據)
  • pts(Presentation Time Stamp) : 顯示時間戳,這個時間戳用來告訴播放器該在什么時候顯示這一幀的數據。
  • pts_time : 將pts換算為時間后的值
  • dts(Decoding Time Stamp) : 解碼時間戳,表示在什么時候解碼的這一幀數據。
  • dts_time : 將dts換算為時間后的值
  • duration :  該幀占用的時間值(需要持續多久切換下一幀)
  • duration_time :  根據不同格式計算后的多媒體包占用的時間值
  • size : 該幀的大小
  • pos : 該幀所在的文件偏移位置
  • flags : 該幀標記,如關鍵包與非關鍵包的標記

 

ffprobe -show_packets  -show_data input.mp4
//獲取文件信息並顯示文件中每個幀的包信息以及包里的具體data信息

 

ffprobe -show_format input.mkv
//獲取文件信息以及格式信息,如下圖所示:

 

  • nb_streams : 打開的視頻文件中流的數量,一般為2,表示音頻流和視頻流
  • nb_programs : 節目數
  • format_name : 文件封裝格式名稱,  該文件的格式是Matroska,webm(MKV的全稱)格式
  • format_long_name : 文件封裝格式具體的名稱
  • start_time : 起始時間
  • duration : 視頻總時長
  • size : 文件大小
  • bit_rate : 碼率, 碼率公式為 碼率(kbps)=文件大度小(KB)*8/時間(秒)
  • probe_score : 探測出的視頻評分,100是最大的分數,這意味着FFmpeg確信格式是真實的

 

ffprobe -show_streams input.mkv
//獲取視頻文件中流的具體信息,比如音頻采樣率、視頻尺寸、幀率等

 

5.視頻解碼步驟

首先將讀取視頻封裝,然后通過不同的封裝格式讀取出視頻碼流(比如:h.264、mpeg4等),然后再通過視頻碼流解碼出yuv

比如mkv視頻: mkv->h.264->yuv 

 

下章學習: 5.FFMPEG-Qt移植ffmpeg、ffmpeg結構體介紹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM