视频添加水印Linux脚本

前言

之前发过一篇“视频添加水印批处理-漫剧版”,那个是windows上的批处理,而这个是其对应的Linux脚本。
单独放一个目录,路径不要有中文,要处理的视频名称不要有中文,水印图片和批处理放在同一个目录下,水印名称“logo.png”

参考水印:
在这里插入图片描述
参考目录:
在这里插入图片描述

一、漫剧左下角平滑水印 (Linux版)

#!/bin/bash

# ==========================================
# 🚀 功能:左下角超低频平滑位移水印 (Linux 版)
# 🎬 目的:防盗录的同时,最大程度减小视觉干扰
# ⏱️ 效果:约 2 分钟完成一次极小范围的“呼吸”运动
# ==========================================

# --- 配置区域 ---
PADDING=60
MOVE_RANGE=15
SPEED=0.05
OUTPUT_FILE="output_bottom_left.mp4"

# --- 自动查找视频文件 ---
# 寻找当前目录下第一个视频文件,排除输出文件本身
INPUT_FILE=$(ls *.mp4 *.mov *.avi *.mkv 2>/dev/null | grep -v "$OUTPUT_FILE" | head -n 1)

if [ -z "$INPUT_FILE" ]; then
    echo "❌ 错误:文件夹内未发现视频文件!"
    exit 1
fi

if [ ! -f "logo.png" ]; then
    echo "❌ 错误:未找到 logo.png 水印文件!" 
    exit 1
fi

echo "✅ 匹配视频:$INPUT_FILE"
echo "✅ 目标位置:左下角 (呼吸感微动)"

# --- 坐标修改说明 ---
# X 坐标:sin 函数提供横向平滑波动
# Y 坐标:H-h 定位到底部,减去波动值产生纵向平移
X_COORD="$PADDING+($MOVE_RANGE*(1+sin(t*$SPEED))/2)"
Y_COORD="H-h-$PADDING-($MOVE_RANGE*(1+cos(t*$SPEED))/2)"

# 封装滤镜表达式
FILTER="[0:v][1:v]overlay=x='$X_COORD':y='$Y_COORD'"

echo "⏳ 正在调用 NVIDIA 显卡硬件加速 (NVENC) 渲染..."

# --- 执行渲染命令 ---
# Ubuntu 下直接调用 ffmpeg,参数逻辑与 Windows 版保持一致 
ffmpeg -i "$INPUT_FILE" -i logo.png -filter_complex "$FILTER" \
    -c:v h264_nvenc \
    -preset p4 \
    -b:v 8M \
    -c:a aac \
    -y "$OUTPUT_FILE"

if [ $? -eq 0 ]; then
    echo "==========================================" [cite: 3]
    echo "✅ 任务完成!保存为:$OUTPUT_FILE" [cite: 3]
    echo "==========================================" [cite: 3]
else
    echo "❌ 渲染失败,请检查 FFmpeg 是否安装或驱动是否正常。"
fi

二、 漫剧边缘环绕水印 (Linux)

#!/bin/bash

# ==========================================
# 🚀 功能:超低频、慢速平滑的边缘环绕水印 (Linux 修正版)
# 🎬 目的:防盗录的同时,大范围移动增加干扰,速度更慢更平滑
# ⏱️ 效果:约 10 分钟完成一次画面的边缘椭圆环绕
# ==========================================

# --- 配置区域 ---
# 基础边距:距离各边缘的最小像素距离
PADDING=60
# 速度系数:移动极其缓慢和平滑
SPEED=0.01
# 输出文件名
OUTPUT_FILE="output_edge_slow_orbit.mp4"

# --- 自动查找视频文件 ---
# 寻找当前目录下第一个视频文件,并排除输出文件
INPUT_FILE=$(ls *.mp4 *.mov *.avi *.mkv 2>/dev/null | grep -v "$OUTPUT_FILE" | head -n 1)

if [ -z "$INPUT_FILE" ]; then
    echo "❌ 错误:文件夹内未发现视频文件!"
    exit 1
fi

if [ ! -f "logo.png" ]; then
    echo "❌ 错误:未找到 logo.png 水印文件!"
    exit 1
fi

echo "✅ 匹配视频:$INPUT_FILE"
echo "✅ 目标位置:全画面的边缘慢速环绕"

# --- 坐标计算表达式 ---
# 修正点:去掉了变量后的 %,确保 FFmpeg 数学引擎能正确识别括号
X_COORD="(W-w)/2+((W-w-2*$PADDING)/2)*cos(t*$SPEED)"
Y_COORD="(H-h)/2+((H-h-2*$PADDING)/2)*sin(t*$SPEED)"

# 封装滤镜表达式,使用单引号包裹防止 Shell 干扰变量 t
FILTER="[0:v][1:v]overlay=x='$X_COORD':y='$Y_COORD'"

echo "⏳ 正在调用 NVIDIA 显卡硬件加速 (NVENC) 渲染..."

# --- 执行渲染命令 ---
ffmpeg -i "$INPUT_FILE" -i logo.png -filter_complex "$FILTER" \
    -c:v h264_nvenc \
    -preset p4 \
    -b:v 8M \
    -c:a aac \
    -y "$OUTPUT_FILE"

if [ $? -eq 0 ]; then
    echo ""
    echo "=========================================="
    echo "✅ 任务完成!保存为:$OUTPUT_FILE"
    echo "=========================================="
else
    echo ""
    echo "❌ 渲染失败,请检查表达式或显卡驱动状态。"
    exit 1
fi
  • end
posted @ 2026-05-16 00:05  神秘剑客  阅读(11)  评论(0)    收藏  举报