bpking1 / embyExternalUrl

some emby/jellyfin scripts
MIT License
675 stars 121 forks source link

内封字幕显示不了 #362

Closed z-x-f closed 6 days ago

z-x-f commented 1 week ago

您好,我的搭建环境是使用的cd2挂载,然后auto_symlink生成strm,strm指向的是本地文件。现在直链播放都正常。 现象是有些内封字幕的视频,通过浏览器播放的时候没字幕,但是没字幕的时候也不一样,有的可以选字幕但不显示字幕,有的直接没字幕选项。通过windows emby theater播放的时候,上面web播放有选项没字幕的,可以正常出现字幕,web播放无字幕选项的,emby theater也没有。而这些视频通过infuse添加emby服务器播放的时候,都可以正常显示字幕。 求助这些不能显示字幕的视频我该从哪方面排查问题呢? 谢谢!

z-x-f commented 1 week ago

关了签名后发现emby theater可以正常显示字幕 web还是不行, https://192.168.1.33:8443/emby/Videos/76022/4a6a991475e32085e4f10cc135010798/Subtitles/2/0/Stream.ass?api_key=8309b6e4996f498a909054bd457cc3ec 这个一直正在处理

chen3861229 commented 1 week ago

字幕这块其实老大难问题了,从脚本一开始就是这样,根本原因在于 emby 官方客户端对于内封字幕外挂字幕的支持很局限,它是通过https://192.168.1.33:8443/emby/Videos/76022/4a6a991475e32085e4f10cc135010798/Subtitles/2/0/Stream.ass?api_key=8309b6e4996f498a909054bd457cc3ec这样的接口分离处理的,而内封字幕emby 的处理更加奇葩,调用字幕接口时是由服务端访问这个媒体文件,从媒体内部使用FFmpeg提取为单独的字幕文件并返回的,在 rclone/cd2 挂载媒体的环境下是没问题的,提到的关了签名后发现emby theater可以正常显示字幕,这个应该是STRM下特定出现的了,原因也是调用字幕接口时是由服务端访问这个媒体文件,而web还是不行这个不知道是否是测试时被脚本中字幕缓存所影响,可以重启emby服务端nginx试一下,排查方法的话,基于调用字幕接口时是由服务端访问这个媒体文件来说,emby 服务端日志中应该有详细信息,例如关了签名后发现emby theater可以正常显示字幕之前,日志中应该有字幕提取之类的报错信息

z-x-f commented 1 week ago

开了签名果然日志里有报错了

2024-09-03 08:37:45.818 Info Server: http/1.1 GET http://host3/emby/Videos/76016/d8ceac65ed78c406966f3c5cbfabace4/Subtitles/2/0/Stream.ass?api_key=x_secret1_x. Accept=*/*, Connection=close, Host=host3, User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36, Accept-Encoding=gzip, deflate, br, zstd, Accept-Language=zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7, X-Real-IP=host2, X-Forwarded-For=host2, X-Forwarded-Proto=https, X-Forwarded-Protocol=https, X-Forwarded-Host=host4, sec-fetch-site=same-origin, sec-fetch-mode=cors, sec-fetch-dest=empty, priority=u=0, i
2024-09-03 08:37:45.973 Info SubtitleEncoder: ProcessRun 'ffmpeg-subtitle_extract' Execute: /app/emby/bin/ffmpeg -loglevel +timing -y -i "https://myalist.com/test.mkv" -map 0:2 -vn -an -c:s:0 copy "/config/cache/temp/f4f86971b8204a2eb1a3a02fdaf58a88.ass"
2024-09-03 08:37:46.053 Info SubtitleEncoder: ProcessRun 'ffmpeg-subtitle_extract' Process exited with code 1 - Failed
2024-09-03 08:37:46.054 Error SubtitleEncoder: ffmpeg subtitle extraction failed for https://myalist.com/test.mkv to /config/cache/temp/f4f86971b8204a2eb1a3a02fdaf58a88.ass
2024-09-03 08:37:46.054 Error SubtitleEncoder: ProcessRun 'ffmpeg-subtitle_extract' Output:

2024-09-03 08:37:46.054 Error SubtitleEncoder: ProcessRun 'ffmpeg-subtitle_extract' Error Output:
    08:37:45.983 ffmpeg version 5.1-emby_2023_06_25 Copyright (c) 2000-2022 the FFmpeg developers and softworkz for Emby LLC
    08:37:45.983   built with gcc 10.3.0 (crosstool-NG 1.25.0)
    08:37:45.984 Execution Date: 2024-09-03 08:37:45
    08:37:46.051 [matroska,webm @ 0x26c1180] Format matroska,webm detected only with low score of 1, misdetection possible!
    08:37:46.051 Truncating packet of size 9071 to 47
    08:37:46.051 [matroska,webm @ 0x26c1180] EBML header parsing failed
    08:37:46.051 https://myalist.com/test.mkv: Invalid data found when processing input
    08:37:46.051 EXIT

2024-09-03 08:37:46.062 Error App: Error getting subtitles
    *** Error Report ***
    Version: 4.8.8.0
    Command line: /app/emby/system/EmbyServer.dll -programdata /config -ffdetect /app/emby/bin/ffdetect -ffmpeg /app/emby/bin/ffmpeg -ffprobe /app/emby/bin/ffprobe -restartexitcode 3
    Operating system: Linux version 6.8.0-40-generic (buildd@lcy02-amd64-078) (x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0, GNU ld (GNU Binutils for Ubunt
    Framework: .NET 6.0.25
    OS/Process: x64/x64
    Runtime: app/emby/system/System.Private.CoreLib.dll
    Processor count: 8
    Data path: /config
    Application path: /app/emby/system
    System.Exception: System.Exception: ffmpeg subtitle extraction failed for https://myalist.com/test.mkv to /config/cache/temp/f4f86971b8204a2eb1a3a02fdaf58a88.ass
       at Emby.Server.MediaEncoding.Subtitles.SubtitleEncoder.ExtractTextSubtitleInternal(String inputPath, Boolean isAudio, String inputSubtitleCodec, MediaStream subtitleStream, SubtitleMediaTypes outputCodec, String outputPath, Nullable`1 startTime, Nullable`1 endTime, Boolean preserveOriginalTimestamps, CancellationToken cancellationToken)
       at Emby.Server.MediaEncoding.Subtitles.SubtitleEncoder.ExtractTextSubtitle(ReadOnlyMemory`1 inputPath, Boolean isAudio, String inputSubtitleCodec, MediaProtocol protocol, MediaStream subtitleStream, SubtitleMediaTypes outputCodec, String outputPath, Nullable`1 startTime, Nullable`1 endTime, Boolean preserveOriginalTimestamps, CancellationToken cancellationToken)
       at Emby.Server.MediaEncoding.Subtitles.SubtitleEncoder.GetReadableFile(String mediaPath, MediaProtocol mediaSourceProtocol, Boolean isAudio, IDictionary`2 requestHeaders, MediaStream subtitleStream, String outputFormat, Int64 startTimeTicks, Int64 endTimeTicks, Boolean preserveOriginalTimestamps, EncodingContext encodingContext, CancellationToken cancellationToken)
       at Emby.Server.MediaEncoding.Subtitles.SubtitleEncoder.GetSubtitles(String inputPath, MediaProtocol inputProtocol, Boolean isAudio, IDictionary`2 requestHeaders, MediaStream subtitleStream, String outputFormat, Int64 startTimeTicks, Int64 endTimeTicks, Boolean preserveOriginalTimestamps, EncodingContext encodingContext, CancellationToken cancellationToken)
       at Emby.Api.Subtitles.SubtitleService.GetSubtitles(GetSubtitle request, CancellationToken cancellationToken)
       at Emby.Api.Subtitles.SubtitleService.Get(GetSubtitle request)
    Source: Emby.Server.MediaEncoding
    TargetSite: Void MoveNext()

关闭签名后,重启emby、清空nginx缓存,web看内封字幕还是不行,不过外挂字幕倒是没问题。。。。

xianglongwei commented 1 week ago

我也发现了这个问题,我测试使用软连接,但是CD2软连接emby读取不到软连接文件?内外都映射路径都是相同的。奇怪,进emby 容器内查看是显示 ??? 这是咋回事呢?

xianglongwei commented 1 week ago

我发现使用yamba播放器可以正常显示字幕,你可以试试