Raspberry Pi 3上FFmpeg多输出映射脚本问题:无法正确导出指定字幕轨道为独立SRT文件
解决FFmpeg导出指定字幕轨道为独立SRT文件的映射问题
问题背景
你在Raspberry Pi 3上使用预编译FFmpeg处理MKV多媒体文件,编写的bash脚本已能实现目标a(生成包含选定音视频字幕轨道的新视频,音频转码为AC3 640k),但目标b(导出指定字幕轨道为独立SRT)始终只能导出第一条字幕轨道,无法匹配你指定的轨道编号。
错误原因分析
原脚本里生成SRT文件的FFmpeg命令缺少明确的轨道映射配置。当FFmpeg没有收到-map指令指定要处理的轨道时,会默认选取每种媒体类型的第一条轨道,这就是为什么你总是得到第一条字幕的原因。
修正后的完整脚本
#!/bin/bash PATH="/mnt/USB1/Series/_Remux/" for fullfile in "$PATH"*.mkv do newname="${fullfile%}_converted.mkv" srtname="${fullfile%}_converted.srt" # 处理目标a:生成包含选定轨道的新视频文件 /usr/local/bin/ffmpeg -i "${fullfile}" -map 0:$1 -map 0:$2 -map 0:$3 \ -c:v copy -c:s copy -c:a ac3 -b:a 640k "${newname}" # 处理目标b:单独导出指定编号的字幕轨道为SRT /usr/local/bin/ffmpeg -i "${fullfile}" -map 0:$3 -c:s copy "$srtname" done
关键修改说明
- 拆分命令逻辑:将原脚本中合并的FFmpeg命令拆分为两个独立命令,分别处理视频文件生成和字幕导出,避免轨道映射的逻辑冲突,同时让脚本可读性更强。
- 添加字幕轨道映射:在导出SRT的命令中新增
-map 0:$3,明确告知FFmpeg要选取输入文件(标记为0)中编号为$3的字幕轨道,替代了默认选择第一条轨道的行为。
使用验证
调用示例:./Remux.sh 0 1 5
执行后脚本会完成两个目标:
- 生成包含视频轨道0、音频轨道1(转码为AC3 640k)、字幕轨道5的MKV文件
- 单独导出轨道5的字幕为对应名称的SRT文件
内容的提问来源于stack exchange,提问作者alfredo
相关产品推荐
相关产品推荐

