当前位置: 首页 > news >正文

ffmpeg滤镜使用

overlay滤镜拼接多路视频流实现画中画效果

背景:现在有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
    在这里插入图片描述

相关文章:

  • 从架构角度谈谈云原生架构
  • 笔记:代码随想录算法训练营day63:prim算法精讲、kruskal算法精讲
  • HTTP 请求方法
  • CentOS 7 如何挂载ntfs的移动硬盘
  • 【Verilog】实验十 带倒计时交通灯控制电路设计
  • 本地部署大模型-web界面(ollama + open-webui)
  • 关于终端安全管理系统的超全解析
  • deepseek的使用技巧与组合
  • Java项目拷打
  • go游戏后端开发17: node节点搭建
  • Firefox 浏览器同步一个账户和书签网址
  • Go语言从零构建SQL数据库引擎(2)
  • Redis原理:set命令
  • redis的geo结构实现[附近商铺]功能
  • ThinkPHP的“get\post\put\delete“请求
  • 基于Spring Boot的家庭理财系统app的设计与实现(LW+源码+讲解)
  • 黑盒测试的正交实验法
  • HTML Form Post 提交 无数据 的处理
  • 在线文档协作工具选型必看:14款产品对比
  • 汇编学习之《段寄存器》
  • 哪个网站做国际生意/关键词优化平台有哪些
  • 红安县城乡建设局网站/免费好用的网站
  • 如何做网站赌博的教程/公司宣传网站制作
  • 旅游公司网站 优帮云/关键词排名查询软件
  • 自己搭建服务器访问国外网站/品牌型网站设计推荐
  • 北京装饰公司十强/网站google搜索优化