如何通过FFmpeg批量提取MKV文件中所有英文字幕流
解决MKV多英文字幕流提取问题(生成带索引的SRT文件)
原命令因SRT容器仅支持单字幕流,无法批量提取多条英文字幕。以下是实现按流索引单独提取每个英文字幕的Windows批处理方案:
完整批处理脚本
@echo off setlocal enabledelayedexpansion for %%i in (*.mkv) do ( echo Processing "%%i"... ffprobe -loglevel error -select_streams s -show_entries stream=index:stream_tags=language -of csv=p=0 "%%i" > "%%~ni_subs_temp.txt" for /f "tokens=1,2 delims=," %%a in (%%~ni_subs_temp.txt) do ( if /i "%%b"=="eng" ( echo Extracting subtitle stream %%a (English) from "%%i"... ffmpeg -loglevel error -i "%%i" -map 0:s:%%a -c copy "%%~ni.%%a.eng.srt" ) ) del "%%~ni_subs_temp.txt" ) echo Done! endlocal
脚本说明
- 外层循环:遍历当前目录下所有
.mkv文件。 - ffprobe获取字幕信息:生成临时文件存储每个字幕流的
索引,语言格式数据,避免多文件信息冲突。 - 内层循环处理字幕流:
- 分割每行数据得到流索引(
%%a)和语言标签(%%b)。 - 不区分大小写匹配英文语言标签(支持
eng/ENG/Eng等)。 - 用
ffmpeg单独提取对应索引的字幕流,输出文件名格式为[原文件名].[流索引].eng.srt,比如MovieName.2.eng.srt。
- 分割每行数据得到流索引(
- 清理临时文件:处理完单个MKV后删除对应的临时文件,避免磁盘冗余。
注意事项
- 确保
ffmpeg.exe和ffprobe.exe在系统环境变量PATH中,或与批处理脚本放在同一目录下。 - 支持提取所有类型的英文字幕(强制、完整、SDH等),只要流语言标签标记为英文。
内容的提问来源于stack exchange,提问作者TrustFound
相关产品推荐
相关产品推荐

