【Python】ffmpeg模块处理视频、音频信息
多媒體視頻處理工具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
"coded_height":1280,?"coded_width":720,
–b:v 表示視頻平均碼率(更改碼率的速度最慢) ? ? ? 格式:–b:v 1500k
-bufsize 用于設置碼率控制緩沖器的大小?????????????格式:-bufsize 1500k?
-maxrate 碼率波動,不要超過一個閾值???????????????格式:-maxrate 1800k
-minrate 碼率波動,不要低于一個閾值 ? ? ? ? ? ? ? 格式:-minrate 1300k
-aspect 設定畫面的比例? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 格式:-aspect 16:9?或者-aspect 1.7777
"display_aspect_ratio":"16:9"
-sar 設定畫面的比例? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 格式:-sar 1:1
"sample_aspect_ratio":"1:1"
-vf scale=iw*0.9:ih*0.9或者-vf scale=720:1280或者scale=720:-1 ? ? -vf是調用video filter,這里用了scale filter來改變分辨率進行轉碼
-vf是-filter:v的簡寫,-filter指定過濾器,:v是流選擇器,表示對視頻流應用過濾器。scale=后面的參數是w:h
格式:-vf scale=320:240 ? ? ? ?設置具體的寬度和高度
格式:-vf scale=360:-1 ? ? ? ? 固定高度
格式:-vf scale=-2:720 ? ? ? ? 固定寬度
格式:-vf scale=iw*0.9:ih*0.9 ?原來寬的0.9倍,高的0.9倍
-vf crop=width:height:x:y ? ? ?視頻裁剪(其中 width和height表示裁剪后的尺寸,x:y 表示裁剪區域的左上角坐標)
-vf transpose=2 ? ? ? ? ? ? ? ?旋轉視頻(transpose默認0-逆時針和垂直翻轉,1-順時針旋轉90度,2-逆時針旋轉90度,3-順時針和垂直翻轉)
-filter_complex [0][1]hstack ? 水平拼接兩個視頻
-filter_complex [0][1]vstack ? 垂直拼接兩個視頻
-qp 23 ? ? ? ? ? ? ? ? ? ? ? ? 編碼質量(值越大,壓縮率越大,質量越低)
-crf 23 ? ? ? ? ? ? ? ? ? ? ? ?編碼質量(0-無損編碼,可用值是0~51;x264默認值是23(推薦 17~ 28))
-strict -2 ? ? ? ? ? ? ? ? ? ? 之前是實驗參數表示aac音頻編碼(使用FFmpeg自帶的aac音頻編碼要帶上-strict -2 參數就可以了)
-- 圖片+音頻合并成視頻
ffmpeg -r 15 -f image2 -loop 1 -i 輸入圖片.png -i 輸入音頻.mp3 -s 1920x1080 -pix_fmt yuvj420p -t 278 -vcodec libx264 輸出.mp4
-pix_fmt:指定圖片輸入格式(有yuv420,yuv444等各種格式)
-loop 1 :因為只有一張圖片所以必須加入這個參數
-t:這個是圖片轉換成視頻后持續的時間長度,必須指定,單位為秒,不然會無限制生成視頻時間長度;
-metadata:s:v:0 rotate=90
-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 長度總是會大于等于應有的長度。
總結
以上是生活随笔為你收集整理的【Python】ffmpeg模块处理视频、音频信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django View和URL
- 下一篇: 【Java】使用前准备工作配置环境变量