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

【ffmpeg命令入门】实现画中画

文章目录

  • 前言
      • 画中画是什么
      • 画中画的外观描述
      • 效果展示
      • 为什么要用画中画
      • 应用场景示例
    • 使用FFmpeg添加画中画
      • 示例命令
      • 参数解释
      • 调整嵌入视频的位置
      • 调整嵌入视频的大小
      • 处理音频
  • 总结


前言

FFmpeg 是一款强大的多媒体处理工具,广泛用于音视频的录制、转换和流处理。它不仅可以处理基础的音视频转换,还能实现复杂的视频编辑效果,比如画中画(Picture-in-Picture, PiP)。画中画是一种常见的视频特效,将一个视频嵌入到另一个视频的特定位置,从而同时显示两个视频流。本文将介绍如何使用 FFmpeg 实现画中画效果,帮助你掌握这一强大功能。


画中画是什么

画中画(Picture-in-Picture,PiP)是一种视频特效,它允许在一个主要视频的特定位置显示另一个视频。简单来说,就是在主画面中嵌入一个小窗口,播放第二个视频。这个小窗口可以放置在主画面的任意位置,通常是角落,并且可以调整大小以适应需要。

画中画的外观描述

在实际应用中,画中画效果通常如下所示:

  1. 主视频:占据屏幕的大部分,是观众的主要关注点。
  2. 嵌入视频:一个较小的视频窗口,通常放置在主视频的角落(如右上角、左下角等),播放不同的内容。

例如,在一个新闻播报节目中,主视频是主播的画面,而画中画窗口中可能播放相关的视频片段或现场画面。

效果展示

在这里插入图片描述
在这里插入图片描述

为什么要用画中画

画中画效果有多种用途和优势:

  1. 增强信息传达:通过同时显示两个相关视频,可以更有效地传达信息。例如,主播在解说新闻时,可以在画中画窗口中展示相关视频片段,增强观众的理解和参与感。

  2. 多任务处理:在视频会议或在线教学中,演示者可以在主视频中展示自己或教学内容,同时在画中画窗口中展示演示文稿或其他辅助资料。

  3. 创意效果:在视频编辑和制作中,画中画效果可以用于制作独特的视觉效果,使视频更具创意和吸引力。

  4. 实时监控:在直播或监控视频中,画中画可以用于显示多个摄像头的画面,实现多角度的实时监控。

  5. 广告和宣传:在视频内容中插入广告或宣传片,观众可以在不离开主视频的情况下观看额外的内容,从而提高广告的曝光率和效果。

应用场景示例

  • 新闻节目:主播在主屏幕讲解新闻时,画中画显示相关视频或图片。
  • 体育转播:在播放比赛实况时,画中画可以显示选手的统计数据或其他比赛的精彩瞬间。
  • 游戏直播:主播在主屏幕播放游戏内容,同时画中画显示主播的实时反应和解说。
  • 在线教学:老师在主屏幕讲解课程内容,画中画显示PPT或教学素材。

通过使用画中画效果,创作者可以更灵活地展示多种内容,提升观众的观看体验和信息获取效率。FFmpeg 提供了强大的画中画功能,帮助用户轻松实现这一效果。

使用FFmpeg添加画中画

要使用FFmpeg添加画中画效果,你可以使用overlay滤镜。这个滤镜允许你将一个视频叠加到另一个视频上,从而实现画中画效果。下面是详细步骤和示例命令。

示例命令

假设我们有两个视频文件:

  • 主视频文件:main.mp4
  • 嵌入视频文件:overlay.mp4

要将overlay.mp4作为画中画效果添加到main.mp4,并将其放置在右上角,使用以下命令:

ffmpeg -i main.mp4 -i overlay.mp4 -filter_complex "overlay=W-w-10:10" output.mp4

参数解释

  • -i main.mp4:指定主视频文件。
  • -i overlay.mp4:指定嵌入视频文件。
  • -filter_complex:使用复杂滤镜。
  • "overlay=W-w-10:10":使用overlay滤镜,将overlay.mp4叠加到main.mp4上。W-w-10表示将嵌入视频放在主视频的右上角,10表示距离主视频右边和上边的距离为10像素。
  • output.mp4:输出文件名。

调整嵌入视频的位置

你可以通过改变overlay滤镜参数来调整嵌入视频的位置:

  • 左上角"overlay=10:10"
  • 右上角"overlay=W-w-10:10"
  • 左下角"overlay=10:H-h-10"
  • 右下角"overlay=W-w-10:H-h-10"

WH表示主视频的宽度和高度,wh表示嵌入视频的宽度和高度。

调整嵌入视频的大小

如果你需要调整嵌入视频的大小,可以在叠加前先缩放嵌入视频。使用scale滤镜来调整嵌入视频的大小,然后再进行叠加。例如,将overlay.mp4缩放到宽度为320像素,高度自动调整以保持比例:

ffmpeg -i main.mp4 -i overlay.mp4 -filter_complex "[1:v]scale=320:-1[ovr];[0:v][ovr]overlay=W-w-10:10" output.mp4

在这个命令中:

  • [1:v]scale=320:-1[ovr]:将第二个输入视频(overlay.mp4)缩放到宽度为320像素,高度自动调整。[ovr]是临时标签。
  • [0:v][ovr]overlay=W-w-10:10:将缩放后的嵌入视频叠加到主视频上。

处理音频

如果两个视频都有音频,你可能需要指定音频处理方式。常见的做法是只保留主视频的音频:

ffmpeg -i main.mp4 -i overlay.mp4 -filter_complex "[1:v]scale=320:-1[ovr];[0:v][ovr]overlay=W-w-10:10" -map 0:a -c:a copy output.mp4

在这个命令中,-map 0:a表示只使用第一个输入文件(main.mp4)的音频流,-c:a copy表示音频不重新编码。


总结

通过本文的介绍,你已经了解了如何使用 FFmpeg 实现画中画效果。通过使用复杂滤镜如 overlay,你可以将一个视频嵌入到另一个视频中,从而实现画中画特效。这一功能在制作多媒体演示、视频教程和直播节目时非常有用。掌握 FFmpeg 的画中画技术,不仅提升了你的多媒体处理能力,也为你的创意项目提供了更多可能性。FFmpeg 的强大和灵活性,使其成为音视频处理领域不可或缺的工具,继续探索其更多功能,将为你带来更大的收获。

相关文章:

【ffmpeg命令入门】实现画中画

文章目录 前言画中画是什么画中画的外观描述效果展示为什么要用画中画应用场景示例 使用FFmpeg添加画中画示例命令参数解释调整嵌入视频的位置调整嵌入视频的大小处理音频 总结 前言 FFmpeg 是一款强大的多媒体处理工具,广泛用于音视频的录制、转换和流处理。它不仅…...

基于 LangChain+LangGraph 来实现一个翻译项目

相信大家在看文档的时候,有时会比较苦恼,比如 AI 相关的文档都是外文,中文文档比较少,看起来会比较吃力,有的时候会看不懂,翻译软件又翻得很乱,完全看不了,今天就基于 LangChain 和 …...

javascript 如何将 json 格式数组转为 excel 表格| sheetJS

案例 // https://unpkg.com/xlsx0.18.5/dist/xlsx.full.min.js function exportXlsx(jsonData, fileName , mine null) {const workbook XLSX.utils.book_new();// 将JSON数组转换成工作表const worksheet XLSX.utils.json_to_sheet(jsonData);// 向工作簿添加工作表XLSX.…...

网页制作技术在未来会如何影响人们的生活?

网页制作技术在未来会如何影响人们的生活? 李升伟 网页制作技术在未来可能会从以下几个方面显著影响人们的生活: 1. 工作与学习方式的变革:远程办公和在线教育将更加普及和高效。通过精心制作的网页,人们能够实现更便捷的协作…...

【计算机网络】网络层——IPv4地址(个人笔记)

学习日期:2024.7.24 内容摘要:IPv4地址,分类编址,子网,无分类编址 IPv4地址概述 在TCP/IP体系中,IP地址是一个最基本的概念,IPv4地址就是给因特网上的每一台主机的每一个接口分配一个在全世界…...

c++ 学习笔记之多线程:线程锁,条件变量,唤醒指定线程

基于CAS线程加锁方式 CAS(Compare-And-Swap)和 mutex 都是用于实现线程安全的技术,但它们适用于不同的场景,具有不同的性能和复杂性。下面是对两者的区别和使用场景的详细解释: CAS(Compare-And-Swap&…...

《0基础》学习Python——第二十三讲__网络爬虫/<6>爬取哔哩哔哩视频

一、在B站上爬取一段视频(B站视频有音频和视频两个部分) 1、获取URL 注意:很多平台都有反爬取的机制,B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装,下列图片中(注意代码书写格式) 3、Co…...

第13周 简历职位功能开发与Zookeeper实战

第13周 简历职位功能开发与Zookeeper实战 本章概述1. Mysql8窗口函数over使用1.1 演示表结构与数据1.2 案例1:获取男女总分数1.3 案例2****************************************************************************************本章概述 1. Mysql8窗口函数over使用 参考案例…...

什么是大型语言模型 (LLM)

本章探讨下,人工智能如何彻底改变我们理解和与语言互动的方式 大型语言模型 (LLM) 代表了人工智能的突破,它采用具有广泛参数的神经网络技术进行高级语言处理。 本文探讨了 LLM 的演变、架构、应用和挑战,重点关注其在自然语言处理 (NLP) 领…...

【人工智能】AI时代:探索个人潜能的新视角

文章目录 🍊Al时代的个人发展1 AI的高速发展意味着什么1.1 生产力大幅提升1.2 生产关系的改变1.3 产品范式1.4 产业革命1.5 Al的局限性1.5.1局限一:大模型的幻觉1.5.2 局限二:Token 2 个体如何应对这种改变?2.1 职场人2.2 K12家长2.3 大学生2.4 创业者 …...

pyaudio VAD通过声音音频值分贝大小检测没人说话自动停止录制

效果可能说话声音小可能不被监听到,需要更改QUIET_DB阈值,另外delay_time值是低于阈值多久就可以停止保存当前的语音 import pyaudio import waveimport sys import numpy as npdef record_auto(MIC_INDEX=1):开启麦克风录音,保存至temp/speech_record.wav音频文件音量超过…...

《后端程序猿 · @Value 注释说明》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

【LeetCode】71.简化路径

1. 题目 2. 分析 3. 代码 我写了一版很复杂的代码&#xff1a; class Solution:def simplifyPath(self, path: str) -> str:operator [] # 操作符的栈dir_name [] # 文件名的栈idx 0cur_dir_name ""while(idx < len(path)):if path[idx] /:operator.ap…...

DockerCompose 安装环境

1. Redis version: 3 services:redis:image: redis:6.2.12container_name: redisports:- "6379:6379"environment:TZ: Asia/Shanghaivolumes:# 本地数据目录要先执行 chmod 777 /usr/local/docker/redis/data 赋予读写权限&#xff0c;否则将无法写入数据- /usr/loc…...

学习笔记之JAVA篇(0724)

p 方法 方法声明格式&#xff1a; [修饰符1 修饰符2 ...] 返回值类型 方法名&#xff08;形式参数列表&#xff09;{ java语句;......; } 方法调用方式 普通方法对象.方法名&#xff08;实参列表&#xff09;静态方法类名.方法名&#xff08;实参列表&#xff09; 方法的详…...

【Android】广播机制

【Android】广播机制 前言 广播机制是Android中一种非常重要的通信机制&#xff0c;用于在应用程序之间或应用程序的不同组件之间传递信息。广播可以是系统广播&#xff0c;也可以是自定义广播。广播机制主要包括标准广播和有序广播两种类型。 简介 在Android中&#xff0c…...

【.NET全栈】ASP.NET开发Web应用——ASP.NET数据绑定技术

文章目录 前言一、绑定技术基础1、单值绑定2、重复值绑定 二、数据源控件1、数据绑定的页面生存周期2、SqlDataSource3、使用参数过滤数据4、更新数据和并发处理5、编程执行SqlDataSource命令6、ObjectDataSource控件介绍7、创建业务对象类8、在ObiectDataSource中使用参数9、使…...

MySQL的账户管理

目录 1 密码策略 1.1 查看数据库当前密码策略&#xff1a; 1.2 查看密码设置策略 1.3 密码强度检查等级解释&#xff08;validate_password.policy&#xff09; 2 新建登录账户 3 账户授权 3.1 赋权原则 3.2 常见的用户权限 3.3 查看权限 3.4 赋权语法 4 实例 4.1 示例1&#x…...

FastGPT 源码调试配置

目录 一、添加 launch.json 文件 二、调试 本文简单介绍如何通过 vscode 对 FastGPT 进行调试。 这里假设已经安装 vsocde 和 FastGPT本地部署。 一、添加 launch.json 文件 vscode 打开 FastGPT 项目,点击 调试 -> 显示所有自动调试配置 -> 添加配置 -> Node.j…...

SQL Server数据迁移新纪元:数据库数据泵(Data Pump)使用指南

SQL Server数据迁移新纪元&#xff1a;数据库数据泵&#xff08;Data Pump&#xff09;使用指南 在数据管理的世界里&#xff0c;数据迁移是一个常见且复杂的过程。SQL Server提供了一个强大的工具——数据库数据泵&#xff08;Data Pump&#xff09;&#xff0c;它可以帮助我…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...