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

如何通过for循环将剧集文件名去除季数后设为目标文件夹名

问题描述

现有剧集文件Fast Fast S01E02.mkv,希望通过for循环调用ffmpeg处理后,将输出文件保存到/media/Fast Fast/Fast Fast S01E02.mkv目录下。需要从文件名中提取去除S01E02及后续内容后的部分作为目标文件夹名,当前使用的命令如下:

for f in *.mkv; do ffmpeg -i "$f" -i logo.png -filter_complex "overlay=40:main_h-overlay_h-40" -codec:a aac -c:v h264 /media/folder name/"${f%.*}".mkv
解决方案

可以利用Bash的参数扩展功能提取剧集名称,再动态创建目标目录并执行转换,修改后的命令如下:

for f in *.mkv; do
    # 提取去除SxxExx标识后的剧集名称
    show_name="${f% S[0-9][0-9]E[0-9][0-9]*}"
    # 定义完整的输出目录路径
    output_dir="/media/${show_name}"
    # 创建目录(-p参数确保父目录不存在时也能创建,且目录已存在时不报错)
    mkdir -p "$output_dir"
    # 执行ffmpeg转码并输出到目标目录
    ffmpeg -i "$f" -i logo.png -filter_complex "overlay=40:main_h-overlay_h-40" -codec:a aac -c:v h264 "${output_dir}/${f%.*}.mkv"
done

关键说明

  • ${f% S[0-9][0-9]E[0-9][0-9]*}:%是Bash的参数扩展运算符,作用是从字符串末尾匹配并删除最短的符合指定模式的内容。这里的模式S[0-9][0-9]E[0-9][0-9]*会匹配S后两位数字、E后两位数字,以及之后的所有字符,前面的空格确保只匹配独立的季集标识(避免误删文件名中包含类似字符的部分)。
  • mkdir -p "$output_dir":确保目标目录存在,即使/media下没有对应的剧集文件夹也能自动创建,避免ffmpeg因目录不存在报错。

内容的提问来源于stack exchange,提问作者Mostafa Daash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:04:59