Shell批量视频编码脚本重命名:保留basename加modified并改mkv为mp4
问题原因梳理
- 原代码存在两处逻辑缺陷:
- 错误引用了未定义的变量
i,${i#*.}写法本身无实际生效逻辑,且设计目标和需求不匹配 - 需求明确要求将输出文件扩展名固定为
.mp4,无需沿用输入文件的原扩展名,因此不需要通过参数展开动态截取原文件扩展名
- 错误引用了未定义的变量
- 原代码中
${file%%.*}的逻辑是正确的:该参数展开会提取文件名开头到第一个.之前的内容,即去掉原扩展名后的基础文件名,例如my_file.mkv经过该操作会得到my_file,符合保留原文件基础名的要求。
调整后的可直接运行代码
# 所有变量引用加双引号,避免文件名包含空格时执行异常 for file in *.mkv; do encode "$file" "${file%%.*}_modified.mp4" done
实际运行效果
对于输入文件my_file.mkv,处理后会生成输出文件名my_file_modified.mp4,完全匹配预期命名规则。
如果遇到无扩展名的输入文件(例如my_video),代码会自动生成my_video_modified.mp4的输出名,逻辑依然自洽。
补充说明:如果未来需要灵活调整输出扩展名,只需要替换代码中写死的
.mp4后缀即可,不需要修改前面的基础名截取逻辑。
内容的提问来源于stack exchange,提问作者Maxwell's Daemon
相关产品推荐
相关产品推荐

