You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将多个.VTT字幕片段合并为单个.VTT字幕文件?

如何将多个.VTT字幕片段合并为单个.VTT字幕文件?

当然有办法!不用一个个手动打开复制粘贴,下面分享几个实用的自动合并方案,适配不同技术背景的需求:

方法一:命令行快速合并(适合熟悉终端的用户)

如果你的系统是Linux/macOS(Windows可以用WSL或Git Bash),可以用curlawk工具一键完成:

  1. 先把所有VTT片段的URL整理成一个文本文件,比如命名为vtt_urls.txt,每行放一个URL。
  2. 执行以下命令,批量下载并合并片段,自动去掉重复的VTT头部:
curl -s -K vtt_urls.txt | awk '!/^WEBVTT/ || NR==1' > merged_subtitles.vtt
  • curl -s -K vtt_urls.txt:静默模式下从文件读取所有URL并批量下载内容
  • awk '!/^WEBVTT/ || NR==1':只保留第一个WEBVTT开头行,后续片段的重复头部自动跳过
  • 最终合并好的字幕会保存到merged_subtitles.vtt文件中

方法二:Python脚本自定义合并(适合需要灵活调整的用户)

如果需要确保字幕片段按正确顺序排列(比如你的URL可能不是按segment编号排序的),或者要处理特殊格式,用Python脚本更可控:

import urllib.request

# 替换成你的VTT片段URL列表,也可以从txt文件读取
vtt_urls = [
    "https://drod24s.akamaized.net/all/clear/none/d9/5e625421a95a611504451ed9/00922001400/subtitles/Foreign_HardOfHearing-17241006-627dc540-cc6e-44dc-a003-09ea95deff85/segment_0.vtt",
    "https://drod24s.akamaized.net/all/clear/none/d9/5e625421a95a611504451ed9/00922001400/subtitles/Foreign_HardOfHearing-17241006-627dc540-cc6e-44dc-a003-09ea95deff85/segment_1.vtt",
    "https://drod24s.akamaized.net/all/clear/none/d9/5e625421a95a611504451ed9/00922001400/subtitles/Foreign_HardOfHearing-17241006-627dc540-cc6e-44dc-a003-09ea95deff85/segment_2.vtt",
    "https://drod24s.akamaized.net/all/clear/none/d9/5e625421a95a611504451ed9/00922001400/subtitles/Foreign_HardOfHearing-17241006-627dc540-cc6e-44dc-a003-09ea95deff85/segment_3.vtt"
]

# 按segment编号排序,确保字幕顺序正确
vtt_urls.sort(key=lambda x: int(x.split("_")[-1].split(".")[0]))

output_file = "merged_subtitles.vtt"

with open(output_file, "w", encoding="utf-8") as f:
    is_first_segment = True
    for url in vtt_urls:
        try:
            with urllib.request.urlopen(url) as response:
                vtt_content = response.read().decode("utf-8")
                if is_first_segment:
                    # 保留第一个片段的标准VTT头部
                    f.write(vtt_content + "\n")
                    is_first_segment = False
                else:
                    # 跳过后续片段的重复头部,清理空行后追加内容
                    lines = vtt_content.splitlines()
                    # 过滤掉WEBVTT头部和开头的空行
                    content_lines = []
                    skip_header = True
                    for line in lines:
                        if skip_header:
                            if line.startswith("WEBVTT"):
                                continue
                            if line.strip() == "":
                                continue
                            skip_header = False
                        content_lines.append(line)
                    f.write("\n".join(content_lines) + "\n")
        except Exception as e:
            print(f"处理URL {url} 时出错: {e}")

print(f"合并完成!文件已保存为 {output_file}")

这个脚本的优势:

  • 自动按segment的数字编号排序,避免字幕顺序混乱
  • 自动清理片段间的空行和重复头部,保证合并后的文件符合VTT标准格式
  • 自带错误提示,方便排查下载失败的片段

注意事项

  • 确保你的网络可以正常访问这些VTT片段的URL,否则下载会失败
  • 合并后的文件可以用普通文本编辑器打开检查,若出现时间轴重叠等问题,可能需要根据实际情况微调过滤规则
  • 如果片段包含特殊字符,确保脚本或命令使用utf-8编码读取和保存

备注:内容来源于stack exchange,提问作者bigboss

火山引擎 最新活动