修改字幕乱码

This commit is contained in:
Harvey committed 2020-09-04 12:02:54 +08:00
1 parent ed009f9d4d
commit 92686dfcb6
13 files changed
+207 -162

No files matched your search

+1
View File
@@ -77,6 +77,7 @@ var art = new Artplayer({
style: {
color: '#03A9F4',
},
encoding: 'utf-8',
bilingual: true,
},
highlight: [
+70 -69
View File
@@ -1,12 +1,12 @@
1
00:00:01,500 --> 00:00:03,950
歌名:One More Time,One More Chance
〖愿往事重来〗
One More Time,One More Chance
愿往事重来
2
00:00:04,000 --> 00:00:05,950
【新海诚动画】『秒速5センチメートル』
《秒速5厘米》主题曲
秒速5センチメートル
秒速5厘米
3
00:00:06,000 --> 00:00:08,950
@@ -14,7 +14,8 @@
4
00:00:09,000 --> 00:00:11,950
作词|作曲|演唱:山崎まさよし <山崎将义>
山崎まさよし
山崎将义
5
00:00:12,000 --> 00:00:15,950
@@ -23,22 +24,22 @@
6
00:00:16,000 --> 00:00:20,250
これ以上何をう失(し)なえば
【还要再失去什么】
还要再失去什么
7
00:00:20,300 --> 00:00:23,250
心は许(ゆる)されるの
【才能让心得到宽恕?】
才能让心得到宽恕?
8
00:00:23,300 --> 00:00:27,250
どれ程(ほど)の痛(いた)みならば
【还要再怎样痛苦】
还要再怎样痛苦
9
00:00:27,300 --> 00:00:30,250
もう一度君に会(あ)える
【才能与你再次相见】
才能与你再次相见
10
00:00:30,300 --> 00:00:33,250
@@ -47,7 +48,7 @@ One more time
11
00:00:33,300 --> 00:00:37,950
季节(きせつ)よ うつろわないで
【不愿看到季节的变迁】
不愿看到季节的变迁
12
00:00:38,000 --> 00:00:41,050
@@ -56,27 +57,27 @@ One more time
13
00:00:41,100 --> 00:00:45,250
ふざけあった时间(じかん)よ
【曾与你嬉闹的时光啊】
曾与你嬉闹的时光啊
14
00:00:45,300 --> 00:00:49,250
くいちがうときはいつも
【每次争执的时候】
每次争执的时候
15
00:00:49,300 --> 00:00:53,100
仆が先(さき)に折(お)れたね
【总是我先让步】
总是我先让步
16
00:00:53,150 --> 00:00:56,250
わがままな性格(せいかく)が
【你那任性的性格】
你那任性的性格
17
00:00:56,300 --> 00:00:59,250
なおさら爱(いと)しくさせた
【反而令你更加可爱】
反而令你更加可爱
18
00:00:59,300 --> 00:01:02,950
@@ -85,7 +86,7 @@ One more chance
19
00:01:03,000 --> 00:01:07,250
记忆(きおく)に足(あし)を取(と)られて
【回忆绊住我的脚步】
回忆绊住我的脚步
20
00:01:07,300 --> 00:01:10,250
@@ -94,52 +95,52 @@ One more chance
21
00:01:10,300 --> 00:01:14,950
次(つぎ)の场所を选(えら)べない
【无法选择下个地方】
无法选择下个地方
22
00:01:15,000 --> 00:01:18,250
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
23
00:01:18,300 --> 00:01:21,950
どっかに君の姿(すがた)を
【寻觅着你的身影】
寻觅着你的身影
24
00:01:22,000 --> 00:01:23,950
向(むか)いのホーム
【对面的月台上】
对面的月台上
25
00:01:24,000 --> 00:01:25,950
路地裏(ろじうら)の窓(まど)
【在小巷的窗口里】
在小巷的窗口里
26
00:01:26,000 --> 00:01:29,250
こんなとこにいるはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
27
00:01:29,300 --> 00:01:33,250
愿(ねが)いがもしも叶(かな)うなら
【若愿望能够实现】
若愿望能够实现
28
00:01:33,300 --> 00:01:36,550
いますぐ君のもとへ
【好想马上去到你身边】
好想马上去到你身边
29
00:01:36,600 --> 00:01:40,250
できないことは もう何もない
【如今我再也不会有丝毫退缩】
如今我再也不会有丝毫退缩
30
00:01:40,300 --> 00:01:47,300
すべてかけて抱きしめてみせるよ
【我会不顾一切将你紧紧拥抱】
我会不顾一切将你紧紧拥抱
31
00:01:47,350 --> 00:01:51,950
@@ -152,22 +153,22 @@ One more chance
33
00:01:55,300 --> 00:01:59,250
寂(さび)しさ纷(まぎ)らすだけなら
【如果只是为了排遣寂寞】
如果只是为了排遣寂寞
34
00:01:59,300 --> 00:02:02,950
谁でもいいはずなのに
【其实不管是谁都无所谓】
其实不管是谁都无所谓
35
00:02:03,000 --> 00:02:07,250
星が落(お)ちそうな夜(よる)だから
【唯有在星辰仿佛要坠落的夜晚】
唯有在星辰仿佛要坠落的夜晚
36
00:02:07,300 --> 00:02:10,250
自分(じぶん)をいつわれない
【我无法欺骗自己】
我无法欺骗自己
37
00:02:10,300 --> 00:02:13,250
@@ -176,7 +177,7 @@ One more time
38
00:02:13,300 --> 00:02:17,250
季节(きせつ)よ うつろわないで
【不愿看到季节的变迁】
不愿看到季节的变迁
39
00:02:17,300 --> 00:02:20,250
@@ -185,7 +186,7 @@ One more time
40
00:02:20,300 --> 00:02:24,600
ふざけあった时间(じかん)よ
【曾与你嬉闹的时光啊】
曾与你嬉闹的时光啊
41
00:02:24,650 --> 00:02:25,250
@@ -194,46 +195,46 @@ One more time
42
00:02:25,300 --> 00:02:29,050
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
43
00:02:29,100 --> 00:02:32,250
どっかに君(きみ)の姿(すがた)を
【寻觅着你的身影】
寻觅着你的身影
44
00:02:32,300 --> 00:02:34,250
交差点(こうさてん)でも
【每个十字路口】
每个十字路口
45
00:02:34,300 --> 00:02:36,250
梦の中でも 【每次梦境之中】
梦の中でも 每次梦境之中
46
00:02:36,300 --> 00:02:39,950
こんなとこにいるはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
47
00:02:40,000 --> 00:02:43,250
奇迹(きせき)がもしも起(お)こるなら
【若奇迹将会发生】
若奇迹将会发生
48
00:02:43,300 --> 00:02:46,950
今すぐ君に见せたい
【我希望马上就能见到你】
我希望马上就能见到你
49
00:02:47,000 --> 00:02:50,250
新しい朝(あさ) これからの仆
【无论崭新的清晨 还是今后的自己】
无论崭新的清晨 还是今后的自己
50
00:02:50,300 --> 00:02:57,250
言えなかった「好き」という言叶も
【或是那句没能说出口的「喜欢你」】
或是那句没能说出口的「喜欢你」
51
00:02:57,300 --> 00:03:04,450
@@ -246,102 +247,102 @@ One more time
53
00:03:06,000 --> 00:03:13,950
夏の想い出がまわる
【夏日的回忆在脑海中回旋】
夏日的回忆在脑海中回旋
54
00:03:14,000 --> 00:03:20,950
ふいに消(き)えた鼓动(こどう)
【刹那间消失的悸动】
刹那间消失的悸动
55
00:03:21,000 --> 00:03:24,950
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
57
00:03:25,000 --> 00:03:27,950
どっかに君の姿(すがた)を
【寻觅着你的身影】
寻觅着你的身影
58
00:03:28,000 --> 00:03:29,950
明(あ)け方(がた)の街(まち)
【在拂晓的街头】
在拂晓的街头
59
00:03:30,000 --> 00:03:31,950
桜木町(さくらぎちょう)で
【在种满樱树的小镇】
在种满樱树的小镇
60
00:03:32,000 --> 00:03:35,950
こんなとこに来(く)るはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
61
00:03:36,000 --> 00:03:39,250
愿(ねが)いがもしも叶(かな)うなら
【若愿望能够实现】
若愿望能够实现
62
00:03:39,300 --> 00:03:43,050
今すぐ君のもとへ
【现在马上去到你身边】
现在马上去到你身边
63
00:03:43,100 --> 00:03:46,800
できないことは もう何(なに)もない
【如今我再也不会有丝毫退缩】
如今我再也不会有丝毫退缩
64
00:03:46,850 --> 00:03:50,600
すべてかけて抱きしめてみせるよ
【我会不顾一切紧紧将你拥抱】
我会不顾一切紧紧将你拥抱
65
00:03:50,650 --> 00:03:54,250
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
66
00:03:54,300 --> 00:03:57,700
どっかに君のかけらを
【寻觅着你的片断】
寻觅着你的片断
67
00:03:57,750 --> 00:03:59,250
旅先(たびさき)の店(みせ)
【在旅途中的小店】
在旅途中的小店
68
00:03:59,300 --> 00:04:01,450
新闻(しんぶん)の隅(すみ)
【在报纸的角落】
在报纸的角落
69
00:04:01,500 --> 00:04:04,950
こんなとこにあるはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
70
00:04:05,000 --> 00:04:08,250
奇迹(きせき)がもしも起(お)こるなら
【若奇迹将会发生】
若奇迹将会发生
71
00:04:08,300 --> 00:04:12,250
今すぐ君に见せたい
【我希望现在就能见到你】
我希望现在就能见到你
72
00:04:12,300 --> 00:04:16,050
新しい朝(あさ) これからの仆
【无论崭新的清晨 还是今后的自己】
无论崭新的清晨 还是今后的自己
73
00:04:16,100 --> 00:04:19,400
言えなかった「好き」という言叶も
【或是那句没能说出口的「喜欢你」】
或是那句没能说出口的「喜欢你」
74
00:04:19,450 --> 00:04:19,950
@@ -350,42 +351,42 @@ One more time
75
00:04:20,000 --> 00:04:22,950
いつでも捜(さが)してしまう
【总是在一直寻觅】
总是在一直寻觅
76
00:04:23,000 --> 00:04:26,950
どっかに君の笑颜(えがお)を
【寻觅着你的笑容】
寻觅着你的笑容
77
00:04:27,000 --> 00:04:30,250
急行(きゅうこう)待ちの 踏切(ふみきり)あたり
【哪怕在等待列车通过的铁路道口】
哪怕在等待列车通过的铁路道口
78
00:04:30,300 --> 00:04:34,250
こんなとこにいるはずもないのに
【虽然明明知道你不可能在那里】
虽然明明知道你不可能在那里
79
00:04:34,300 --> 00:04:37,950
命(いのち)が缲(く)り返(かえ)すならば
【如果生命能够重来】
如果生命能够重来
80
00:04:38,000 --> 00:04:41,050
何度(なんど)も君のもとへ
【无论几次我都要去你身边】
无论几次我都要去你身边
81
00:04:41,100 --> 00:04:45,150
欲(ほ)しいものなど もう何もない
【那时我一定别无所求】
那时我一定别无所求
82
00:04:45,200 --> 00:04:52,750
君のほかに大切なものなど
【再也没有什么比你更加重要】
再也没有什么比你更加重要
83
00:04:52,800 --> 00:05:10,950
+69 -68
View File
@@ -3,12 +3,12 @@
1
00:00:01.500 --> 00:00:03.950
歌名:One More Time,One More Chance
〖愿往事重来〗
愿往事重来
2
00:00:04.000 --> 00:00:05.950
【新海诚动画】『秒速5センチメートル』
《秒速5厘米》主题曲
秒速5センチメートル
秒速5厘米
3
00:00:06.000 --> 00:00:08.950
@@ -16,7 +16,8 @@
4
00:00:09.000 --> 00:00:11.950
作词|作曲|演唱:山崎まさよし <山崎将义>
山崎まさよし
山崎将义
5
00:00:12.000 --> 00:00:15.950
@@ -25,22 +26,22 @@
6
00:00:16.000 --> 00:00:20.250
これ以上何をう失(し)なえば
【还要再失去什么】
还要再失去什么
7
00:00:20.300 --> 00:00:23.250
心は许(ゆる)されるの
【才能让心得到宽恕?】
才能让心得到宽恕?
8
00:00:23.300 --> 00:00:27.250
どれ程(ほど)の痛(いた)みならば
【还要再怎样痛苦】
还要再怎样痛苦
9
00:00:27.300 --> 00:00:30.250
もう一度君に会(あ)える
【才能与你再次相见】
才能与你再次相见
10
00:00:30.300 --> 00:00:33.250
@@ -49,7 +50,7 @@ One more time
11
00:00:33.300 --> 00:00:37.950
季节(きせつ)よ うつろわないで
【不愿看到季节的变迁】
不愿看到季节的变迁
12
00:00:38.000 --> 00:00:41.050
@@ -58,27 +59,27 @@ One more time
13
00:00:41.100 --> 00:00:45.250
ふざけあった时间(じかん)よ
【曾与你嬉闹的时光啊】
曾与你嬉闹的时光啊
14
00:00:45.300 --> 00:00:49.250
くいちがうときはいつも
【每次争执的时候】
每次争执的时候
15
00:00:49.300 --> 00:00:53.100
仆が先(さき)に折(お)れたね
【总是我先让步】
总是我先让步
16
00:00:53.150 --> 00:00:56.250
わがままな性格(せいかく)が
【你那任性的性格】
你那任性的性格
17
00:00:56.300 --> 00:00:59.250
なおさら爱(いと)しくさせた
【反而令你更加可爱】
反而令你更加可爱
18
00:00:59.300 --> 00:01:02.950
@@ -87,7 +88,7 @@ One more chance
19
00:01:03.000 --> 00:01:07.250
记忆(きおく)に足(あし)を取(と)られて
【回忆绊住我的脚步】
回忆绊住我的脚步
20
00:01:07.300 --> 00:01:10.250
@@ -96,52 +97,52 @@ One more chance
21
00:01:10.300 --> 00:01:14.950
次(つぎ)の场所を选(えら)べない
【无法选择下个地方】
无法选择下个地方
22
00:01:15.000 --> 00:01:18.250
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
23
00:01:18.300 --> 00:01:21.950
どっかに君の姿(すがた)を
【寻觅着你的身影】
寻觅着你的身影
24
00:01:22.000 --> 00:01:23.950
向(むか)いのホーム
【对面的月台上】
对面的月台上
25
00:01:24.000 --> 00:01:25.950
路地裏(ろじうら)の窓(まど)
【在小巷的窗口里】
在小巷的窗口里
26
00:01:26.000 --> 00:01:29.250
こんなとこにいるはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
27
00:01:29.300 --> 00:01:33.250
愿(ねが)いがもしも叶(かな)うなら
【若愿望能够实现】
若愿望能够实现
28
00:01:33.300 --> 00:01:36.550
いますぐ君のもとへ
【好想马上去到你身边】
好想马上去到你身边
29
00:01:36.600 --> 00:01:40.250
できないことは もう何もない
【如今我再也不会有丝毫退缩】
如今我再也不会有丝毫退缩
30
00:01:40.300 --> 00:01:47.300
すべてかけて抱きしめてみせるよ
【我会不顾一切将你紧紧拥抱】
我会不顾一切将你紧紧拥抱
31
00:01:47.350 --> 00:01:51.950
@@ -154,22 +155,22 @@ One more chance
33
00:01:55.300 --> 00:01:59.250
寂(さび)しさ纷(まぎ)らすだけなら
【如果只是为了排遣寂寞】
如果只是为了排遣寂寞
34
00:01:59.300 --> 00:02:02.950
谁でもいいはずなのに
【其实不管是谁都无所谓】
其实不管是谁都无所谓
35
00:02:03.000 --> 00:02:07.250
星が落(お)ちそうな夜(よる)だから
【唯有在星辰仿佛要坠落的夜晚】
唯有在星辰仿佛要坠落的夜晚
36
00:02:07.300 --> 00:02:10.250
自分(じぶん)をいつわれない
【我无法欺骗自己】
我无法欺骗自己
37
00:02:10.300 --> 00:02:13.250
@@ -178,7 +179,7 @@ One more time
38
00:02:13.300 --> 00:02:17.250
季节(きせつ)よ うつろわないで
【不愿看到季节的变迁】
不愿看到季节的变迁
39
00:02:17.300 --> 00:02:20.250
@@ -187,7 +188,7 @@ One more time
40
00:02:20.300 --> 00:02:24.600
ふざけあった时间(じかん)よ
【曾与你嬉闹的时光啊】
曾与你嬉闹的时光啊
41
00:02:24.650 --> 00:02:25.250
@@ -196,46 +197,46 @@ One more time
42
00:02:25.300 --> 00:02:29.050
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
43
00:02:29.100 --> 00:02:32.250
どっかに君(きみ)の姿(すがた)を
【寻觅着你的身影】
寻觅着你的身影
44
00:02:32.300 --> 00:02:34.250
交差点(こうさてん)でも
【每个十字路口】
每个十字路口
45
00:02:34.300 --> 00:02:36.250
梦の中でも 【每次梦境之中】
梦の中でも 每次梦境之中
46
00:02:36.300 --> 00:02:39.950
こんなとこにいるはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
47
00:02:40.000 --> 00:02:43.250
奇迹(きせき)がもしも起(お)こるなら
【若奇迹将会发生】
若奇迹将会发生
48
00:02:43.300 --> 00:02:46.950
今すぐ君に见せたい
【我希望马上就能见到你】
我希望马上就能见到你
49
00:02:47.000 --> 00:02:50.250
新しい朝(あさ) これからの仆
【无论崭新的清晨 还是今后的自己】
无论崭新的清晨 还是今后的自己
50
00:02:50.300 --> 00:02:57.250
言えなかった「好き」という言叶も
【或是那句没能说出口的「喜欢你」】
或是那句没能说出口的「喜欢你」
51
00:02:57.300 --> 00:03:04.450
@@ -248,102 +249,102 @@ One more time
53
00:03:06.000 --> 00:03:13.950
夏の想い出がまわる
【夏日的回忆在脑海中回旋】
夏日的回忆在脑海中回旋
54
00:03:14.000 --> 00:03:20.950
ふいに消(き)えた鼓动(こどう)
【刹那间消失的悸动】
刹那间消失的悸动
55
00:03:21.000 --> 00:03:24.950
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
56
00:03:25.000 --> 00:03:27.950
どっかに君の姿(すがた)を
【寻觅着你的身影】
寻觅着你的身影
57
00:03:28.000 --> 00:03:29.950
明(あ)け方(がた)の街(まち)
【在拂晓的街头】
在拂晓的街头
58
00:03:30.000 --> 00:03:31.950
桜木町(さくらぎちょう)で
【在种满樱树的小镇】
在种满樱树的小镇
59
00:03:32.000 --> 00:03:35.950
こんなとこに来(く)るはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
60
00:03:36.000 --> 00:03:39.250
愿(ねが)いがもしも叶(かな)うなら
【若愿望能够实现】
若愿望能够实现
61
00:03:39.300 --> 00:03:43.050
今すぐ君のもとへ
【现在马上去到你身边】
现在马上去到你身边
62
00:03:43.100 --> 00:03:46.800
できないことは もう何(なに)もない
【如今我再也不会有丝毫退缩】
如今我再也不会有丝毫退缩
63
00:03:46.850 --> 00:03:50.600
すべてかけて抱きしめてみせるよ
【我会不顾一切紧紧将你拥抱】
我会不顾一切紧紧将你拥抱
64
00:03:50.650 --> 00:03:54.250
いつでも捜(さが)しているよ
【总是在一直寻觅】
总是在一直寻觅
65
00:03:54.300 --> 00:03:57.700
どっかに君のかけらを
【寻觅着你的片断】
寻觅着你的片断
66
00:03:57.750 --> 00:03:59.250
旅先(たびさき)の店(みせ)
【在旅途中的小店】
在旅途中的小店
67
00:03:59.300 --> 00:04:01.450
新闻(しんぶん)の隅(すみ)
【在报纸的角落】
在报纸的角落
68
00:04:01.500 --> 00:04:04.950
こんなとこにあるはずもないのに
【尽管明知道你不可能在那里】
尽管明知道你不可能在那里
69
00:04:05.000 --> 00:04:08.250
奇迹(きせき)がもしも起(お)こるなら
【若奇迹将会发生】
若奇迹将会发生
70
00:04:08.300 --> 00:04:12.250
今すぐ君に见せたい
【我希望现在就能见到你】
我希望现在就能见到你
71
00:04:12.300 --> 00:04:16.050
新しい朝(あさ) これからの仆
【无论崭新的清晨 还是今后的自己】
无论崭新的清晨 还是今后的自己
72
00:04:16.100 --> 00:04:19.400
言えなかった「好き」という言叶も
【或是那句没能说出口的「喜欢你」】
或是那句没能说出口的「喜欢你」
73
00:04:19.450 --> 00:04:19.950
@@ -352,42 +353,42 @@ One more time
74
00:04:20.000 --> 00:04:22.950
いつでも捜(さが)してしまう
【总是在一直寻觅】
总是在一直寻觅
75
00:04:23.000 --> 00:04:26.950
どっかに君の笑颜(えがお)を
【寻觅着你的笑容】
寻觅着你的笑容
76
00:04:27.000 --> 00:04:30.250
急行(きゅうこう)待ちの 踏切(ふみきり)あたり
【哪怕在等待列车通过的铁路道口】
哪怕在等待列车通过的铁路道口
77
00:04:30.300 --> 00:04:34.250
こんなとこにいるはずもないのに
【虽然明明知道你不可能在那里】
虽然明明知道你不可能在那里
78
00:04:34.300 --> 00:04:37.950
命(いのち)が缲(く)り返(かえ)すならば
【如果生命能够重来】
如果生命能够重来
79
00:04:38.000 --> 00:04:41.050
何度(なんど)も君のもとへ
【无论几次我都要去你身边】
无论几次我都要去你身边
80
00:04:41.100 --> 00:04:45.150
欲(ほ)しいものなど もう何もない
【那时我一定别无所求】
那时我一定别无所求
81
00:04:45.200 --> 00:04:52.750
君のほかに大切なものなど
【再也没有什么比你更加重要】
再也没有什么比你更加重要
82
00:04:52.800 --> 00:05:10.950
+6 -4
View File
@@ -663,10 +663,12 @@ art.plugins.networkMonitor.sample(30000);
Custom subtitle
| propertie | type | Description |
| --------- | -------- | ---------------------------------------- |
| `url` | `String` | Subtitle url, support vtt and srt format |
| `style` | `Object` | Subtitle style |
| propertie | type | Description |
| ----------- | --------- | ---------------------------------------- |
| `url` | `String` | Subtitle url, support vtt and srt format |
| `style` | `Object` | Subtitle style |
| `encoding` | `String` | Subtitle encoding |
| `bilingual` | `Boolean` | Whether bilingual subtitles |
[Run Code](/Configuration.subtitle)
+11 -6
View File
@@ -318,12 +318,14 @@ art.contextmenu.add({
- Type: `Object`
| propertie | type | Description |
| --------- | ---------- | ---------------- |
| `init` | `Function` | Init subtitle |
| `show` | `setter` | Show or hide |
| `switch` | `Function` | Switch subtitle |
| `url` | `getter` | get subtitle url |
| propertie | type | Description |
| ---------- | --------------- | --------------------- |
| `init` | `Function` | Init subtitle |
| `show` | `setter` | Show or hide |
| `switch` | `Function` | Switch subtitle |
| `url` | `getter` | get subtitle url |
| `encoding` | `getter/setter` | Get and set encoding |
| `style` | `Function` | Modify subtitle style |
[Run Code](/Properties.subtitle)
@@ -333,6 +335,7 @@ var art = new Artplayer({
url: '/assets/sample/video.mp4',
subtitle: {
url: '/assets/sample/subtitle.srt',
bilingual: true,
},
controls: [
{
@@ -340,6 +343,7 @@ var art = new Artplayer({
index: 10,
html: 'subtitle 01',
click: function () {
art.subtitle.style('color', 'green');
art.subtitle.switch('/assets/sample/subtitle.srt', 'srt subtitle name');
},
},
@@ -348,6 +352,7 @@ var art = new Artplayer({
index: 20,
html: 'subtitle 02',
click: function () {
art.subtitle.style('color', 'red');
art.subtitle.switch('/assets/sample/subtitle.vtt', 'vtt subtitle name');
},
},
+20 -6
View File
@@ -144,7 +144,7 @@
}
}
var css = ".art-undercover{background:#000;position:fixed;top:0;left:0;display:none;height:100%;width:100%;opacity:.9;z-index:10}.art-video-player{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;margin:0 auto;z-index:20;width:100%;height:100%;outline:0;zoom:1;font-family:Roboto,Arial,Helvetica,sans-serif;color:#eee;text-align:left;direction:ltr;font-size:14px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:5px}.art-video-player ::-webkit-scrollbar-thumb{background-color:#666}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:#ccc}.art-video-player .art-icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1.5}.art-video-player .art-icon svg{fill:#fff}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player>object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}@supports ((-webkit-backdrop-filter:initial) or (backdrop-filter:initial)){.art-video-player .art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:rgba(0,0,0,.7)!important}}.art-video-player .art-video{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;width:100%;height:100%;background-color:#000;cursor:pointer}.art-video-player .art-subtitle{display:none;position:absolute;z-index:20;bottom:10px;width:100%;padding:0 20px;text-align:center;color:#fff;font-size:20px;pointer-events:none;text-shadow:.5px .5px .5px rgba(0,0,0,.5)}.art-video-player .art-subtitle p{word-break:break-all;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;margin:10px 0 0;line-height:1}.art-video-player.art-subtitle-show .art-subtitle{display:block}.art-video-player.art-control-show .art-subtitle{bottom:50px}.art-video-player .art-danmuku{z-index:30}.art-video-player .art-danmuku,.art-video-player .art-layers{position:absolute;left:0;top:0;right:0;bottom:0;width:100%;height:100%;overflow:hidden;pointer-events:none}.art-video-player .art-layers{display:none;z-index:40}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:block}.art-video-player .art-mask{display:none;z-index:50;left:0;top:0;right:0;bottom:0;width:100%;height:100%;overflow:hidden;pointer-events:none}.art-video-player .art-mask,.art-video-player .art-mask .art-state{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute}.art-video-player .art-mask .art-state{right:30px;bottom:55px;width:60px;height:60px;opacity:.6}.art-video-player.art-mask-show .art-mask,.art-video-player .art-mask .art-state{display:-webkit-box;display:-ms-flexbox;display:flex}.art-video-player .art-loading{display:none;position:absolute;z-index:70;left:0;top:0;right:0;bottom:0;width:100%;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:-webkit-box;display:-ms-flexbox;display:flex}.art-video-player .art-bottom{position:absolute;z-index:60;left:0;right:0;bottom:0;height:100px;padding:55px 10px 0;opacity:0;visibility:hidden;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;pointer-events:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom}.art-video-player .art-bottom .art-progress{position:relative;pointer-events:auto}.art-video-player .art-bottom .art-progress .art-control-progress{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:4px;cursor:pointer}.art-video-player .art-bottom .art-progress .art-control-progress .art-control-progress-inner{position:relative;height:50%;width:100%;background:hsla(0,0%,100%,.2)}.art-video-player .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:0;background:hsla(0,0%,100%,.4)}.art-video-player .art-bottom .art-progreLine truncated
var css = ".art-undercover{background:#000;position:fixed;top:0;left:0;display:none;height:100%;width:100%;opacity:.9;z-index:10}.art-video-player{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;margin:0 auto;z-index:20;width:100%;height:100%;outline:0;zoom:1;font-family:Roboto,Arial,Helvetica,sans-serif;color:#eee;text-align:left;direction:ltr;font-size:14px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:manipulation;touch-action:manipulation;-ms-high-contrast-adjust:none}.art-video-player *{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.art-video-player ::-webkit-scrollbar{width:5px}.art-video-player ::-webkit-scrollbar-thumb{background-color:#666}.art-video-player ::-webkit-scrollbar-thumb:hover{background-color:#ccc}.art-video-player .art-icon{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1.5}.art-video-player .art-icon svg{fill:#fff}.art-video-player img{max-width:100%;vertical-align:top}.art-video-player>object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}@supports ((-webkit-backdrop-filter:initial) or (backdrop-filter:initial)){.art-video-player .art-backdrop-filter{-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);background-color:rgba(0,0,0,.7)!important}}.art-video-player .art-video{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;width:100%;height:100%;background-color:#000;cursor:pointer}.art-video-player .art-subtitle{display:none;position:absolute;z-index:20;bottom:10px;width:100%;padding:0 20px;text-align:center;color:#fff;font-size:20px;pointer-events:none;text-shadow:.5px .5px .5px rgba(0,0,0,.5)}.art-video-player .art-subtitle p{word-break:break-all;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;margin:5px 0 0;line-height:1}.art-video-player .art-bilingual p:nth-child(2){font-size:.6em}.art-video-player.art-subtitle-show .art-subtitle{display:block}.art-video-player.art-control-show .art-subtitle{bottom:50px}.art-video-player .art-danmuku{z-index:30}.art-video-player .art-danmuku,.art-video-player .art-layers{position:absolute;left:0;top:0;right:0;bottom:0;width:100%;height:100%;overflow:hidden;pointer-events:none}.art-video-player .art-layers{display:none;z-index:40}.art-video-player .art-layers .art-layer{pointer-events:auto}.art-video-player.art-layer-show .art-layers{display:block}.art-video-player .art-mask{display:none;z-index:50;left:0;top:0;right:0;bottom:0;width:100%;height:100%;overflow:hidden;pointer-events:none}.art-video-player .art-mask,.art-video-player .art-mask .art-state{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute}.art-video-player .art-mask .art-state{right:30px;bottom:55px;width:60px;height:60px;opacity:.6}.art-video-player.art-mask-show .art-mask,.art-video-player .art-mask .art-state{display:-webkit-box;display:-ms-flexbox;display:flex}.art-video-player .art-loading{display:none;position:absolute;z-index:70;left:0;top:0;right:0;bottom:0;width:100%;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;pointer-events:none}.art-video-player.art-loading-show .art-loading{display:-webkit-box;display:-ms-flexbox;display:flex}.art-video-player .art-bottom{position:absolute;z-index:60;left:0;right:0;bottom:0;height:100px;padding:55px 10px 0;opacity:0;visibility:hidden;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;pointer-events:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom}.art-video-player .art-bottom .art-progress{position:relative;pointer-events:auto}.art-video-player .art-bottom .art-progress .art-control-progress{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:4px;cursor:pointer}.art-video-player .art-bottom .art-progress .art-control-progress .art-control-progress-inner{position:relative;height:50%;width:100%;background:hsla(0,0%,100%,.2)}.art-video-player .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:0;backgrounLine truncated
styleInject(css);
var optionValidator = createCommonjsModule(function (module, exports) {
@@ -787,6 +787,7 @@
subtitle: {
url: 'string',
style: 'object',
encoding: 'string',
bilingual: 'boolean'
},
moreVideoAttr: 'object',
@@ -3492,13 +3493,13 @@
}
}, {
key: "switch",
value: function _switch(url, name, ext) {
value: function _switch(url, name, ext, encoding) {
var _this2 = this;
var _this$art = this.art,
i18n = _this$art.i18n,
notice = _this$art.notice;
return this.init(url, ext).then(function (subUrl) {
return this.init(url, ext, encoding).then(function (subUrl) {
if (name) {
notice.show = "".concat(i18n.get('Switch subtitle'), ": ").concat(name);
}
@@ -3510,12 +3511,13 @@
}
}, {
key: "init",
value: function init(url, ext) {
value: function init(url, ext, encoding) {
var _this3 = this;
var _this$art2 = this.art,
notice = _this$art2.notice,
proxy = _this$art2.events.proxy,
subtitle = _this$art2.option.subtitle,
_this$art2$template = _this$art2.template,
$subtitle = _this$art2$template.$subtitle,
$video = _this$art2$template.$video,
@@ -3532,8 +3534,11 @@
}
return fetch(url).then(function (response) {
return response.text();
}).then(function (text) {
return response.arrayBuffer();
}).then(function (buffer) {
var decoder = new TextDecoder(encoding || subtitle.encoding);
var text = decoder.decode(buffer);
_this3.art.emit('subtitleLoad', url);
switch (ext || getExt(url)) {
@@ -3575,6 +3580,14 @@
get: function get() {
return this.textTrack.activeCues[0];
}
}, {
key: "encoding",
get: function get() {
return this.art.option.subtitle.encoding;
},
set: function set(value) {
this.art.option.subtitle.encoding = value;
}
}]);
return Subtitle;
@@ -4758,6 +4771,7 @@
subtitle: {
url: '',
style: {},
encoding: 'utf-8',
bilingual: false
},
moreVideoAttr: {
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/style-inject/dist/style-inject.es.js","../../packages/artplayer/node_modules/option-validator/dist/option-validator.js","../../packages/artplayer/src/utils/emitter.js","../../packages/artplayer/src/utils/compatibility.js","../../packages/artplayer/src/utils/dom.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../packages/artplayer/src/utils/error.js","../../packages/artplayer/src/utils/subtitle.js","../../packages/artplayer/src/utils/file.js","../../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArray.js","../../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../../node_modules/@babel/runtime/helpers/toConsumableArray.js","../../packages/artplayer/src/utils/property.js","../../packages/artplayer/src/utils/time.js","../../packages/artplayer/src/utils/format.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../packages/artplayer/src/scheme/index.js","../../packages/artplayer/src/config/index.js","../../packages/artplayer/src/whitelist.js","../../packages/artplayer/src/template.js","../../packages/artplayer/src/i18n/index.js","../../packages/artplayer/src/player/urlMix.js","../../packages/artplayer/src/player/attrInit.js","../../packages/artplayer/src/player/eventInit.js","../../packages/artplayer/src/player/exclusiveInit.js","../../packages/artplayer/src/player/playMix.js","../../packages/artplayer/src/player/pauseMix.js","../../packages/artplayer/src/player/toggleMix.js","../../packages/artplayer/src/player/seekMix.js","../../packages/artplayer/src/player/volumeMix.js","../../packages/artplayer/src/player/currentTimeMix.js","../../packages/artplayer/src/player/durationMix.js","../../packages/artplayer/src/player/switchMix.js","../../packages/artplayer/src/player/playbackRateMix.js","../../packages/artplayer/src/player/aspectRatioMix.js","../../packages/artplayer/src/player/screenshotMix.js","../../packages/artplayer/node_modules/screenfull/dist/screenfull.js","../../packages/artplayer/src/player/fullscreenMix.js","../../packages/artplayer/src/player/fullscreenWebMix.js","../../packages/artplayer/src/player/fullscreenRotateMix.js","../../packages/artplayer/src/player/pipMix.js","../../packages/artplayer/src/player/loadedMix.js","../../packages/artplayer/src/player/playedMix.js","../../packages/artplayer/src/player/playingMix.js","../../packages/artplayer/src/player/autoSizeMix.js","../../packages/artplayer/src/player/rectMix.js","../../packages/artplayer/src/player/flipMix.js","../../packages/artplayer/src/player/lightMix.js","../../packages/artplayer/src/player/miniMix.js","../../packages/artplayer/src/player/loopMin.js","../../packages/artplayer/src/player/index.js","../../node_modules/@babel/runtime/helpers/superPropBase.js","../../node_modules/@babel/runtime/helpers/get.js","../../packages/artplayer/src/utils/component.js","../../packages/artplayer/src/control/fullscreen.js","../../packages/artplayer/src/control/fullscreenWeb.js","../../packages/artplayer/src/control/pip.js","../../packages/artplayer/src/control/playAndPause.js","../../packages/artplayer/src/control/progress.js","../../packages/artplayer/src/control/subtitle.js","../../packages/artplayer/src/control/time.js","../../packages/artplayer/src/control/volume.js","../../packages/artplayer/src/control/setting.js","../../packages/artplayer/src/control/thumbnails.js","../../packages/artplayer/src/control/screenshot.js","../../packages/artplayer/src/control/quality.js","../../packages/artplayer/src/control/loop.js","../../packages/artplayer/src/control/index.js","../../packages/artplayer/src/contextmenu/playbackRate.js","../../packages/artplayer/src/contextmenu/aspectRatio.js","../../packages/artplayer/src/contextmenu/info.js","../../packages/artplayer/src/contextmenu/version.js","../../packages/artplayer/src/contextmenu/light.js","../../packages/artplayer/src/contextmenu/close.js","../../packages/artplayer/src/contextmenu/index.js","../../packages/artplayer/src/info.js","../../packages/artplayer/src/subtitle.js","../../packages/artplayer/src/events/clickInit.js","../../packages/artplayer/src/events/hoverInit.js","../../packages/artplayer/src/events/mousemoveInit.js","../../packages/artplayer/src/events/resizeInit.js","../../packages/artplayer/src/events/gestureILine truncated
{"version":3,"file":"artplayer.js","sources":["../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../node_modules/@babel/runtime/helpers/typeof.js","../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/inherits.js","../../node_modules/style-inject/dist/style-inject.es.js","../../packages/artplayer/node_modules/option-validator/dist/option-validator.js","../../packages/artplayer/src/utils/emitter.js","../../packages/artplayer/src/utils/compatibility.js","../../packages/artplayer/src/utils/dom.js","../../node_modules/@babel/runtime/helpers/isNativeFunction.js","../../node_modules/@babel/runtime/helpers/construct.js","../../node_modules/@babel/runtime/helpers/wrapNativeSuper.js","../../packages/artplayer/src/utils/error.js","../../packages/artplayer/src/utils/subtitle.js","../../packages/artplayer/src/utils/file.js","../../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArray.js","../../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../../node_modules/@babel/runtime/helpers/toConsumableArray.js","../../packages/artplayer/src/utils/property.js","../../packages/artplayer/src/utils/time.js","../../packages/artplayer/src/utils/format.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../packages/artplayer/src/scheme/index.js","../../packages/artplayer/src/config/index.js","../../packages/artplayer/src/whitelist.js","../../packages/artplayer/src/template.js","../../packages/artplayer/src/i18n/index.js","../../packages/artplayer/src/player/urlMix.js","../../packages/artplayer/src/player/attrInit.js","../../packages/artplayer/src/player/eventInit.js","../../packages/artplayer/src/player/exclusiveInit.js","../../packages/artplayer/src/player/playMix.js","../../packages/artplayer/src/player/pauseMix.js","../../packages/artplayer/src/player/toggleMix.js","../../packages/artplayer/src/player/seekMix.js","../../packages/artplayer/src/player/volumeMix.js","../../packages/artplayer/src/player/currentTimeMix.js","../../packages/artplayer/src/player/durationMix.js","../../packages/artplayer/src/player/switchMix.js","../../packages/artplayer/src/player/playbackRateMix.js","../../packages/artplayer/src/player/aspectRatioMix.js","../../packages/artplayer/src/player/screenshotMix.js","../../packages/artplayer/node_modules/screenfull/dist/screenfull.js","../../packages/artplayer/src/player/fullscreenMix.js","../../packages/artplayer/src/player/fullscreenWebMix.js","../../packages/artplayer/src/player/fullscreenRotateMix.js","../../packages/artplayer/src/player/pipMix.js","../../packages/artplayer/src/player/loadedMix.js","../../packages/artplayer/src/player/playedMix.js","../../packages/artplayer/src/player/playingMix.js","../../packages/artplayer/src/player/autoSizeMix.js","../../packages/artplayer/src/player/rectMix.js","../../packages/artplayer/src/player/flipMix.js","../../packages/artplayer/src/player/lightMix.js","../../packages/artplayer/src/player/miniMix.js","../../packages/artplayer/src/player/loopMin.js","../../packages/artplayer/src/player/index.js","../../node_modules/@babel/runtime/helpers/superPropBase.js","../../node_modules/@babel/runtime/helpers/get.js","../../packages/artplayer/src/utils/component.js","../../packages/artplayer/src/control/fullscreen.js","../../packages/artplayer/src/control/fullscreenWeb.js","../../packages/artplayer/src/control/pip.js","../../packages/artplayer/src/control/playAndPause.js","../../packages/artplayer/src/control/progress.js","../../packages/artplayer/src/control/subtitle.js","../../packages/artplayer/src/control/time.js","../../packages/artplayer/src/control/volume.js","../../packages/artplayer/src/control/setting.js","../../packages/artplayer/src/control/thumbnails.js","../../packages/artplayer/src/control/screenshot.js","../../packages/artplayer/src/control/quality.js","../../packages/artplayer/src/control/loop.js","../../packages/artplayer/src/control/index.js","../../packages/artplayer/src/contextmenu/playbackRate.js","../../packages/artplayer/src/contextmenu/aspectRatio.js","../../packages/artplayer/src/contextmenu/info.js","../../packages/artplayer/src/contextmenu/version.js","../../packages/artplayer/src/contextmenu/light.js","../../packages/artplayer/src/contextmenu/close.js","../../packages/artplayer/src/contextmenu/index.js","../../packages/artplayer/src/info.js","../../packages/artplayer/src/subtitle.js","../../packages/artplayer/src/events/clickInit.js","../../packages/artplayer/src/events/hoverInit.js","../../packages/artplayer/src/events/mousemoveInit.js","../../packages/artplayer/src/events/resizeInit.js","../../packages/artplayer/src/events/gestureILine truncated
+1
View File
@@ -148,6 +148,7 @@ export default class Artplayer extends Emitter {
subtitle: {
url: '',
style: {},
encoding: 'utf-8',
bilingual: false,
},
moreVideoAttr: {
@@ -52,10 +52,10 @@ export default function localSubtitle(art) {
<div class="art-upload-value"></div>
</div>
`,
mounted: $setting => {
mounted: ($setting) => {
const $btn = query('.art-upload-btn', $setting);
const $value = query('.art-upload-value', $setting);
art.on('localSubtitle', file => {
art.on('localSubtitle', (file) => {
$value.textContent = file.name;
$value.title = file.name;
});
+1
View File
@@ -90,6 +90,7 @@ export default {
subtitle: {
url: 'string',
style: 'object',
encoding: 'string',
bilingual: 'boolean',
},
moreVideoAttr: 'object',
+7 -1
View File
@@ -15,11 +15,17 @@
p {
word-break: break-all;
height: fit-content;
margin: 10px 0 0;
margin: 5px 0 0;
line-height: 1;
}
}
.art-bilingual {
p:nth-child(2) {
font-size: 0.6em;
}
}
&.art-subtitle-show {
.art-subtitle {
display: block;
+17 -5
View File
@@ -35,6 +35,14 @@ export default class Subtitle extends Component {
return this.textTrack.activeCues[0];
}
get encoding() {
return this.art.option.subtitle.encoding;
}
set encoding(value) {
this.art.option.subtitle.encoding = value;
}
style(key, value) {
const { $subtitle } = this.art.template;
if (typeof key === 'object') {
@@ -55,9 +63,9 @@ export default class Subtitle extends Component {
}
}
switch(url, name, ext) {
switch(url, name, ext, encoding) {
const { i18n, notice } = this.art;
return this.init(url, ext).then((subUrl) => {
return this.init(url, ext, encoding).then((subUrl) => {
if (name) {
notice.show = `${i18n.get('Switch subtitle')}: ${name}`;
}
@@ -66,10 +74,11 @@ export default class Subtitle extends Component {
});
}
init(url, ext) {
init(url, ext, encoding) {
const {
notice,
events: { proxy },
option: { subtitle },
template: { $subtitle, $video, $track },
} = this.art;
@@ -83,8 +92,11 @@ export default class Subtitle extends Component {
}
return fetch(url)
.then((response) => response.text())
.then((text) => {
.then((response) => response.arrayBuffer())
.then((buffer) => {
const decoder = new TextDecoder(encoding || subtitle.encoding);
const text = decoder.decode(buffer);
this.art.emit('subtitleLoad', url);
switch (ext || getExt(url)) {
case 'srt':
+1
View File
@@ -70,6 +70,7 @@ export default class Artplayer {
subtitle?: {
url: string;
style: object;
encoding: string,
bilingual: boolean,
};
moreVideoAttr?: object;