Answers:
删除字幕:
mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks
mkvmerge -o output.mkv input.mkv -s 3,4 # remove tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # remove 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
。
--default-track '0:0'
。
显示字幕的基本方法有两种。您可以将像素编码为视频本身。这称为“硬订阅”。这里的优势是视频播放器的简单性,它只是一个视频流。缺点是您必须重新编码视频,这需要时间,并且会损失一些保真度。如果您获得更好的翻译,那么它就是视频中的像素。而且您只能使用一种语言。
更好的是“ softsubbing”,即在某个地方将文本文件与视频流分开。字幕文件有很多不同的格式,但是它们的基本核心都是“文本,开始什么时间,删除什么时间”。有些具有附加功能,例如屏幕上的颜色和方向。这样做的好处是您可以使用多种语言(例如DVD,可以使用多种语言),并且可以在文件中修复错别字等。而且,如果您不需要字幕,那么只需将其关闭即可。
软字幕可以是单独的文件-大多数播放器会自动寻找与主视频名称相同(不同扩展名)的字幕。或者某些容器文件格式(例如MKV)可以将它们嵌入其中。签出MKVtoolnix(有一个mac端口)以获取MKV文件工具。这样一来,您无需重新编码即可嵌入软订阅。
请注意,并非所有播放器都能支持所有格式。我的经验是XBMC的SSA文件有问题,但是简单得多的SRT文件就可以了。如果您的平台支持VLC,则它将播放任何内容。
我意识到这是一个古老的问题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合并的大问题。