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.mzph.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…