如何让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
修改说明
- 替换遍历方式:用
"$Folders"/*和"$i"/*.mp4替代ls遍历,避免文件名含空格、特殊字符时出错 - 明确文件路径变量:定义
watermarked_video存储水印后的视频路径,避免重复写替换逻辑,提升可读性 - 修正Gif脚本参数:将
gif_creator.sh的第一个参数改为$watermarked_video,确保基于水印视频生成Gif - 优化错误处理:用
if判断水印脚本执行结果,只有水印处理成功才生成Gif,避免无效操作 - 修正Gif文件名逻辑:直接基于水印后的视频路径替换后缀为
.gif,确保文件名匹配正确
内容的提问来源于stack exchange,提问作者Manatsa Mbanje
相关产品推荐
相关产品推荐

