使用 ffmpeg 给视频批量加图片水印

背景

事情是这样的……前两天突然接到 leader 给的一个任务:给视频加上图片 logo 水印。我这种剪映老司机当然迷之一笑了哈哈哈哈哈,沉浸在简单的任务中还没反应过来巴掌就如洪水般涌来,因为 leader 给了几十个视频……作为一个计算机人,当然要搞脚本了!!!于是便有了今天的这篇博客。

ffmpeg

什么是 ffmpeg

FFmpeg is a free and open-source software project consisting of a suite of libraries and programs for handling video, audio, and other multimedia files and streams. Its core is the command-line ffmpeg tool itself, designed for processing video and audio files. @https://en.wikipedia.org/wiki/FFmpeg

说白了 ffmpeg 就是一套用于处理视频、音频的工具。

为什么要使用 ffmpeg

ffmpeg 是许多多媒体库和工具(例如 Pythonmoviepyopencv)的核心组件,用于处理底层音视频操作。对于程序员来说,它可以通过代码实现复杂的多媒体处理功能,非常高效。

ffmpeg 官网

既然是很大的开源软件,那一定有自己的官网:https://www.ffmpeg.org/

MacOS 安装 ffmpeg

直接在macTerminal 中按照如下步骤安装:

  • Step1:使用 Homebrew 安装 ffmpeg
brew install ffmpeg
  • Step 2: 验证安装
ffmpeg -version

使用 ffmpeg 给视频加图片水印

在要加水印的视频所在文件夹打开 Terminal,输入以下指令即可:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]scale=iw*0.5:-1[wm];[wm]format=rgba,colorchannelmixer=aa=1[wm_alpha];[0:v][wm_alpha]overlay=15:-50" -c:v libx264 -preset slow -crf 18  -c:a copy output.mp4

各项参数含义如下:

  • -i 指定输入文件。两个-i 一个输入要加水印的视频,一个指定水印图片
  • -filter_complex 用于定义复杂的过滤器链,包含多个处理步骤
  • [1:v]scale=iw*0.5:-1[vm]
    [1:v] 表示使用第二个输入 watermark.png 的视频流
    scale=iw*0.5:-1 表示将水印图片的宽度(iwinput width)缩小到原始宽度的50%,高度自动按比例调整(-1 表示自动保持宽高比)
    [wm] 定义了一个临时名称,表示缩放后的水印输出。
  • [wm]format=rgba,colorchannelmixer=aa=1[wm_alpha]
    [wm] 接收上一步生成的水印
    format = rgba 确保水印的格式是 RGBA 支持透明通道 (不支持透明通道的图片格式为RGB)
    colorchannelmixer=aa=1 调整水印的透明度,aa=1表示设置水印完全不透明
    [wm_alpha] 定义一个临时名称,表示处理后的水印输出
  • [0:v][wm_alpha]overlay=15:-50
    [0:v] 使用第一个输入input.mp4 的视频流
    [wm_alpha] 使用刚刚处理后的水印
    overlay = 15:-50 将水印图片叠加到视频上时,overlay 用于确定位置,15 表示水印距离视频左侧15像素。-50 表示水印距离视频上方50像素(负值表示超出视频范围)。
    如果想让水印放在视频的右下角,可以使用 overlay = W-w-10:H-h-10,其中 W 是视频的宽度, H 是视频的高度, w 是水印图片的宽度, h 是水印图片的高度, 10 是距离右下角的边距,可以根据需求调整。
  • -c:v libx264 指定使用 libx264 编码器对输出视频进行压缩,libx264 是一种高效的视频编码格式,支持多种质量和压缩比配置。
  • -preset slow 设置编码速度与压缩效率的平衡。slow 设置编码速度较慢,但能提供更高的压缩率和更好的视频质量。
  • -crf 18 指定编码的恒定质量参数(CRF,Constant Rate Factor)。18 是一个较低的 CRF 值,表示更高的视频质量(范围是 0-51,值越低质量越高,文件越大)。
  • -c:a copy 保留输入视频的音频流,直接拷贝到输出文件中,避免重新编码。
  • output.mp4 输出文件,不过这里不用 -o

这些参数可以按需调整。

批量加水印

创建一个名为add_watermark.sh 的脚本文件,内容如下:

#!/bin/bash# 设置文件夹路径和水印图片路径
INPUT_DIR="path/to/your/input/folder"
WATERMARK="path/to/your/watermark.png"
OUTPUT_DIR="path/to/your/output/folder"# 创建输出文件夹(如果不存在)
mkdir -p "$OUTPUT_DIR"# 遍历文件夹中的所有视频文件
for video_file in "$INPUT_DIR"/*.mp4; do# 获取视频文件名filename=$(basename -- "$video_file")filename_no_ext="${filename%.*}"# 输出文件路径output_file="$OUTPUT_DIR/$filename_no_ext-watermarked.mp4"# 使用 ffmpeg 添加水印ffmpeg -i "$video_file" -i "$WATERMARK" -filter_complex "overlay=10:15" "$output_file"
done
  1. 替换 "path/to/your/input/folder" 为视频文件的实际路径。
  2. 替换 "path/to/your/watermark.png" 为水印的图片路径。
  3. 设置 "path/to/your/output/folder" 为保存处理过的视频文件的路径。

在命令行中进入到脚本所在的目录,并运行:

chmod +x add_watermark.sh
./add_watermark.sh

这段脚本会遍历文件夹下的所有 .mp4 视频文件,将每个视频文件加上水印并保存到指定的输出文件夹中。

补充小知识

为什么 [1:v] 是使用第二个输入流

ffmpeg 中,输入流的索引是从 0 开始计数的,按照输入文件的顺序进行编号。第一个输入文件 -i input.mp4 的索引为 0,第二个输入文件 -i watermark.png 的索引为 1。所以 [0:v] 表示第一个文件的视频流,[1:v] 表示第二个文件的视频流。如果mp4文件还有音频,则 [0:a] 表示它的音频流。
例如,如果我们有如下命令:

ffmpeg -i video.mp4 -i audio.mp3 -i logo.png ...

流的索引会是:

  1. video.mp4
  • [0:v]:视频流。
  • [0:a]:音频流(如果有)。
  1. audio.mp3
  • [1:a]:音频流(mp3 文件只有音频,没有视频)。
  1. logo.png
  • [2:v]:图片流(图片被视为单帧视频流)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/71022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 属性选择器详解与实战示例

CSS 属性选择器是 CSS 中非常强大且灵活的一类选择器,它能够根据 HTML 元素的属性和值来进行精准选中。在实际开发过程中,属性选择器不仅可以提高代码的可维护性,而且能够大大优化页面的样式控制。本文将结合菜鸟教程的示例,从基础…

基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践

目录 前言 1、研究背景 2、研究意义 一、研究目标 1、“地理难抵点”的概念 二、“难抵点”空间检索实现 1、数据获取与处理 2、计算流程 3、难抵点计算 4、WebGIS可视化 三、成果展示 1、华东地区 2、华南地区 3、华中地区 4、华北地区 5、西北地区 6、西南地…

计算机毕业设计——Springboot的校园新闻网站

📘 博主小档案: 花花,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 花花在深度学习任务中展现出卓越的能力,包括但不限于java、python等技术。近年来,花花更…

PyCharm 批量替换

选择替换的内容 1. 打开全局替换窗口 有两种方式可以打开全局替换窗口: 快捷键方式: 在 Windows 或 Linux 系统下,按下 Ctrl Shift R。在 Mac 系统下,按下 Command Shift R。菜单操作方式:点击菜单栏中的 Edit&…

深度剖析责任链模式

一、责任链模式的本质:灵活可扩展的流水线处理 责任链模式(Chain of Responsibility Pattern)是行为型设计模式的代表,其核心思想是将请求的发送者与接收者解耦,允许多个对象都有机会处理请求。这种模式完美解决了以下…

服务器使用centos7.9操作系统前需要做的准备工作

文章目录 前言1.操作记录 总结 前言 记录一下centos7.9操作系统的服务器在部署业务服务之前需要做的准备工作。 大家可以复制到自己的编辑器里面,有需求的注释一些步骤。 备注:有条件的项目推荐使用有长期支持的操作系统版本。 1.操作记录 # 更换阿里云…

Aitken 逐次线性插值

Aitken 逐次线性插值 用 Lagrange 插值多项式 L n ( x ) L_n(x) Ln​(x)计算函数近似值时,如需增加插值节点,那么原来算出的数据均不能利用,必须重新计算。为克服这个缺点,可用逐次线性插值方法求得高次插值。 令 I i 1 , i 2…

HARCT 2025 分论坛9:专用设备和机器人系统

会议名称:机电液一体化与先进机器人控制技术国际会议 会议简称:HARCT 2025 大会时间:2025年3月28日-30日 大会地点:中国桂林 主办单位:桂林航天工业学院、广西大学、桂林电子科技大学、桂林理工大学 协办单位&…

建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07

本次要学视频检测,我们先回顾一下图片的人脸检测建筑兔零基础自学python记录16|实战人脸识别项目——人脸检测05-CSDN博客 我们先把上文中代码复制出来,保留红框的部分。 ​ 然后我们来看一下源代码: import cv2 as cvdef face_detect_demo(…

图书管理项目(spring boot + Vue)

想要该项目的话,就 jia 我,并在评论区给我说一下,只需要1元,我把整个项目发给你 jia微:18439421203(名字叫:Bingo) 运行图片:

Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案

1. 如何在 Kubernetes 中设置资源请求和限制? 资源请求确保容器有最小资源量(CPU/内存),而限制则强制容器消耗的最大资源量。这有助于高效资源分配并防止资源争用。 示例: resources:requests:memory: "256Mi&…

java练习(19)

ps:练习来自力扣 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 // 定义二叉树节点类 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode…

计算机考研复试上机05

目录 9、数学问题 1)进制转换 1.二进制数(北京邮电大学复试上机题) 2.进制转换(清华大学复试上机题) 3.十进制与二进制(清华大学复试上机题) 4.进制转换 2(清华大学复试上机题) 5.八进制(华中科技大学复试上机题) 6.又一版 A + B(浙江大学复试上机题) 7.…

LTSPICE仿真电路:(二十三)单端信号转差分信号的简单仿真

1.单端转差分 简单的可以用运放输出再加一个反向比例放大器即可,但是今天仿真一个其他的,在你好放大器上看到的电路。 2.电路图 仿真结果 交叉式单端转差分 优点:可以很明显看出来只需要用单电源就可以了,但是电容是不可缺少的…

Kotlin 2.1.0 入门教程(十七)接口

接口 接口可以包含抽象方法的声明,也可以包含方法的实现。 接口与抽象类的不同之处在于,接口无法存储状态。接口可以拥有属性,但这些属性要么必须是抽象的,要么就得提供访问器的实现。 接口使用 interface 关键字来定义&#x…

Python爬虫实战:获取51job职位信息,并做数据分析

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 1. 环境准备 python import requests from bs4 import BeautifulSoup import pandas as pd import re import matplotl…

DeepSeek 又复活了!第三方平台接入DeepSeek R1

目录 1、秘塔搜索 2、硅基流动 3、腾讯元宝:强烈推荐 5 纳米AI 4、其它平台 评论区留言获取:DeepSeek-R1论文中文翻译文档PDF 往期精彩 1、秘塔搜索 https://metaso.cn/ 优点:满血版R1,操作方便缺点:无法关闭…

AN 433:源同步接口的约束与分析

文章目录 简介时钟和数据的关系SDR(单数据速率)和 DDR(双数据速率)接口约束默认时序分析行为 源同步输出输出时钟输出时钟约束时钟电路和约束示例 以系统为中心的输出延迟约束输出最大延时输出最小延时 以系统为中心的输出时序例外…

IO流-节点流与处理流

节点流和处理流的区别和联系 1. 节点流使底层流/低级流,是直接与数据源相接 2.处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的处理方法完成输入输出 3.处理流(包装流)对节点流进行包装,使用了修…

国密算法SM1、SM2、SM3和SM4 具体的使用和区别

国密算法是中国自主研发的密码算法,包括SM1、SM2、SM3和SM4,分别用于不同场景。以下是它们的具体使用和区别: SM1 对称加密算法 类型: 对称加密 密钥长度: 128位 使用场景: 用于数据加密和解密,适用于金融、政务等领域。 特点: …