ffmpeg濾鏡使用

ffmpeg實現畫中畫效果

FFmpeg中,可以通過overlay將多個視頻流、多個多媒體采集設備、多個視頻文件合并到一個界面中,生成畫中畫的效果

FFmpeg 濾鏡 overlay 基本參數

  1. x和y x坐標和Y坐標

  2. eof action 遇到 eof表示時的處理方式,默認為重復。
    repeat(值為 0):重復前一幀。
    endcall(值為 1):停止所有的流
    pass(值為 2):保留主圖層

  3. shortest 終止最短的視頻時全部終止(默認false)

  4. format 設置 output 的像素格式,默認為 yuv420。
    yuv420(值為 0)
    yuv422(值為 1)
    yuv444(值為 2)
    rgb (值為 3)

針對如上參數做詳細分析:

  1. eof action為1時,當子畫面時長較主畫面短時,當子畫面先播放完時此時主畫面也停止播放
  2. eof action為2時,子畫面先播完子畫面直接消失,保留主畫面繼續播放
  3. 設置shortest以兩個畫面誰的時長短為準終止所有視頻流播放

背景:現在有2個mp4文件,一個文件分辨率是854x480,另一個是320x240,想要通過ffmpeg實現把多路視頻流進行拼接,實現不同效果

ffmpeg -i input_854x480.mp4 -i input_320x240.mp4 -filter_complex "[1:v]scale=240:-1,setsar=1[small]; [0:v][small]overlay=W-w-10:H-h-10:shortest=1" -c:v libx264 -preset fast -c:a copy output_overlay.mp4

overlay 濾鏡將 ?320x240? 的小視頻作為畫中畫展示在右下角,如下圖所示:

在這里插入圖片描述
下面針對各個參數做解釋:

  1. 縮放小視頻(320x240 → 240x135)
[1:v]scale=240:-1,setsar=1[small]
  • scale=240:-1?:將小視頻寬度縮放到 240px,高度按比例自適應(原始寬高比 320:240=4:3 → 縮放后 240x135,保持 16:9)
  • setsar=1?:強制設置像素寬高比為 1:1(防止播放時變形)
  1. 疊加到主視頻右下角
[0:v][small]overlay=W-w-10:H-h-10:shortest=1
  • W-w-10?:X 坐標 = 主視頻寬度 (854) - 小視頻寬度 (240) - 右邊距 (10px) → 854-240-10=604
  • H-h-10?:Y 坐標 = 主視頻高度 (480) - 小視頻高度 (135) - 下邊距 (10px) → 480-135-10=335
  • ?shortest=1?:以最短的輸入流時長為準(若兩路視頻時長不同)
  1. 其他參數
  • c:a copy?:直接復制主視頻的音頻流(若需混合兩路音頻,改用 amix 濾鏡)
  • ?-preset fast?:平衡編碼速度與壓縮率

ffmpeg視頻添加水印

圖片水印
在FFmpeg中為視頻添加圖片水印,可以使用 overlay 濾鏡。這個濾鏡允許你將一個視頻或圖片疊加到另一個視頻上,從而實現水印效果。以下是一個基本的示例:

ffmpeg -i input_854x480.mp4 -i 1.jpeg -filter_complex "overlay=10:10" output.mp4

示例中,overlay 濾鏡被用于將 1.jpeg 圖片疊加到 input_854x480.mp4視頻上。參數解釋如下:

  • overlay:指定水印的位置,以像素為單位。這里的 10:10 表示在視頻的左上角添加水印。
    你可以根據需要進行調整以滿足你的要求。如果你想要水印在視頻的不同時間段內逐漸出現或消失,你可以結合使用時間內置變量來實現,類似于之前提到的 drawtext 濾鏡的方法。

  • 測試問題
    實際測試發現圖片展示比較大而視頻分辨率較小導致畫面被整個占滿,考慮把圖片水印縮放后再疊加到視頻中。

  • 解決方案
    filter_complex濾鏡鏈中增加scale濾鏡調整水印尺寸,再通過overlay濾鏡疊加到視頻指定位置

ffmpeg -i input_854x480.mp4 -i 1.jpeg -filter_complex "[1:v]scale=iw*0.2:ih*0.2[wm];[0:v][wm]overlay=10:10" output_log_picture.mp4

?關鍵參數說明?

  • [1:v]scale=iw0.2:ih0.2[wm]
    [1:v] 表示第二個輸入(水印圖片)的視頻流
    iw0.2:ih0.2代表將水印圖片按原尺寸比例縮放至20%
    [wm]是縮放后水印流的別名,供后續overlay濾鏡使用

  • [0:v][wm]overlay=10:10
    將主視頻流 [0:v] 和縮放后的水印流 [wm] 疊加,位置在左上角坐標 (10,10) 處

    效果如下:
    在這里插入圖片描述

另外,你可以使用 x 和 y 參數來進一步調整水印的位置,以及使用 alpha 參數來設置水印的透明度。以下是一個更復雜的示例:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=x=main_w-overlay_w-10:y=10:alpha=0.5" output.mp4

在這個示例中,水印被放置在視頻的右上角,同時設置了透明度為0.5。

ffmpeg多宮格展示多路視頻流

將三路視頻流通過hstack濾鏡水平方向展示,首先需要通過scale濾鏡將三個視頻流統一分辨率大小

ffmpeg -i input1.mkv -i input2.mp4 -i input3.flv -filter_complex "[0:v]scale=640:360[out1];[1:v]scale=640:360[out2];[2:v]scale=640:360[out3];[out1][out2][out3]hstack=inputs=3" output_hstack_multivideo.mp4

參數解釋:

  • [0:v]scale=640:360[out1]
    [0:v]代表第一路輸入視頻流
    scale=640:360 通過scale濾鏡調整分辨率
    [out1]是第一路視頻流別名,后續會用到
    其他流同樣
  • [out1][out2][out3]hstack=inputs=3
    hstack濾鏡指定輸入流個數為3
    在這里插入圖片描述

進階想要展示2x2效果

ffmpeg -i input1.mkv -i input2.mp4 -i input3.flv -i input4.mp4 -filter_complex "nullsrc=size=640x480[base];[0:v]scale=320x240[upperleft];[1:v]scale=320x240[upperright];[2:v]scale=320x240[lowerleft];[3:v]scale=320x240[lowerright];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][upperright]overlay=shortest=1:x=320[tmp2];[tmp2][lowerleft]overlay=shortest=1:y=240[tmp3];[tmp3][lowerright]overlay=shortest=1:x=320:y=240" out_2x2.mp4
  • overlay=shortest=1 確保以最短輸入流的時長為準輸出,避免因時長不一致導致黑屏

通過nullsrc 創建 overlay畫布,畫布大小 640:480,使用[0:wI[1:v][2:1[3:]將輸入的4個視頻流去除,分別進行縮放處理,然后基于nulsrc 生成的畫布進行視頻平鋪,命令中自定義 upperleft,upperright,lowerleft,lowerright 進行不同位置平鋪

效果如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74316.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenAI即將開源!DeepSeek“逼宮”下,AI爭奪戰將走向何方?

OpenAI 終于要 Open 了。 北京時間 4 月 1 日凌晨,OpenAI 正式宣布:將在未來幾個月內開源一款具備推理能力的語言模型,并開放訓練權重參數。這是自 2019 年 GPT-2 部分開源以來,OpenAI 首次向公眾開放核心模型技術。 【圖片來源于…

貪心算法,其優缺點是什么?

什么是貪心算法? 貪心算法(Greedy Algorithm)是一種在每一步選擇中都采取在當前狀態下最優(局部最優)的選擇,從而希望導致全局最優解的算法策略。 它不像動態規劃那樣考慮所有可能的子問題,而是做出局部最優選擇,依賴這些選擇來…

python string 類型字符拼接 +=的缺點,以及取代方法

在Python中,使用進行字符串拼接雖然語法簡單,但在性能和代碼維護方面存在明顯缺陷。以下是詳細分析及替代方案: 一、的缺點 性能低下 內存分配問題:字符串在Python中不可變,每次操作會創建新字符串對象,導…

web前端開發-JS

web前端開發-JS 什么是JavaScript Web標準也稱網頁標準,由一系列的標準組成,大部分由W3C(World Wide Web Consortium,萬維網聯盟)負責制定。三個組成部分: HTML:負責網頁的結構(頁面元素和內容)。CSS:負責網頁的表現(頁面元素的外觀、位置等頁面樣式,如:顏色、大小等)。JavaS…

Turtle綜合案例實戰(繪制復雜圖形、小游戲)

在學習了 Turtle 基本的繪圖技巧后,我們可以通過結合多個概念和技巧,繪制復雜的圖形或實現簡單的小游戲。本章將介紹兩個實戰案例: 繪制復雜圖形:結合前面所學的知識,繪制一個精美的多層次復雜圖案。簡單的游戲:利用 Turtle 實現一個簡單的小游戲——蛇形游戲,這是一個經…

Python設計模式:克隆模式

1. 什么是克隆模式 克隆模式的核心思想是通過復制一個已有的對象(原型)來創建一個新的對象(克隆)。這種方式可以避免重復的初始化過程,從而提高效率。克隆模式通常涉及以下幾個方面: 原型對象&#xff1a…

邏輯漏洞之越權訪問總結

什么是越權訪問漏洞? “越權訪問漏洞” 是 “邏輯漏洞” 的一種,是由于網站系統的權限校驗的邏輯不夠嚴謹,沒有對用戶權限進行嚴格的身份鑒別,導致普通權限的用戶做到了其它普通用戶或管理員才能完成的操作,稱之為“越…

超短波通信模擬設備:增強通信能力的關鍵工具

在全球信息化戰爭的背景下,通信系統扮演著至關重要的角色。為確保通信系統的穩定性和抗干擾能力,超短波通信模擬設備應運而生,為軍事訓練和通信干擾任務提供強大的支持。 設備特點及優勢 便攜性:設備體積小、重量輕,…

C++STL——容器-vector(含部分模擬實現,即地層實現原理)(含迭代器失效問題)

目錄 容器——vector 1.構造 模擬實現 2.迭代器 模擬實現: ?編輯 3.容量 模擬實現: 4.元素的訪問 模擬實現 5.元素的增刪查改 迭代器失效問題: 思考問題 【注】:這里的模擬實現所寫的參數以及返回值,都是…

Ubuntu交叉編譯器工具鏈安裝

聲明 本博客所記錄的關于正點原子i.MX6ULL開發板的學習筆記,(內容參照正點原子I.MX6U嵌入式linux驅動開發指南,可在正點原子官方獲取正點原子Linux開發板 — 正點原子資料下載中心 1.0.0 文檔),旨在如實記錄我在學校學…

Tomcat 部署 Jenkins.war 詳細教程(含常見問題解決)

在Tomcat中部署Jenkins.war文件是一個相對簡單的過程,以下是詳細步驟: 1. 準備工作 確保已安裝JDK:Jenkins需要Java環境,建議安裝JDK 8或更高版本。 下載Jenkins.war:https://pan.quark.cn/s/c4fd7711a1b3 下載Tomc…

DAY46 動態規劃Ⅸ 股票問題Ⅱ

188. 買賣股票的最佳時機 IV - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxProfit(int k, vector<int>& prices) {if(prices.size()0) return 0;vector<vector<int>>dp(prices.size(),vector<int>(2*k1,0));for(int i…

4月2日工作日志

一個樸實無華的目錄 今日學習內容&#xff1a;1.UIAbility生命周期2.默認啟動頁面設置3.同模塊喚起ability 今日實操內容&#xff1a; 今日學習內容&#xff1a; 1.UIAbility生命周期 2.默認啟動頁面設置 3.同模塊喚起ability 今日實操內容&#xff1a; 通過分組件文件&#…

鴻蒙學習筆記(4)-Radio組件、彈框組件、組件內部狀態、工具類

一、Radio組件 &#xff08;1&#xff09;簡述 創建單選框組件。接收一個RadioOptions類型對象參數。 名稱類型必填說明valuestring是 當前單選框的值。 groupstring是 當前單選框的所屬群組名稱&#xff0c;相同group的Radio只能有一個被選中。 indicatorType12RadioIndica…

111.在 Vue 3 中使用 OpenLayers 實現動態曲線流動圖(類似 ECharts 遷徙狀態)

在數據可視化領域&#xff0c;ECharts 提供的 遷徙圖&#xff08;流動圖&#xff09; 是一種直觀展示數據流動的方式&#xff0c;如人口遷徙、物流流向等。我們可以使用 OpenLayers 結合 Vue 3 來實現類似的 動態曲線流動圖&#xff0c;從而在 Web GIS 項目中提供更生動的可視化…

全棧開發項目實戰——AI智能聊天機器人

文章目錄 一&#xff1a;項目技術棧和代碼分析1.前端技術棧&#xff08;1&#xff09;HTML&#xff08;index.html&#xff09;&#xff1a;&#xff08;2&#xff09;CSS&#xff08;styles.css&#xff09;&#xff1a;&#xff08;3&#xff09;JavaScript&#xff08;scrip…

無人機機體結構設計要點與難點!

一、無人機機體結構設計要點 1. 類型與應用場景匹配 固定翼無人機&#xff1a;需優化機翼升阻比&#xff0c;采用流線型機身降低氣動阻力&#xff08;如大展弦比機翼設計&#xff09;。 多旋翼無人機&#xff1a;注重輕量化框架和對稱布局&#xff08;如四軸/六軸碳纖維機…

eBest AI智能報表:用自然語言對話解鎖企業數據生產力

告別傳統數據迷宮&#xff0c;讓業務洞察"開口即得" 【數據價值被困在系統迷宮中】? 在數字化轉型的深水區&#xff0c;80%的企業正被數據孤島和越來越多&#xff0c;也越來越復雜的系統所困擾。 ? 操作黑洞&#xff1a;用戶平均通過6次篩選和層級跳轉才能觸達目標…

Linux 編程環境

文章目錄 VimGCCGDBMake Vim Vim GCC GCC&#xff08;GNU Compiler Collection&#xff09;是一款編譯語言編譯器&#xff0c;此項目最早由GNU計劃的發起者理查德 斯托曼開始實施。第一版GCC于1987年發行&#xff0c;最初的GCC代表GNU C Compiler&#xff0c;即GNU的C語言編…

JSONP跨域訪問漏洞

一、漏洞一:利用回調GetCookie <?php$conn new mysqli(127.0.0.1,root,root,learn) or die("數據庫連接不成功"); $conn->set_charset(utf8); $sql "select articleid,author,viewcount,creattime from learn3 where articleid < 5"; $result…