如何在 MKV 文件中添加和删除字幕?

如何在 MKV 文件中添加和删除字幕?

我有一个质量很好的 MKV 文件,里面有多个字幕选项。我想在列表中添加一个额外的字幕文件。我使用的是 OSX。

在网上搜索后,我使用视频转换器,基本上就是将电影重新编码为一个新文件。这对我来说似乎有点过头了。此外,我可能会丢失以前的字幕和一些图像质量。

答案1

删除字幕:

mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks, note the uppercase S
mkvmerge -o output.mkv input.mkv -s 3,4 # include only subtitle tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # include all subtitle tracks except 3
mkvmerge -i input.mkv # show track numbers

添加字幕:

mkvmerge -o output.mkv input.mkv subs.srt
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt

提取字幕:

mkvextract tracks input.mkv 3:subs.srt
for f in *.mkv; do
  sub=$(mkvmerge -i "$f" | awk '$4=="subtitles"{print;exit}')
  [[ $sub ]] || continue
  [[ $sub =~ S_TEXT/ASS ]] && ext=ass || ext=srt
  track=$(awk -F '[ :]' '{print $3}' <<< "$sub")
  mkvextract tracks "$f" "$track:${f%mkv}$ext"
done

mkvmerge 和 mkvextract 可以使用 进行安装brew install mkvtoolnix

答案2

显示字幕有两种基本方式。您可以将像素编码到视频本身中。这称为“硬字幕”。这样做的优点是视频播放器简单易用,它只是一个视频流。缺点是您必须重新编码视频,这需要时间,并且会造成一些保真度损失。如果您得到更好的翻译,那么它就是视频中的像素。而且您只能使用一种语言。

稍微好一点的是“软字幕”,即在某个地方有一个文本文件,与视频流分开。字幕文件有很多不同的格式,但它们的核心都是“文本、开始时间、删除时间”。有些字幕文件还具有其他功能,例如屏幕颜色和方向。这样做的好处是您可以使用多种语言(想象一下 DVD,您可以使用多种语言),并且可以在文件中修复拼写错误等。如果您不需要字幕,那么只需将其关闭即可。

Softsubs 可以是单独的文件 - 大多数播放器会自动查找与主视频同名(扩展名不同)的字幕。或者某些容器文件格式(如 MKV)可以将它们嵌入其中。查看MKVtoolnix(有一个 mac 端口)用于 MKV 文件工具。这应该允许您嵌入软字幕而无需重新编码。

请注意,并非所有播放器都支持所有格式。我的经验是,XBMC 无法播放 SSA 文件,但更简单的 SRT 文件则没有问题。如果您的平台支持,VLC 可以播放任何文件。

答案3

我意识到这是一个老问题,user495470的答案早在 2013 年就已被接受,但由于问题的一部分是关于在文件中添加字幕,因此我想添加这个新内容。

基本上,我需要将数十个.ass字幕合并到名称相似的 MKV 文件中,因此一次执行一个命令是不够的。所以我编写了这个简单的 Bash 脚本,它将在当前目录中搜索文件.ass,然后按预期合并它们。

find -E . -maxdepth 1 -type f -iregex '.*\.(ASS|SRT)$' |\
  while read FILEPATH
  do
    DIRNAME=$(dirname "${FILEPATH}");
    BASENAME=$(basename "${FILEPATH}");
    FILENAME="${BASENAME%.*}";
    EXTENSION="${BASENAME##*.}"
    mkvmerge -o "/Users/jake/${FILENAME}"-NEW.mkv "${FILENAME}".mp4 --language 0:eng --track-name 0:English "${FILENAME}"."${EXTENSION}"
  done

当然,这个简单的脚本假设字幕是英文的并将它们合并,但可以根据使用需要手动调整;自动将字幕与 MKV 合并的大问题通过像这样的简单脚本解决了。

相关内容