多媒體視頻處理工具FFmpeg有非常強大的功能包括視頻採集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。
這裏主要介紹一下FFmpeg的一些常用參數,並且主要功能:截取視頻、視頻格式轉換、視頻分辨率轉換、視頻合併、提取視頻、提取音頻、提取圖片、視頻水印處理等。
ffmpeg參數:
一、公共參數:
-i 設定輸入流
-y 表示如果輸出文件已存在則覆蓋
-f 設定輸出格式 指定文件格式(ffmpeg -formats可以列舉支持的format)
-b 指定視頻和音頻加起來的碼率
-q:v表示存儲jpeg的圖像質量,一般2是高質量。 格式:-q:v 2 -f image2
-ss 開始時間 格式:00:00:02或者2.00
-t 表示截取多長的時間(持續時間)
-to 截到視頻的哪個時間點結束(時間點)
-async 多少楨同步
-max_muxing_queue_size 增大容器封裝隊列大小(視頻處理出現報錯時) 格式:-max_muxing_queue_size 1024
二、視頻參數
-re 根據文件真實的幀率來讀取文件,生成實時刷新的直播流 格式:-re
-r 設定幀速率,單位爲Hz,默認爲25 格式:-r 29(表示每一秒幾幀)
-s 設定畫面的寬與高(幀尺寸) 格式:-s 720x1280
–b:v 表示視頻平均碼率(更改碼率的速度最慢) 格式:–b:v 1500k
-bufsize 用於設置碼率控制緩衝器的大小 格式:-bufsize 1500k
-maxrate 碼率波動,不要超過一個閾值 格式:-maxrate 1800k
-minrate 碼率波動,不要低於一個閾值 格式:-minrate 1300k
-aspect 設定畫面的比例 格式:-aspect 16:9 或者-aspect 1.7777
-vf scale=iw*0.9:ih*0.9或者-vf scale=720:1280或者scale=720:-1 -vf是調用video filter,這裏用了scale filter來改變分辨率進行轉碼
-vn 不處理視頻
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器 -c:v效果一樣
-vcodec copy 表示使用跟原視頻一樣的視頻編解碼器。
-c:v libx264 表示對原視頻進行libx264重新編碼
-pass n 選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計信息,第二遍生成精確的請求的碼率 格式:-pass 1
-bsf:v h264_mp4toannexb=-vbsf h264_mp4toannexb 把mp4格式轉換爲ts格式
三、音頻參數
–ar 表示音頻採樣率,單位爲Hz; 格式:–ar 44100
–ab 音頻數據流量 位速 格式:–ab 128k
-ac 設定聲音的Channel數
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器 -c:a效果一樣
-acodec copy表示使用跟原視頻一樣的音頻編解碼器。
-an 不處理音頻
-vol 200%的音量 格式:-vol 200
注意一個問題,ffmpeg 在切割視頻的時候無法做到時間絕對準確,因爲視頻編碼中關鍵幀(I幀)和跟隨它的B幀、P幀是無法分割開的,否則就需要進行重新幀內編碼,會讓視頻體積增大。所以,如果切割的位置剛好在兩個關鍵幀中間,那麼 ffmpeg 會向前/向後切割,所以最後切割出的 chunk 長度總是會大於等於應有的長度。