求助:按文件名特定片段创建文件夹并用ffmpeg拼接对应目录ts视频文件
ts文件批量归档+合并解决方案
前置说明
默认你的ts文件命名规则为:[4位随机字符][3位序号]3000[剩余字符].ts,如果实际序号的位置/长度有差异,调整后续命令中的字符串截取参数即可。
1. 按序号归档文件到对应目录
修改你提供的参考代码,适配ts文件和序号提取规则:
find . -type f -name "*.ts" -maxdepth 1 -exec bash -c ' # 提取前4位之后的3位字符作为序号 seq_no="${0:4:3}" mkdir -p "$seq_no" mv "$0" "$seq_no/" ' {} \;
命令说明:
- 只检索当前目录下的
.ts格式文件 - 从每个文件名第4位(下标从0开始计数)开始截取3位作为序号,创建对应序号命名的文件夹
- 将匹配的ts文件移动到对应序号文件夹内
2. 批量合并每个文件夹下的ts文件
执行以下脚本完成按文件名排序拼接,输出命名符合要求的合并文件:
# 遍历所有序号文件夹 for dir in [0-9][0-9][0-9]/; do # 去掉文件夹路径末尾的斜杠,得到序号 seq_no="${dir%/}" # 进入对应文件夹 cd "$dir" || continue # 按文件名自然排序生成ffmpeg所需的文件列表 printf "file '%s'\n" *.ts | sort > filelist.txt # 调用ffmpeg拼接,输出文件名为 序号+merged.ts ffmpeg -f concat -safe 0 -i filelist.txt -c copy "${seq_no}merged.ts" # 清理临时文件列表,不需要可以注释掉 rm filelist.txt # 返回上级目录 cd .. done
命令说明:
- 自动识别所有3位数字命名的序号文件夹
- 对每个文件夹内的ts文件按文件名自然升序排序,保证拼接顺序正确
- 用ffmpeg的concat模式直接复制流拼接,无需重新编码,速度极快
- 输出文件自动命名为
[序号]merged.ts,存放在对应序号文件夹内
注意事项
- 执行所有命令前请先备份原文件,先拿3-5个测试文件验证规则匹配正确再全量执行
- 如果你的序号不是3位、也不是紧跟在4位随机字符之后,只需调整第一步中
seq_no="${0:4:3}"的截取参数:${变量:起始下标:截取长度}即可 - 运行前请确保系统已安装ffmpeg工具
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

