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

如何用FFmpeg批量处理同名配对的视频与字幕文件?

批量给匹配的视频文件添加字幕的解决方案

我来帮你搞定这个批量处理的问题!针对你这种文件名完全匹配的视频和字幕文件,我们不用一个个手动敲ffmpeg命令,用脚本就能自动搞定所有文件。下面分不同操作系统给你详细步骤:

Windows 系统(批处理脚本)

  1. 把所有需要处理的视频文件(比如.avi、.mkv)和对应的字幕文件(.srt、.ass)放到同一个文件夹里。
  2. 新建一个文本文件,把它的后缀名改成.bat(比如命名为add_subtitles.bat)。
  3. 右键编辑这个bat文件,粘贴下面的代码:
@echo off
setlocal enabledelayedexpansion

:: 遍历当前文件夹下的avi和mkv文件,可按需添加.mp4等其他格式
for %%f in (*.avi *.mkv) do (
    :: 提取不带扩展名的文件名
    set "filename=%%~nf"
    :: 优先检查ass字幕,再检查srt(顺序可调整)
    if exist "!filename!.ass" (
        echo 正在处理: %%f
        ffmpeg -i "%%f" -vf subtitles="!filename!.ass" "output_%%f"
    ) else if exist "!filename!.srt" (
        echo 正在处理: %%f
        ffmpeg -i "%%f" -vf subtitles="!filename!.srt" "output_%%f"
    ) else (
        echo 未找到%%f对应的字幕文件,跳过处理
    )
)

echo 所有文件处理完成!
pause
  1. 保存后双击运行这个bat文件就行。脚本会自动给每个找到对应字幕的视频嵌入字幕,输出文件会带output_前缀,避免覆盖原文件。

Linux/macOS 系统(Shell脚本)

  1. 同样把视频和字幕放到同一个文件夹,打开终端并进入这个文件夹。
  2. 新建一个脚本文件:
touch add_subtitles.sh
  1. 用编辑器打开脚本(比如nano):
nano add_subtitles.sh
  1. 粘贴下面的代码:
#!/bin/bash

# 遍历当前文件夹下的avi和mkv视频文件,可添加.mp4等格式
for video in *.avi *.mkv; do
    # 跳过非文件的情况(比如没有匹配到文件时)
    [ -f "$video" ] || continue
    # 提取不带扩展名的文件名
    filename="${video%.*}"
    # 检查对应字幕文件
    if [ -f "$filename.ass" ]; then
        echo "正在处理: $video"
        ffmpeg -i "$video" -vf subtitles="$filename.ass" "output_$video"
    elif [ -f "$filename.srt" ]; then
        echo "正在处理: $video"
        ffmpeg -i "$video" -vf subtitles="$filename.srt" "output_$video"
    else
        echo "未找到$video对应的字幕文件,跳过"
    fi
done

echo 所有处理完成!
  1. 保存退出(nano里按Ctrl+O,回车,再按Ctrl+X),然后给脚本加执行权限:
chmod +x add_subtitles.sh
  1. 运行脚本:
./add_subtitles.sh

针对特定编号范围的进阶处理

如果只想处理某个编号区间的文件(比如例子里的72集到某个集数),可以用更精准的脚本。以Linux/macOS为例,假设文件名格式是[AnimeRG] Naruto Shippuden - XXX [720p] [x265] [pseudo].mkv,处理72到100集的脚本如下:

#!/bin/bash

# 设置要处理的起始和结束编号
start=72
end=100

for num in $(seq $start $end); do
    # 把编号格式化为两位数(如果是三位数就改成%03d)
    formatted_num=$(printf "%02d" $num)
    # 拼接完整的视频和字幕文件名
    video="[AnimeRG] Naruto Shippuden - $formatted_num [720p] [x265] [pseudo].mkv"
    subtitle="[AnimeRG] Naruto Shippuden - $formatted_num [720p] [x265] [pseudo].ass"
    
    if [ -f "$video" ] && [ -f "$subtitle" ]; then
        echo "正在处理第$formatted_num集..."
        ffmpeg -i "$video" -vf subtitles="$subtitle" "output_$video"
    else
        echo "第$formatted_num集的视频或字幕文件缺失,跳过"
    fi
done

echo 指定区间处理完成!

Windows的话可以用类似的思路,用for /l循环生成编号:

@echo off
setlocal enabledelayedexpansion

set start=72
set end=100

for /l %%n in (%start%,1,%end%) do (
    set "num=0%%n"
    set "formatted_num=!num:~-2!"
    set "video=[AnimeRG] Naruto Shippuden - !formatted_num! [720p] [x265] [pseudo].mkv"
    set "subtitle=[AnimeRG] Naruto Shippuden - !formatted_num! [720p] [x265] [pseudo].ass"
    
    if exist "!video!" if exist "!subtitle!" (
        echo 正在处理第!formatted_num!集...
        ffmpeg -i "!video!" -vf subtitles="!subtitle!" "output_!video!"
    ) else (
        echo 第!formatted_num!集文件缺失,跳过
    )
)

echo 指定区间处理完成!
pause

注意事项

  • 确保你的电脑已经安装了ffmpeg,并且能在命令行直接调用。如果不行,需要把ffmpeg的路径加入系统环境变量,或者在脚本里写ffmpeg的完整路径(比如Windows里C:\ffmpeg\bin\ffmpeg.exe)。
  • 一定要保证视频和字幕的文件名完全一致,只有扩展名不同,否则脚本会匹配不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:45:30