1.ffmpeg、ffplay、ffprobe命令使用

来源:https://www.cnblogs.com/lifexy/archive/2020/05/11/12871270.html
-Advertisement-
Play Games

1.學前知識 1.1視頻碼率值 碼率公式: 碼率(kbps)=文件大度小(KB)*8/時間(秒) 所以碼率和視頻文件大小成正比的,不過碼率超過一定值後,人眼是看不出效果的. 接下來,我們便先來學習ffmpeg命令使用 2.ffmpeg常用命令使用 ffmpeg命令- 用於轉碼的應用程式, 也可以從u ...


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 -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 

 

下章學習: 移植到QT使用


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 迴圈結構有三個:while型迴圈、for型迴圈、do-while型迴圈 while型迴圈和for型迴圈都屬於當型迴圈,do-while型迴圈屬於直到型迴圈(少見)。 1.while型迴圈for型迴圈 結構: while(【布爾表達式】){ 【迴圈語句】; } 先運行【布爾表達式】,如果其值為真,執行 ...
  • 前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 時間序列 1、時間序列圖 時間序列圖用於可視化給定指標如何隨時間變化。在這裡,您可以瞭解1949年至1969年之間的航空客運流量如何變化。 # Import Data df ...
  • Spring 框架的核心特性是可以用於開發任何 Java 應用程式,但是在 Java EE 平臺上構建 web 應用程式是需要擴展的。 Spring 框架的目標是使 J2EE 開發變得更容易使用。 ...
  • 單例模式,是Java中比較常見的一個設計模式,也是我在面試時經常會問到的一個問題。 經過我的初步統計,基本上有60%左右的人可以說出2-4種單例的實現方式,有40%左右的人可以說出5-6種單例的實現方式,只有20%左右的人能夠說出7種單例的實現。 而只有不到1%的人能夠說出7種以上的單例實現。 其實 ...
  • 你是否有過這麼一段經歷,一直做著OA,CRM管理系統等傳統項目,簡歷技能開頭第一行,基本都是“Java基礎扎實”,然後下麵接著就是熟悉XXX。然後不斷列名詞,舉例一下: Java基礎扎實 熟悉Mysql… 熟悉Redis… 熟悉HTML/CSS/JS… 這個,是否就是你的簡歷套路??? 但是你發現, ...
  • 面試的時候,很多人都小心翼翼,如履薄冰,生怕自己說錯一句話,就錯失機會,擔心,面試緊張、卡殼、答不上來怎麼辦? 被面試官弔打,碾壓,是常態,畢竟大多數面試官工作經驗和技術都更加豐富嘛。 但是,術業有專攻,總有一些技術牛逼的程式員可以弔打、碾壓面試官! 本人經常隔段時間就偷偷投點簡歷,請假出去面試幾次 ...
  • 一個小伙伴最近參加某一線互聯網公司的面試,被問到了一些併發相關的問題,看看大家能否答出來: (1)synchronized的CPU原語級別是如何實現的? (2)無鎖、偏向鎖、輕量級鎖、重量級鎖有什麼差別,升級過程如何? (3)線程間通信,同機器進程間通信,跨機器進程間通信,各有什麼方法? (4)下列 ...
  • 先扯些這些內容: TCP/IP TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。 在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。 在應用層有: TCP包括FTP、HTTP、TELNET、SMTP等協議 UDP包括DN ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...