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

Mac替换ccextractor为ffmpeg后字幕提取的换行与标签问题求助

问题与解决方案

问题描述

  • 原基于ccextractor的字幕提取脚本失效,切换至ffmpeg提取视频字幕,目标是生成无换行的单段纯文本字幕
  • 遇到两个核心问题:
    1. 原awk命令无法有效去除换行,输出仍存在大量换行
    2. 部分文件提取的字幕包含HTML格式标签(如<font face="Serif" size="18">Example line</font>)

用户原代码片段:

ffmpeg -i "$filename" "${filename}.srt"

# If the file has subtitles, extract them
if [ "$has_subtitles" ]; then
  ccextractor "$filename" -o "${filename}.srt"
  # Use dos2unix to convert the file to the correct format
  dos2unix "${filename}.srt"
  # Remove the timestamps from the .srt file
  awk -v RS= '{
    for (i=5;i<=NF;i++){
      printf "%s%s", (sep ? " " : ""), $i
      sep=1
    }
  }
  END{ print "" }' "${filename}.srt" | pbcopy
  rm "${filename}.srt"
fi

用户后续修改尝试(仅去除标签,换行问题未解决):

END{ print "" }' "${filename}.srt" | sed 's/<[^>]*>//g' | tr '\n' ' ' | pbcopy

修正后的脚本

#!/bin/bash

filename="$1"
# 检查目标文件是否存在
if [ ! -f "$filename" ]; then
    echo "文件不存在"
    exit 1
fi

# 用ffmpeg提取第一条字幕轨,覆盖已有文件并屏蔽冗余日志
ffmpeg -i "$filename" -map 0:s:0 "${filename}.srt" -y 2>/dev/null

# 检查字幕文件是否生成成功
if [ -f "${filename}.srt" ]; then
    # 转换文件格式为Unix换行
    dos2unix "${filename}.srt" 2>/dev/null

    # 一站式处理字幕:过滤无效行、移除HTML标签、合并为单段无换行文本
    awk '
        # 跳过序号行、时间线行、空行
        /^[0-9]+$/ || /^-->/ || /^$/ { next }
        {
            # 移除所有HTML标签
            gsub(/<[^>]+>/, "")
            # 将当前行内容用空格连接
            printf "%s ", $0
        }
        END {
            # 移除末尾多余空格并输出换行
            printf "\n"
        }' "${filename}.srt" | sed 's/  */ /g' | tr -d '\n' | pbcopy

    # 清理临时字幕文件
    rm "${filename}.srt"
else
    echo "未检测到字幕或提取失败"
fi

关键修改说明

  • 替换提取工具:彻底用ffmpeg替代失效的ccextractor,通过-map 0:s:0精准提取第一条字幕轨,避免无效操作
  • 精准过滤无效内容:用awk直接跳过srt文件中的序号、时间线和空行,只处理纯字幕文本
  • 一站式处理标签与换行:在awk中直接移除HTML标签,同时将每行字幕用空格连接,避免后续换行混乱
  • 优化文本格式:用sed合并连续空格,tr -d '\n'彻底清除所有换行符,最终生成标准单段文本并复制到剪贴板
  • 增加容错机制:添加文件存在性检查、字幕生成结果检查,避免无意义的执行流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:52:51