有没有批量为视频增加随机显示的水印的工具?

0.0做了一些课程,但是想留点自己印记,一个个加太费劲了,固定的水印加小了会被去除,加大了影响观感…想找一个可以加那种水印显示几秒就消失,然后又出现的工具…

我知道PR之类的剪辑软件,主要是想一个批量- - 手动加太麻烦了.

做课程的时候,放个标记在旁边多完美

之前 是小众 还是吾爱破解来着忘记 有个可以在鼠标上加一个 跟随图片的功能 也可以是动图
就相当于是一个随机水印了

直接做一个鼠标指针,鼠标到那都是你的水印

:joy:问题是已经做好了都。。。

要不试试去问问bing,这时我问出来的答案。

# 设置变量
$videoFile = "input.mp4"
$watermarkFile = "watermark.png"
$outputFile = "output.mp4"

# 获取视频文件的时长
$duration = ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $videoFile

# 设置水印添加的次数
$watermarkCount = 3

# 初始化 filter_complex 参数
$filterComplex = "[0:v][1:v]"

# 循环添加水印
for ($i = 0; $i -lt $watermarkCount; $i++) {
    # 随机生成水印添加的时间和位置
    $randomTime = Get-Random -Minimum 0 -Maximum $duration
    $xPos = Get-Random -Minimum 0 -Maximum 1920 # 根据视频分辨率修改
    $yPos = Get-Random -Minimum 0 -Maximum 1080 # 根据视频分辨率修改

    # 更新 filter_complex 参数
    $filterComplex += " overlay=$xPos:$yPos:enable='between(t,$randomTime,$randomTime+5)'"
}

# 添加 filter_complex 参数的结尾
$filterComplex += " [out]"

# 使用 FFmpeg 添加水印
ffmpeg -i $videoFile -i $watermarkFile -filter_complex $filterComplex -map "[out]" -map 0:a -codec:a copy $outputFile

我的想法是 你自己用aegisub或者arctime这种做字幕的,自己做个出现几秒 然后消失 还随便转移位置的文字logo的字幕。
然后用小丸工具箱之类的批量压制一下……(【视频压制】小丸工具箱的操作和批量压制 - 哔哩哔哩
不过还是在录视频的时候,用那种跟随鼠标的水印比较好。(https://www.52pojie.cn/forum.php?mod=viewthread&tid=1209199

感觉楼上两位的想法都挺好的

0.0字幕可以达到这个效果吗?? 感谢您的回复,这给了我一个思路…但是字幕的制作,是否会导致别人也可以随便关闭呢 ??因为我看电影的时候,有些内置字幕,便是可以使用播发器的字幕功能关闭的

感谢您的回复. 我也尝试问过chatgpt,但是它给我的答案…我会尝试一下这个代码!

你用起来了吗,如果你用linux的话,或者pc上面有bash环境的话,我可以帮你写一个bash脚本
:joy:
powershell还没掌握

感谢您的回复哈。我已经测试了这个代码,好像不能执行?
我把它放入txt中,改成sh后缀,使用powershell执行的时候,会让我选择一个终端,然后我选择git bash后,它并不能执行。
然后,我尝试让chatgpt帮我改这段代码,并增加一个可以遍历选择文件夹下的文件夹里的视频的功能,它给的代码,还是错误的,我尝试升级了我的powershell版本,FFmpeg也正常配置了,依旧报错

上面的是powershell的代码,我改了一个bash的,等我测试一下贴上来

我使用了arctime 这个软件,稍稍摸索了一下,应该会有更高级的用法?主要一个难点在于,我不知道该怎么去把字幕变成适应视频长度和画面的。

感谢

忽悠着bing和claude写完了这个脚本。

  1. 安装FFmpeg,并将相关路径加入PATH中
  2. 复制下面代码,粘贴到文件中,命名为 random.sh, 名字无所谓的。
  3. 在bash环境下运行,git bash或者wsl或者linux

./random.sh 视频路径 png图片路径 水印次数 输出名

输出名是可选的。

claude写一些简单的函数,比如get_duration是没有问题的,但是对于FFmpeg的关键设置总会有错误,最后使用bing做了一下纠正(为啥一开始就不用bing)。

总的来说,bing和claude都是手动修改一下才好用,直接拿来用是有一点难受的。

#!/usr/bin/env bash

get_duration() {
    local _v=${1}
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 ${_v} | cut -d. -f1
}

get_resolution() {
    local _v=${1}
    ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 ${_v}
}

generate_time_intervals() {
    local T=$1      # total
    local C=$2      # count
    local len=$((T / C))
    local start=0
    local offset=0
    for ((i=0; i<C; i++))
    do
        offset=$((RANDOM % (len / 2)))  
        end=$((start + len + offset))  
        echo -n "$start.$end "
        start=$((end + 1))
    done
}

watermark() {
    local _video=${1}
    local _img=${2}
    local _loop=${3:-10}
    local _out=${4:-out.ma4}

    local cmd_base="ffmpeg -i ${_video} -i ${_img}"
    local overlay_cmd=""
    local dur=$(get_duration ${_video})
    local res=$(get_resolution ${_video})
    local width=$(echo ${res} | cut -d x -f1)
    local height=$(echo ${res} | cut -d x -f2)

    local _s=0
    local _e=0
    local input="[0:v]"

    for i in $(generate_time_intervals ${dur} ${_loop})
    do
        _s=$(echo ${i} | cut -d. -f1) 
        _e=$(echo ${i} | cut -d. -f2) 

        local _x=$((RANDOM % width))
        local _y=$((RANDOM % height))
        overlay_cmd="${overlay_cmd}${input}[1:v] overlay=x=${_x}:y=${_y}:enable='between(t,${_s},${_e})'[v${i}];"
        input="[v${i}]"
    done

    overlay_cmd="${overlay_cmd%?}\""
    #local cmd="${cmd_base} -filter_complex \"${overlay_cmd} -map \"${input}\" out.mp4"
    local cmd="${cmd_base} -filter_complex \"${overlay_cmd} -c:v libx264 -crf 18 -map \"${input}\" ${_out}"

    echo ${cmd}
    eval ${cmd}
}

usage() {
    echo -e "Usage:\n\t $0 video png count [out_name]\n"
}

usage
watermark $*

一个很暴力的方法是
只要你把字幕时间做的够长(比如做成了五个小时的字幕文件),你在压制的时候,视频少于五小时都就没问题,多出视频时长的字幕部分会被抛弃。只要做了一个后面可以一直用。
而视频的分辨率,用aegisub的话会随字幕设定的分辨率来匹配视频的,不过你要是电脑录屏,分辨率一般是固定的吧。
字幕可以有很多自定义,颜色、大小、位置、字体、透明度、描边、动效等等,有需要的话我可以帮你做个。
(你说的播放器关闭内置字幕那是软字幕,用arctime直接导出 或者小丸工具箱压制 是硬字幕,无法关闭)

非常抱歉这么久后才回复您,遇到了一些事情,好久没有登录小众了,抱歉! 如果可以的话,希望您能帮我做一个。我在那之后依然寻找了一下,依旧没有好的解决方案。FFmpeg对我来说,可能太难了,总是出错。 分辨率,大部分是固定的,但也有一些是那种只录制窗口的 ,所以相对的话,分辨率不是那么固定。

抱歉这么久回复您,那天我在我的电脑上测试了一下,总是出现错误,我尝试过,让chatgpt帮我生成一个解决方案,比如,生成一个同样效果的Python gui程序, :joy:还是,有点为难它了,之后我碰到了一些事情,无暇他顾,放了一段时间,今天才想起问题还没有完结。

你给个最常用的分辨率和 水印的文字内容吧 我做一个