mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-13 07:46:17 -08:00
Fix subtitle merging issue
This commit is contained in:
1 parent
780124d84b
commit
7ba3098212
5 files changed
+104
-82
No files matched your search
@@ -12,12 +12,14 @@ var art = new Artplayer({
|
||||
name: 'japanese',
|
||||
url: '/assets/sample/subtitle.jp.srt',
|
||||
}
|
||||
]
|
||||
],
|
||||
onMerge(trees) {
|
||||
console.log(trees)
|
||||
}
|
||||
})
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
// 自定义你自己的样式,请勿复制以下代码
|
||||
// Customize your own style, please do not copy the following code
|
||||
const style = `
|
||||
|
||||
@@ -158,8 +158,8 @@ function unescape(str) {
|
||||
const reg = new RegExp(`(${Object.keys(map).join("|")})`, "g");
|
||||
return str.replace(reg, (tag)=>map[tag] || tag);
|
||||
}
|
||||
async function loadSubtitleAsVtt(option) {
|
||||
const { getExt, srtToVtt, assToVtt } = Artplayer.utils;
|
||||
async function loadSubtitleAsVtt(option, art) {
|
||||
const { getExt, srtToVtt, assToVtt } = art.constructor.utils;
|
||||
const response = await fetch(option.url);
|
||||
const buffer = await response.arrayBuffer();
|
||||
const decoder = new TextDecoder(option.encoding || "utf-8");
|
||||
@@ -175,13 +175,12 @@ async function loadSubtitleAsVtt(option) {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
function mergeVtts(vtts, subtitles) {
|
||||
function mergeTrees(trees, subtitles) {
|
||||
const parser = new (0, _parser.WebVTTParser)();
|
||||
const seri = new (0, _parser.WebVTTSerializer)();
|
||||
const result = parser.parse("", "metadata");
|
||||
for(let i = 0; i < vtts.length; i++){
|
||||
for(let i = 0; i < trees.length; i++){
|
||||
const tree = trees[i];
|
||||
const option = subtitles[i];
|
||||
const tree = parser.parse(vtts[i], "metadata");
|
||||
for(let j = 0; j < tree.cues.length; j++){
|
||||
const cue = tree.cues[j];
|
||||
for(let k = 0; k < cue.tree.children.length; k++){
|
||||
@@ -192,66 +191,44 @@ function mergeVtts(vtts, subtitles) {
|
||||
if (result.cues.length === 0) result.cues = tree.cues;
|
||||
else for(let l = 0; l < result.cues.length; l++)result.cues[l].tree.children.push(...tree.cues[l]?.tree?.children || []);
|
||||
}
|
||||
return seri.serialize(result.cues);
|
||||
return result;
|
||||
}
|
||||
function artplayerPluginMultipleSubtitles({ subtitles }) {
|
||||
function artplayerPluginMultipleSubtitles({ subtitles, onMerge = ()=>null }) {
|
||||
return async (art)=>{
|
||||
const vtts = await Promise.all(subtitles.map(loadSubtitleAsVtt));
|
||||
const vtt = mergeVtts(vtts, subtitles);
|
||||
const url = URL.createObjectURL(new Blob([
|
||||
vtt
|
||||
], {
|
||||
type: "text/vtt"
|
||||
}));
|
||||
art.option.subtitle.escape = false;
|
||||
art.subtitle.init({
|
||||
...art.option.subtitle,
|
||||
url,
|
||||
type: "vtt",
|
||||
onVttLoad: unescape
|
||||
});
|
||||
const vtts = await Promise.all(subtitles.map((option)=>loadSubtitleAsVtt(option, art)));
|
||||
const parser = new (0, _parser.WebVTTParser)();
|
||||
const trees = vtts.map((vtt)=>parser.parse(vtt, "metadata"));
|
||||
const seri = new (0, _parser.WebVTTSerializer)();
|
||||
const tree = onMerge(trees, subtitles) || mergeTrees(trees, subtitles);
|
||||
if (tree?.cues?.length) {
|
||||
const vtt = seri.serialize(tree.cues);
|
||||
const url = URL.createObjectURL(new Blob([
|
||||
vtt
|
||||
], {
|
||||
type: "text/vtt"
|
||||
}));
|
||||
art.option.subtitle.escape = false;
|
||||
art.subtitle.init({
|
||||
...art.option.subtitle,
|
||||
url,
|
||||
type: "vtt",
|
||||
onVttLoad: unescape
|
||||
});
|
||||
} else throw new Error("No subtitle found");
|
||||
};
|
||||
}
|
||||
artplayerPluginMultipleSubtitles.env = "development";
|
||||
artplayerPluginMultipleSubtitles.version = "1.0.0";
|
||||
artplayerPluginMultipleSubtitles.build = "2023-11-23 22:22:14";
|
||||
artplayerPluginMultipleSubtitles.build = "2023-11-24 00:15:21";
|
||||
artplayerPluginMultipleSubtitles.WebVTTParser = (0, _parser.WebVTTParser);
|
||||
artplayerPluginMultipleSubtitles.WebVTTSerializer = (0, _parser.WebVTTSerializer);
|
||||
if (typeof window !== "undefined") window["artplayerPluginMultipleSubtitles"] = artplayerPluginMultipleSubtitles;
|
||||
|
||||
},{"@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6","./parser":"eko7u"}],"5dUr6":[function(require,module,exports) {
|
||||
exports.interopDefault = function(a) {
|
||||
return a && a.__esModule ? a : {
|
||||
default: a
|
||||
};
|
||||
};
|
||||
exports.defineInteropFlag = function(a) {
|
||||
Object.defineProperty(a, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
};
|
||||
exports.exportAll = function(source, dest) {
|
||||
Object.keys(source).forEach(function(key) {
|
||||
if (key === "default" || key === "__esModule" || dest.hasOwnProperty(key)) return;
|
||||
Object.defineProperty(dest, key, {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return source[key];
|
||||
}
|
||||
});
|
||||
});
|
||||
return dest;
|
||||
};
|
||||
exports.export = function(dest, destName, get) {
|
||||
Object.defineProperty(dest, destName, {
|
||||
enumerable: true,
|
||||
get: get
|
||||
});
|
||||
};
|
||||
|
||||
},{}],"eko7u":[function(require,module,exports) {
|
||||
},{"./parser":"eko7u","@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"eko7u":[function(require,module,exports) {
|
||||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/publicdomain/zero/1.0/
|
||||
// Not intended to be fast, but if you can make it faster, please help out!
|
||||
(function() {
|
||||
/* eslint-disable */ (function() {
|
||||
var defaultCueSettings = {
|
||||
direction: "horizontal",
|
||||
snapToLines: true,
|
||||
@@ -325,6 +302,7 @@ exports.export = function(dest, destName, get) {
|
||||
Not part of the specification's parser as these would just be ignored. However,
|
||||
we want them to be conforming and not get "Cue identifier cannot be standalone".
|
||||
*/ if (/^NOTE($|[ \t])/.test(cue.id)) {
|
||||
// .startsWith fails in Chrome
|
||||
linePos++;
|
||||
while(lines[linePos] != "" && lines[linePos] != undefined){
|
||||
if (lines[linePos].indexOf("-->") != -1) err("Cannot have timestamp in a comment.");
|
||||
@@ -506,12 +484,14 @@ exports.export = function(dest, destName, get) {
|
||||
return;
|
||||
}
|
||||
if (setting == "vertical") {
|
||||
// writing direction
|
||||
if (value != "rl" && value != "lr") {
|
||||
err("Writing direction can only be set to 'rl' or 'rl'.");
|
||||
continue;
|
||||
}
|
||||
cue.direction = value;
|
||||
} else if (setting == "line") {
|
||||
// line position and optionally line alignment
|
||||
if (/,/.test(value)) {
|
||||
var comp = value.split(",");
|
||||
value = comp[0];
|
||||
@@ -562,6 +542,7 @@ exports.export = function(dest, destName, get) {
|
||||
cue.linePosition = parseFloat(numVal);
|
||||
if (parseFloat(numVal).toString() !== numVal) cue.nonSerializable = true;
|
||||
} else if (setting == "position") {
|
||||
// text position and optional positionAlign
|
||||
if (/,/.test(value)) {
|
||||
var comp = value.split(",");
|
||||
value = comp[0];
|
||||
@@ -593,6 +574,7 @@ exports.export = function(dest, destName, get) {
|
||||
}
|
||||
cue.textPosition = parseFloat(numVal);
|
||||
} else if (setting == "size") {
|
||||
// size
|
||||
if (value[value.length - 1] != "%") {
|
||||
err("Size must be a percentage.");
|
||||
continue;
|
||||
@@ -615,6 +597,7 @@ exports.export = function(dest, destName, get) {
|
||||
}
|
||||
cue.size = size;
|
||||
} else if (setting == "align") {
|
||||
// alignment
|
||||
var alignValues = [
|
||||
"start",
|
||||
"center",
|
||||
@@ -725,13 +708,11 @@ exports.export = function(dest, destName, get) {
|
||||
else if (name == "v") {
|
||||
if (inScope("v")) err("<v> cannot be nested inside itself.");
|
||||
attach(token);
|
||||
current.value = token[3] // annotation
|
||||
;
|
||||
current.value = token[3]; // annotation
|
||||
if (!token[3]) err("<v> requires an annotation.");
|
||||
} else if (name == "lang") {
|
||||
attach(token);
|
||||
current.value = token[3] // language
|
||||
;
|
||||
current.value = token[3]; // language
|
||||
} else err("Incorrect start tag.");
|
||||
} else if (token[0] == "end tag") {
|
||||
if (mode == "chapters") err("End tags not allowed in chapter title text.");
|
||||
@@ -795,7 +776,8 @@ exports.export = function(dest, destName, get) {
|
||||
if (m = buffer.match(/^&#(x?[0-9]+)$/)) // we prepend "0" so that x20 be interpreted as hexadecim (0x20)
|
||||
result += String.fromCharCode("0" + m[1]);
|
||||
else if (self.entities[buffer + c]) result += self.entities[buffer + c];
|
||||
else if (m = Object.keys(entities).find((n)=>buffer.startsWith(n))) result += self.entities[m] + buffer.slice(m.length) + c;
|
||||
else if (m = Object.keys(entities).find((n)=>buffer.startsWith(n))) // partial match
|
||||
result += self.entities[m] + buffer.slice(m.length) + c;
|
||||
else {
|
||||
err("Incorrect escape.");
|
||||
result += buffer + ";";
|
||||
@@ -891,8 +873,7 @@ exports.export = function(dest, destName, get) {
|
||||
result
|
||||
];
|
||||
} else result += c;
|
||||
} else err("Never happens.") // The joke is it might.
|
||||
;
|
||||
} else err("Never happens."); // The joke is it might.
|
||||
// 8
|
||||
pos++;
|
||||
}
|
||||
@@ -957,6 +938,36 @@ exports.export = function(dest, destName, get) {
|
||||
exportify(exports);
|
||||
})();
|
||||
|
||||
},{}],"5dUr6":[function(require,module,exports) {
|
||||
exports.interopDefault = function(a) {
|
||||
return a && a.__esModule ? a : {
|
||||
default: a
|
||||
};
|
||||
};
|
||||
exports.defineInteropFlag = function(a) {
|
||||
Object.defineProperty(a, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
};
|
||||
exports.exportAll = function(source, dest) {
|
||||
Object.keys(source).forEach(function(key) {
|
||||
if (key === "default" || key === "__esModule" || dest.hasOwnProperty(key)) return;
|
||||
Object.defineProperty(dest, key, {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return source[key];
|
||||
}
|
||||
});
|
||||
});
|
||||
return dest;
|
||||
};
|
||||
exports.export = function(dest, destName, get) {
|
||||
Object.defineProperty(dest, destName, {
|
||||
enumerable: true,
|
||||
get: get
|
||||
});
|
||||
};
|
||||
|
||||
},{}]},["LGGZX"], "LGGZX", "parcelRequire4dc0")
|
||||
|
||||
//# sourceMappingURL=index.js.map
|
||||
@@ -1 +1 @@
|
||||
{"mappings":"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 truncated
|
||||
{"mappings":"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 truncated
|
||||
@@ -33,14 +33,13 @@ async function loadSubtitleAsVtt(option, art) {
|
||||
}
|
||||
}
|
||||
|
||||
function mergeVtts(vtts, subtitles) {
|
||||
function mergeTrees(trees, subtitles) {
|
||||
const parser = new WebVTTParser();
|
||||
const seri = new WebVTTSerializer();
|
||||
const result = parser.parse('', 'metadata');
|
||||
|
||||
for (let i = 0; i < vtts.length; i++) {
|
||||
for (let i = 0; i < trees.length; i++) {
|
||||
const tree = trees[i];
|
||||
const option = subtitles[i];
|
||||
const tree = parser.parse(vtts[i], 'metadata');
|
||||
|
||||
for (let j = 0; j < tree.cues.length; j++) {
|
||||
const cue = tree.cues[j];
|
||||
@@ -59,28 +58,37 @@ function mergeVtts(vtts, subtitles) {
|
||||
}
|
||||
}
|
||||
|
||||
return seri.serialize(result.cues);
|
||||
return result;
|
||||
}
|
||||
|
||||
export default function artplayerPluginMultipleSubtitles({ subtitles }) {
|
||||
export default function artplayerPluginMultipleSubtitles({ subtitles, onMerge = () => null }) {
|
||||
return async (art) => {
|
||||
const vtts = await Promise.all(subtitles.map((option) => loadSubtitleAsVtt(option, art)));
|
||||
const vtt = mergeVtts(vtts, subtitles);
|
||||
const url = URL.createObjectURL(new Blob([vtt], { type: 'text/vtt' }));
|
||||
|
||||
art.option.subtitle.escape = false;
|
||||
|
||||
art.subtitle.init({
|
||||
...art.option.subtitle,
|
||||
url,
|
||||
type: 'vtt',
|
||||
onVttLoad: unescape,
|
||||
});
|
||||
const parser = new WebVTTParser();
|
||||
const trees = vtts.map((vtt) => parser.parse(vtt, 'metadata'));
|
||||
const seri = new WebVTTSerializer();
|
||||
const tree = onMerge(trees, subtitles) || mergeTrees(trees, subtitles);
|
||||
if (tree?.cues?.length) {
|
||||
const vtt = seri.serialize(tree.cues);
|
||||
const url = URL.createObjectURL(new Blob([vtt], { type: 'text/vtt' }));
|
||||
art.option.subtitle.escape = false;
|
||||
art.subtitle.init({
|
||||
...art.option.subtitle,
|
||||
url,
|
||||
type: 'vtt',
|
||||
onVttLoad: unescape,
|
||||
});
|
||||
} else {
|
||||
throw new Error('No subtitle found');
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
artplayerPluginMultipleSubtitles.env = process.env.NODE_ENV;
|
||||
artplayerPluginMultipleSubtitles.version = process.env.APP_VER;
|
||||
artplayerPluginMultipleSubtitles.build = process.env.BUILD_DATE;
|
||||
artplayerPluginMultipleSubtitles.WebVTTParser = WebVTTParser;
|
||||
artplayerPluginMultipleSubtitles.WebVTTSerializer = WebVTTSerializer;
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
window['artplayerPluginMultipleSubtitles'] = artplayerPluginMultipleSubtitles;
|
||||
|
||||
Vendored
+1
@@ -9,6 +9,7 @@ declare const artplayerPluginMultipleSubtitles: (option: {
|
||||
name?: string;
|
||||
type?: 'vtt' | 'srt' | 'ass';
|
||||
encoding?: string;
|
||||
onParser?(...args: object[]): object;
|
||||
}[];
|
||||
}) => (art: Artplayer) => {
|
||||
name: 'artplayerPluginMultipleSubtitles';
|
||||
|
||||
Reference in new issue
Block a user