@@ -59,24 +59,34 @@ const findChiSub = (subTitles) => {
5959 * 9,subrip,eng
6060 * 10,subrip,eng,SDH
6161 * 23,subrip,eng,English[CC]
62- * 如果同时有SDH和非SDH版本,选非SDH版本。
62+ * 选择策略:
63+ * 1. 过滤掉空字幕(只有当 NUMBER_OF_FRAMES 存在且 < 10 时才过滤)
64+ * 2. 如果同时有SDH和非SDH版本,选非SDH版本
65+ * 3. 按原始顺序选择第一个可用的字幕
6366 */
6467const findEngSub = ( subTitles ) => {
6568 const englishSubs = subTitles . filter ( sub => sub . code === 'eng' ) ;
6669
6770 if ( englishSubs . length === 0 ) return null ;
68- if ( englishSubs . length === 1 ) return {
69- index : englishSubs [ 0 ] . index ,
70- duration : englishSubs [ 0 ] . duration ,
71- } ;
72-
73- // Filter out SDH subtitles if there are multiple English options
74- const nonSDHSubs = englishSubs . filter ( sub =>
75- ! sub . name . includes ( 'sdh' )
76- ) ;
7771
78- // Return first non-SDH sub if available, otherwise first English sub
79- const targetSub = nonSDHSubs [ 0 ] || englishSubs [ 0 ] ;
72+ // 过滤掉空字幕
73+ const nonEmpty = englishSubs . filter ( sub => {
74+ const frames = Number ( sub . frames ) ;
75+ if ( ! frames ) return true ;
76+ return frames >= 10 ;
77+ } ) ;
78+
79+ const candidatePool = nonEmpty . length > 0 ? nonEmpty : englishSubs ;
80+
81+ if ( candidatePool . length === 0 ) return null ;
82+
83+ // 多个英文字幕时,优先去除 SDH
84+ const nonSDHSubs = candidatePool . filter ( sub => ! sub . name . includes ( 'sdh' ) ) ;
85+ const finalPool = nonSDHSubs . length > 0 ? nonSDHSubs : candidatePool ;
86+
87+ // 按原始顺序选择第一个可用的字幕
88+ const targetSub = finalPool [ 0 ] ;
89+
8090 return targetSub ? {
8191 index : targetSub . index ,
8292 duration : targetSub . duration
0 commit comments