我正在使用 Ubuntu 13.10。
有没有什么视频播放器可以在观看时同时显示两个字幕?
谢谢。
答案1
有一种工具叫2srt2ass它可以将两个单独的字幕 SRT 文件中的两种语言合并为一个 SSA/ASS 文件,在屏幕顶部显示一种语言,在底部显示另一种语言。
就播放而言,这样的方法可能是最干净的解决方案(无论如何你都可以使用你已有的播放器),但如果你有很多视频需要这样做,那么开始时就会有点麻烦。
可以做同样事情的替代方案:先期合并
还有awk
Ubuntu 论坛上的一个脚本也许能够达到同样的效果。
答案2
Smplayer 是著名的播放器,这是许多播放器背后的引擎。现在使用 Smplayer 原版可以轻松显示两个字幕。只需选择第二个字幕作为二级轨道并且播放器应该自动将其放置在顶部。根据博客:
自 SVN r6474 起可用并且需要 mpv。
要安装 mpv:sudo apt-get install mpv
如果仍然不起作用,请尝试重置配置文件。根据 Smplayer常问问题:
查找 SMPlayer 配置文件的最简单方法是选择“帮助”菜单中的“打开配置文件夹”选项。如果您想删除当前配置并使用默认设置启动,只需删除 smplayer.ini 文件(重要提示:删除文件时请确保 SMPlayer 未在运行)。
答案3
您还可以使用双子座合并字幕。DualSub 合并两个 SRT 字幕,将屏幕的可用宽度分成两列。它具有高度可配置性,合并后的 SRT 可用于不同的播放器(例如 VLC、Windows Media Player 等,甚至可用于您的电视)。
享受!
答案4
您可以使用以下(bash)脚本,将其保存为mergeSubtitle.sh,然后在终端中输入“bash mergeSubtitle.sh”来运行它。
#!/bin/sh
# mergeSubtitle.sh: Script to merge 2 SRT subtitle into single one
# This is script is freely available under the GNU/GPL license
# Author: Antonymous X
# [email protected]
# 07/19/2015
test "$#" -ne 3 && echo -e "Usage: 2subs \"<LANGUAGE_FILE_1>\" \"<LANGUAGE_FILE_2>\" \"<COMBINED_LANGUAGE_FILE_OUTPUT>\"\nDouble quotes are required in most cases unless the filenames do not contain whitespaces"
test "$#" -ne 3 && exit 1
lang_file1=$1
lang_file2=$2
lang_file3=$3
# Create an empty output file since we'll be appending
touch "$lang_file3"
cp /dev/null "$lang_file3"
# Load srt files into memory and set IFS to '#' to avoid confusion with whitespaces
file1=$(cat "$lang_file1"|sed -r ':a;N;$!ba;s/(,[[:digit:]]{3,3}\n|([[:digit:]]){1,4})\n|([[:alpha:]])\n/\1|/g'|sed -r 's/\|$/#/g')
file2=$(cat "$lang_file2"|sed -r ':a;N;$!ba;s/(,[[:digit:]]{3,3}\n|([[:digit:]]){1,4})\n/\1|/g'|sed -r 's/(.$)/\1\n/g')
IFS='#'
# Split the content. Notice double quoting so it prints newlines
for line in `echo "$file1"`
do
LINE=$(echo $line|awk -F'|' '{print $1}'|sed ':a;N;$!ba;s/\n/ /g'|sed -r 's/[[:cntrl:]]//g'|sed -r 's/[[:space:]]//g')
TIME=$(echo $line|awk -F'|' '{print $2}'|sed ':a;N;$!ba;s/\n/ /g'|sed -r 's/[[:cntrl:]]//g'|sed -r 's/^[[:space:]]+//g')
DIALOG=$(echo $line|cut -d'|' -f3-|sed ':a;N;$!ba;s/\n/ /g'|sed -r 's/[[:cntrl:]]//g'|sed -r 's/^[[:space:]]+//g'|sed -r 's/^[[:space:]]+//g'|sed -r 's/\|/ /g')
DIALOG2=`echo "$file2"|grep "^$LINE|"|sed ':a;N;$!ba;s/\n|\t/ /g'|sed -r 's/[[:cntrl:]]//g'|awk -F'|' '{print $3}'|sed -r 's/^[[:space:]]+//g'`
# Display a basic progress bar
echo -n "#"
# Write to output file
echo -e "$LINE\n$TIME\nl1:$DIALOG\nl2:$DIALOG2\n" >> "$lang_file3"
done
echo #
# Write a funny message
echo Thou have been served
exit 0