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

如何用Bash脚本分组复杂文件名MP4并通过FFmpeg合并?

解决方案:按规则分组生成文件列表并合并视频

一、筛选特定日期文件并按要求分组排序

可以通过Shell脚本实现,以下是适配你文件名规则的具体方案:

假设目标日期为2022-06-01,在视频文件所在文件夹下执行以下脚本:

#!/bin/bash
TARGET_DATE="2022-06-01"

# 遍历文件夹内所有MP4文件
for file in *.mp4; do
    # 用正则匹配文件名结构,提取关键信息
    if [[ $file =~ ^([A-F0-9]{8})([A-F0-9]{4})_([0-9]+)_.*_${TARGET_DATE}T([0-9]{2})\.([0-9]{2})\.([0-9]{2})-.*\.mp4$ ]]; then
        SUFFIX="${BASH_REMATCH[2]}"
        NUMBER="${BASH_REMATCH[3]}"
        
        # 生成对应分组的临时文件
        GROUP_TMP="group_${SUFFIX}_${NUMBER}.tmp"
        # 写入带绝对路径的文件记录
        echo "file '$PWD/$file'" >> "$GROUP_TMP"
    fi
done

# 对每个分组的临时文件按时间排序,生成最终列表
for tmp_file in *.tmp; do
    GROUP_FILE="${tmp_file%.tmp}"
    # 按文件名中的时分秒字段排序
    sort -t'_' -k5,5 -k6,6n -k7,7n "$tmp_file" > "$GROUP_FILE"
    rm "$tmp_file"
done

脚本说明:

  • 正则表达式精准匹配你的命名规则,仅筛选目标日期的文件
  • 按Suffix(如示例中的4FA9)和Number(如示例中的0)生成独立分组列表,文件名格式为group_<Suffix>_<Number>.txt
  • 自动提取文件名中的时分秒信息,对每个分组内的文件按时间先后排序

二、用FFmpeg合并每个分组的视频

安防系统输出的视频通常编码参数一致,推荐使用FFmpeg的concat demuxer方法,无质量损失且速度极快:

针对每个分组列表文件,执行以下命令:

ffmpeg -f concat -safe 0 -i group_4FA9_0.txt -c copy merged_4FA9_0.mp4

参数说明:

  • -f concat:指定使用concat分路器模式
  • -safe 0:允许列表中使用绝对路径的文件
  • -c copy:直接复制音视频流,跳过重新编码步骤

内容的提问来源于stack exchange,提问作者Jon Griffith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:48:17