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

如何编写Bash脚本按25组批量执行FFmpeg并添加间隔?

批量分组处理视频文件的Bash脚本

以下是适配CentOS 7、Bash 5.0.17环境的解决方案,实现每25个文件为一组执行FFmpeg加水印转码,每组处理完成后暂停1-2分钟释放服务器资源:

完整脚本

#!/bin/bash

# 配置项:根据实际环境修改路径与参数
INPUT_FILE="example.txt"
FFMPEG="/path/to/file/ffmpeg"
WATERMARK="/path/to/file/watermark.png"
SOURCE_DIR="/path/to/file"
OUTPUT_DIR="/path/to/file"
BATCH_SIZE=25
PAUSE_DURATION=60  # 单位:秒,1分钟=60秒,2分钟则设为120

# 初始化批次计数器与存储数组
current_count=0
batch=()

# 逐行读取文件名
while IFS= read -r filename; do
    # 跳过空行
    [[ -z "$filename" ]] && continue

    batch+=("$filename")
    ((current_count++))

    # 达到批次大小,执行处理
    if [[ "$current_count" -eq "$BATCH_SIZE" ]]; then
        for fn in "${batch[@]}"; do
            # 生成输出文件名:原文件名后加"_watermarked",保留原后缀
            ext="${fn##*.}"
            base="${fn%.*}"
            output_fn="${OUTPUT_DIR}/${base}_watermarked.${ext}"
            
            # 执行FFmpeg转码命令
            "$FFMPEG" -report -nostdin -i "$WATERMARK" -i "${SOURCE_DIR}/${fn}" \
                -filter_complex "scale2ref[a][b];[b][a]overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2" \
                "$output_fn" -c:v libx265
        done

        # 暂停指定时长
        echo "批次处理完成,暂停 $((PAUSE_DURATION/60)) 分钟..."
        sleep "$PAUSE_DURATION"

        # 重置批次状态
        current_count=0
        batch=()
    fi
done < "$INPUT_FILE"

# 处理剩余不足一个批次的文件
if [[ "$current_count" -gt 0 ]]; then
    for fn in "${batch[@]}"; do
        ext="${fn##*.}"
        base="${fn%.*}"
        output_fn="${OUTPUT_DIR}/${base}_watermarked.${ext}"
        
        "$FFMPEG" -report -nostdin -i "$WATERMARK" -i "${SOURCE_DIR}/${fn}" \
            -filter_complex "scale2ref[a][b];[b][a]overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2" \
            "$output_fn" -c:v libx265
    done
    echo "剩余文件处理完成"
fi

echo "所有文件处理完毕"

使用说明

  1. 配置修改:将脚本中# 配置项下的路径、参数替换为实际值,比如调整PAUSE_DURATION为120秒实现2分钟暂停。
  2. 权限设置:给脚本添加执行权限:chmod +x batch_process.sh
  3. 运行脚本:直接执行./batch_process.sh

关键细节

  • 批次控制:通过计数器和数组收集文件名,确保每25个文件为一组执行,避免逐行频繁调用或一次性加载所有文件导致资源耗尽。
  • 输出文件名规则:自动保留原文件后缀,在文件名中添加_watermarked标记,可根据需求修改生成逻辑。
  • 空行处理:跳过输入文件中的空行,避免无效的FFmpeg调用。
  • 剩余文件处理:最后一批不足25个的文件会被自动处理,不会遗漏。

内容的提问来源于stack exchange,提问作者Robert Dio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:05:31