You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Bash循环中Gif生成脚本调用水印脚本的输出结果?

问题分析与脚本修改

核心问题

原脚本存在两个关键错误:

  • gif_creator.sh 传入的第一个参数是未加水印的原视频($i/$j),而非水印后的视频文件
  • 生成Gif的目标文件名替换逻辑错误,原写法 ${j/_w.mp4/.gif} 无法正确匹配原文件名(原j是xxx.mp4格式,不含_w.mp4),导致文件名处理异常甚至覆盖文件

修改后的脚本

#!/usr/bin/bash
Folders='/home/usr/Desktop/SEV'

# 遍历SEV目录下的子目录,避免ls遍历的空格/特殊字符问题
for i in "$Folders"/*; do
    # 只处理目录(跳过文件)
    [ -d "$i" ] || continue
    # 遍历子目录下的mp4文件
    for j in "$i"/*.mp4; do
        # 跳过不存在的文件(比如目录下没有mp4的情况)
        [ -f "$j" ] || continue
        
        ./create-vod-hls.sh
        # 定义水印后的视频路径
        watermarked_video="${j/.mp4/_w.mp4}"
        # 先执行水印脚本,成功后用水印视频生成Gif
        if ./watermark.sh "$j" "$watermarked_video"; then
            # 基于水印视频生成Gif,目标文件名替换为.gif
            gif_output="${watermarked_video/.mp4/.gif}"
            ./gif_creator.sh "$watermarked_video" "$gif_output"
        fi
    done
done

修改说明

  1. 替换遍历方式:用"$Folders"/*和"$i"/*.mp4替代ls遍历,避免文件名含空格、特殊字符时出错
  2. 明确文件路径变量:定义watermarked_video存储水印后的视频路径,避免重复写替换逻辑,提升可读性
  3. 修正Gif脚本参数:将gif_creator.sh的第一个参数改为$watermarked_video,确保基于水印视频生成Gif
  4. 优化错误处理:用if判断水印脚本执行结果,只有水印处理成功才生成Gif,避免无效操作
  5. 修正Gif文件名逻辑:直接基于水印后的视频路径替换后缀为.gif,确保文件名匹配正确

内容的提问来源于stack exchange,提问作者Manatsa Mbanje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:25:33