如何让字幕(sub、srt)显示在通过 MediaTomb 传输到松下电视的视频上?
答案1
首先,您需要一个非常强大的设置才能执行此操作,具体取决于您的电视支持的格式。我以前经常将视频流式传输到 ps3,并且几乎必须对所有内容进行转码。
要添加字幕,您可以使用带有“--sub-autodetect-file”参数的“vlc”。
您需要为 mediatomb 启用转码,mediatomb 网站上有一整篇文档描述了如何启用转码: http://mediatomb.cc/pages/transcoding
我建议使用脚本而不是直接调用 vlc 命令,这样您可以轻松更改脚本而无需重新启动 mediatomb。
最后,这是在 ps3 上对我来说效果最好的脚本,但同样,您需要根据电视的支持情况进行更改。
#!/bin/bash -x
VLC=`which vlc`
MEDIAINFO=`which mediainfo`
XMLSTAR=`which xmlstarlet`
INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpgv"
VIDEO_BITRATE="4096"
VIDEO_FRAMERATE="25"
AUDIO_CODEC="a52"
AUDIO_BITRATE="192"
AUDIO_SAMPLERATE="48000"
AUDIO_CHANNELS="2"
FORMAT="ps"
SUBTITLE_LANGUAGE="nl"
VLC_VID_OPT="vcodec=${VIDEO_CODEC},vb=${VIDEO_BITRATE},fps=${VIDEO_FRAMERATE},soverlay,threads=2"
AUDIO_FORMAT=`${MEDIAINFO} --Output=XML "${INPUT}" | ${XMLSTAR} sel -t -m ".//track[@type='Audio']" -v "Format"`
case ${AUDIO_FORMAT} in
"AC-3" | "MPEG Audio" )
VLC_AUD_OPT="audio-sync" ;;
* )
VLC_AUD_OPT="acodec=${AUDIO_CODEC},ab=${AUDIO_BITRATE},samplerate=${AUDIO_SAMPLERATE},channels=${AUDIO_CHANNELS},audio-sync" ;;
esac
exec "${VLC}" -v "${INPUT}" -I dummy --sout "#transcode{${VLC_VID_OPT},${VLC_AUD_OPT}}:standard{mux=${FORMAT},access=file,dst=${OUTPUT}}" --sub-autodetect-file --sub-autodetect-fuzzy=1 --freetype-rel-fontsize=18 --sout-mux-caching=1500 --file-caching=1500 vlc:quit
exit 0
注意:使用额外的包,如mediainfo和xmlstarlet。
编辑:这是一大堆问题!首先,我不再使用 mediatomb,因为它不稳定,显然你也有同样的问题,因为一段时间后它就无法通过 dlna/upnp 访问了。
无论如何,我建议您在脚本中添加日志记录,以便您可以查看发生了什么。通常,您应该可以在任何地方获取字幕,而不仅仅是在一台设备上,而在另一台设备上则不行。
它以另一种方式适用于文件/媒体类型,可能您只对一定范围的文件进行转码,因为它对某些文件有效,而对其他文件无效。
答案2
如果您使用 vlc 重新编码,只需将 soverlay 添加到您的 vlc 脚本中。将 .srt 命名为与您的电影相同的名称,并将两者放在同一目录中。
示例脚本片段;
#transcode{venc=ffmpeg,vcodec=mp2v,vb=4096,fps=25,soverlay,aenc=ffmpeg, ...
example of file naming;
mymovie.mp4
mymovie.srt
作品。