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

FFmpeg移除字幕时无法保留MKV文件中Chapter Atoms的问题求助

FFmpeg移除字幕时无法保留MKV文件中Chapter Atoms的问题求助

我手里有一批从The Criterion Collection转码来的视频,这些视频里有一种叫chapter atoms的章节信息,但奇怪的是ffprobe根本检测不到它们。我猜chapter atoms应该是H.264/H.265/MP4/MOV这类格式里的东西,但Matroska容器本身应该有自己的章节元数据规范吧?这点我不太确定...

举个例子,当我执行ffprobe -show_chapters <video file>时,它只返回一个章节,内容如下:

[CHAPTER]
id=0
time_base=1/1000000000
start=7235652000000
start_time=7235.652000
end=7235652000000
end_time=7235.652000
TAG:title=XXXXXX
[/CHAPTER]

但用MKVToolNix GUI的“信息工具”打开时,在最底部有个可折叠的“Chapters”选项,展开到“Edition entry”后,能看到诸如“Edition flag hidden”、“Edition flag default”、“Edition UID”,最后还有多个Chapter atoms条目。这些内容用ffmpeg/ffprobe常规方式根本检测不到。


现在我想解决的问题是:我写了一个用ffmpeg的脚本,想保留原视频的所有数据,只移除字幕。脚本内容如下:

#!/bin/sh

if [ $# -eq 0 ]; then
>&2 echo "Error: No filename(s) specified."
exit 1
fi

# TODO: Sometimes it does not copy over chapter info
for f in "$@"; do
ffmpeg -i "$f" -threads 4 \
-c:v copy -c:a copy -sn \
-map 0 -map_metadata 0 -map_chapters 0 \
-movflags use_metadata_tags \
"${f%.*}-subs-removed.${f##*.}"
done

我这么做主要是强迫症使然——我一直偏好字幕单独存放,原因有很多:

  • 有时候字幕里有错误或格式问题需要修正
  • OCR转换的错误要改
  • 要去掉字幕里烦人的第三方网站版权水印
  • 调整字幕的时序、同步和时长
  • 方便其他人转译成其他语言
  • 转换字幕格式

我觉得自己已经做了能做的一切来保留原文件的所有数据(包括元数据),但ffmpeg似乎没法完全满足我的需求,它总是会漏掉一些应该被复制的自定义标签和元数据。


所以ffmpeg是不是不适合做这个工作?看起来mkvtoolnix里的mkvextract能检测并提取这些chapter atoms,但ffmpeg不行,这是为什么呢?

有没有办法把chapter atoms转换成标准的Matroska章节?我想要自动化的方案,因为我已经有几个shell脚本(ffmpeg-subs-remove.sh和ffmpeg-subs-extract.sh),上面贴的是移除字幕的脚本,要是能让它正常工作就太好了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:59:06