mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Fix quality bugs
This commit is contained in:
parent
5ff60bd1bc
commit
5d79a7cf39
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
min/batch-download.min.js
vendored
2
min/batch-download.min.js
vendored
File diff suppressed because one or more lines are too long
@ -12,7 +12,7 @@
|
|||||||
"auto-draw.min.js": "AE72CF2623DF2D15AD4AF82D125FFAF7EF5B1E6B36D9E9AC646AC98AA6AA8698",
|
"auto-draw.min.js": "AE72CF2623DF2D15AD4AF82D125FFAF7EF5B1E6B36D9E9AC646AC98AA6AA8698",
|
||||||
"auto-play.min.js": "DC9938AC15DADDC9D88DCA0C9BE64BE142C37D32CB85E42E23DAB2A7378531E5",
|
"auto-play.min.js": "DC9938AC15DADDC9D88DCA0C9BE64BE142C37D32CB85E42E23DAB2A7378531E5",
|
||||||
"bangumi-timeline.vue.min.js": "753B8C96AFB3E6AC4C9507576D12B6CBB207BC1CC3FE5885C419E99C65BCD547",
|
"bangumi-timeline.vue.min.js": "753B8C96AFB3E6AC4C9507576D12B6CBB207BC1CC3FE5885C419E99C65BCD547",
|
||||||
"batch-download.min.js": "44F0F3C9CFC0DD3B841A0CA24F506918E8F8AB44ABEED43D03464B3BC88CCD40",
|
"batch-download.min.js": "A93E6C2030A9C80D8B9187A47D6B19A74BCF93F34C614C96F76F725D5DE0FB0C",
|
||||||
"biliplus-redirect.min.js": "9882D14DAC5C103212A101A5168883C41B4B3B2737FD5F222DC343D0304FF8AF",
|
"biliplus-redirect.min.js": "9882D14DAC5C103212A101A5168883C41B4B3B2737FD5F222DC343D0304FF8AF",
|
||||||
"blackboard.min.js": "8BB9CCDE72302AE7DE39D66F9231EFB82BA27DDA799BA4AAAC06F6DE802661BF",
|
"blackboard.min.js": "8BB9CCDE72302AE7DE39D66F9231EFB82BA27DDA799BA4AAAC06F6DE802661BF",
|
||||||
"blackboard.vue.min.js": "84A30D5A6F322A3C083FC1100E9FF51233ECD08AFBD89A6449AD2388ACCC8522",
|
"blackboard.vue.min.js": "84A30D5A6F322A3C083FC1100E9FF51233ECD08AFBD89A6449AD2388ACCC8522",
|
||||||
@ -71,7 +71,7 @@
|
|||||||
"download-subtitle.min.js": "4B99A00FEEA40C6D577AC8BD8DFFD34D91B75E150C7848B965D58B0096DF762C",
|
"download-subtitle.min.js": "4B99A00FEEA40C6D577AC8BD8DFFD34D91B75E150C7848B965D58B0096DF762C",
|
||||||
"download-video.min.css": "8B68CCDADACC3D84BC1AC661C3E46CD3EBEB657CC89F244B05D756B0ECF4069C",
|
"download-video.min.css": "8B68CCDADACC3D84BC1AC661C3E46CD3EBEB657CC89F244B05D756B0ECF4069C",
|
||||||
"download-video.min.html": "D5542056B00352B37B9BAF05D823832B477FD10E8F6C179A02A4B1ADBB6F0761",
|
"download-video.min.html": "D5542056B00352B37B9BAF05D823832B477FD10E8F6C179A02A4B1ADBB6F0761",
|
||||||
"download-video.min.js": "A4356AF7EF2EE2298377673D134656D9D989E268002128B0D2B8B2AB47BE44B7",
|
"download-video.min.js": "17E76FB8966626D13C0AF0547C91AA94539697BFB52EF0A290C65C7BC730B250",
|
||||||
"download-video-package.min.js": "B10FF11DE7DFBACEC38F195B8E836511E527215B5E177CB1D223D14F30EB1435",
|
"download-video-package.min.js": "B10FF11DE7DFBACEC38F195B8E836511E527215B5E177CB1D223D14F30EB1435",
|
||||||
"dpi-img.vue.min.js": "11DF7577B754D8C01E8331E4FDAC9494E72523099845A0D6B0D897849CD841D6",
|
"dpi-img.vue.min.js": "11DF7577B754D8C01E8331E4FDAC9494E72523099845A0D6B0D897849CD841D6",
|
||||||
"expand-danmaku.min.js": "B21658C40085AEA8DC49652AE62EB8610BB2EBEAF7A9C9AF69EF3B11E08EEC8D",
|
"expand-danmaku.min.js": "B21658C40085AEA8DC49652AE62EB8610BB2EBEAF7A9C9AF69EF3B11E08EEC8D",
|
||||||
@ -212,7 +212,7 @@
|
|||||||
"v-dropdown.vue.min.js": "DE6DF6A2081FEE6AB802A355FEC5FF87B7FDE054BC01AB145379DB6634A83133",
|
"v-dropdown.vue.min.js": "DE6DF6A2081FEE6AB802A355FEC5FF87B7FDE054BC01AB145379DB6634A83133",
|
||||||
"video-card.vue.min.js": "C335B564D4D625D4AE26D15A4031898479EEE81A84AB43A7D4D8D144C32B5D6F",
|
"video-card.vue.min.js": "C335B564D4D625D4AE26D15A4031898479EEE81A84AB43A7D4D8D144C32B5D6F",
|
||||||
"video-card-info.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
"video-card-info.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
||||||
"video-dash.min.js": "010621860893DE3E324090F01CCDE542B6AE7F2115F44D76A634C9D541980BBA",
|
"video-dash.min.js": "8F657BDA87B5DE18F8978B02B311F491F9D23302DB0E38C5A62CA1BCB5F56726",
|
||||||
"video-downloader-fragment.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
"video-downloader-fragment.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
||||||
"video-info.min.js": "EDF4176D830A516FBE476576B1944E09997309A543233DDF298FF23213B08CFC",
|
"video-info.min.js": "EDF4176D830A516FBE476576B1944E09997309A543233DDF298FF23213B08CFC",
|
||||||
"video-list.vue.min.js": "9B0FB6AC3D3CD8D0250CBBC787D5BE823C46216CD71B9E8DCAC75AFE1BE5A9EA",
|
"video-list.vue.min.js": "9B0FB6AC3D3CD8D0250CBBC787D5BE823C46216CD71B9E8DCAC75AFE1BE5A9EA",
|
||||||
|
|||||||
BIN
min/bundle.zip
BIN
min/bundle.zip
Binary file not shown.
2
min/download-video.min.js
vendored
2
min/download-video.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/video-dash.min.js
vendored
2
min/video-dash.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>{return(t,e)=>{const a=t=>{return{url:t.downloadUrl,backupUrls:t.backupUrls,length:t.duration,size:Math.trunc(t.bandWidth*t.duration/8)}};const r=e=>{console.log(e.videoDashes);const r=(()=>{const a=e=>e.videoCodec===t.downloadVideoDashCodec;if(e.videoDashes.some(a)){return e.videoDashes.filter(a).sort(ascendingSort(t=>t.bandWidth))[0]}else{return e.videoDashes.sort(ascendingSort(t=>t.bandWidth))[0]}})();const o=e.audioDashes.sort(descendingSort(t=>t.bandWidth))[0];return[a(r),a(o)]};const o=async(t,a)=>{const r=await Ajax.getJsonWithCredentials(t);const o=r.data||r.result||r;if(r.code!==0||!o.dash){throw new Error("DASH api failed")}const d=o.accept_quality;if(!d.includes(a)){throw new Error("没有找到请求的清晰度")}if(o.quality!==a){const{throwQualityError:t}=await e.importAsync("quality-errors");t(a)}const s=o.accept_description;const c=s[d.indexOf(a)];const n=o.dash.duration;const i=o.dash.video.filter(t=>t.id===a).map(t=>{const e=(()=>{switch(t.codecid){case 12:return"HEVC/H.265";default:case 7:return"AVC/H.264"}})();const r={quality:a,qualityText:c,width:t.width,height:t.height,codecs:t.codecs,codecId:t.codecid,bandWidth:t.bandwidth,frameRate:t.frameRate,backupUrls:(t.backupUrl||t.backup_url||[]).forEach(t=>t.replace("http:","https:")),downloadUrl:(t.baseUrl||t.base_url||"").replace("http:","https:"),duration:n,videoCodec:e};return r});const h=o.dash.audio.map(t=>{return{bandWidth:t.bandwidth,codecs:t.codecs,codecId:t.codecid,backupUrls:(t.backupUrl||t.backup_url||[]).forEach(t=>t.replace("http:","https:")),downloadUrl:(t.baseUrl||t.base_url||"").replace("http:","https:"),duration:n}});return{videoDashes:i,audioDashes:h}};return{export:{getDashInfo:o,dashToFragments:r}}}})();
|
(()=>{return(t,e)=>{const a=t=>{return{url:t.downloadUrl,backupUrls:t.backupUrls,length:t.duration,size:Math.trunc(t.bandWidth*t.duration/8)}};const r=e=>{console.log(e.videoDashes);const r=(()=>{const a=e=>e.videoCodec===t.downloadVideoDashCodec;if(e.videoDashes.some(a)){return e.videoDashes.filter(a).sort(ascendingSort(t=>t.bandWidth))[0]}else{return e.videoDashes.sort(ascendingSort(t=>t.bandWidth))[0]}})();const o=e.audioDashes.sort(descendingSort(t=>t.bandWidth))[0];return[a(r),a(o)]};const o=async(t,a,r=false)=>{const o=await Ajax.getJsonWithCredentials(t);const d=o.data||o.result||o;if(o.code!==0||!d.dash){throw new Error("DASH api failed")}const s=d.accept_quality;if(!s.includes(a)&&!r){throw new Error("没有找到请求的清晰度")}if(d.quality!==a&&!r){const{throwQualityError:t}=await e.importAsync("quality-errors");t(a)}const c=d.accept_description;const n=c[s.indexOf(a)];const i=d.dash.duration;const h=d.dash.video.filter(t=>t.id===(r?d.quality:a)).map(t=>{const e=(()=>{switch(t.codecid){case 12:return"HEVC/H.265";default:case 7:return"AVC/H.264"}})();const r={quality:a,qualityText:n,width:t.width,height:t.height,codecs:t.codecs,codecId:t.codecid,bandWidth:t.bandwidth,frameRate:t.frameRate,backupUrls:(t.backupUrl||t.backup_url||[]).forEach(t=>t.replace("http:","https:")),downloadUrl:(t.baseUrl||t.base_url||"").replace("http:","https:"),duration:i,videoCodec:e};return r});const l=d.dash.audio.map(t=>{return{bandWidth:t.bandwidth,codecs:t.codecs,codecId:t.codecid,backupUrls:(t.backupUrl||t.backup_url||[]).forEach(t=>t.replace("http:","https:")),downloadUrl:(t.baseUrl||t.base_url||"").replace("http:","https:"),duration:i}});return{videoDashes:h,audioDashes:l}};return{export:{getDashInfo:o,dashToFragments:r}}}})();
|
||||||
@ -163,7 +163,7 @@ class VideoEpisodeBatch extends Batch {
|
|||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const { getDashInfo, dashToFragments } = await import('./video-dash')
|
const { getDashInfo, dashToFragments } = await import('./video-dash')
|
||||||
const info = await getDashInfo(url, typeof quality === 'string' ? parseInt(quality) : quality)
|
const info = await getDashInfo(url, typeof quality === 'string' ? parseInt(quality) : quality, true)
|
||||||
fragments = dashToFragments(info)
|
fragments = dashToFragments(info)
|
||||||
}
|
}
|
||||||
result.push({
|
result.push({
|
||||||
|
|||||||
@ -784,13 +784,18 @@ async function loadPanel() {
|
|||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
getManualFormat() {
|
||||||
|
let format: VideoFormat | undefined
|
||||||
|
format = allFormats.find(f => f.displayName === this.manualQualityModel.value)
|
||||||
|
if (!format) {
|
||||||
|
console.error(`No format found. model value = ${this.manualQualityModel.value}`)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
return format
|
||||||
|
},
|
||||||
getFormat() {
|
getFormat() {
|
||||||
let format: VideoFormat | undefined
|
let format: VideoFormat | undefined
|
||||||
if (this.selectedTab.name === 'manual') {
|
format = formats.find(f => f.displayName === this.qualityModel.value)
|
||||||
format = allFormats.find(f => f.displayName === this.manualQualityModel.value)
|
|
||||||
} else {
|
|
||||||
format = formats.find(f => f.displayName === this.qualityModel.value)
|
|
||||||
}
|
|
||||||
if (!format) {
|
if (!format) {
|
||||||
console.error(`No format found. model value = ${this.qualityModel.value}`)
|
console.error(`No format found. model value = ${this.qualityModel.value}`)
|
||||||
return null
|
return null
|
||||||
@ -1003,7 +1008,7 @@ async function loadPanel() {
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
default:
|
default:
|
||||||
case 'aria2': {
|
case 'aria2': {
|
||||||
const result = await batch.collectAria2(this.getFormat().quality, false) as string
|
const result = await batch.collectAria2(this.getManualFormat().quality, false) as string
|
||||||
await DownloadVideoPackage.single(
|
await DownloadVideoPackage.single(
|
||||||
'manual-exports.txt',
|
'manual-exports.txt',
|
||||||
new Blob([result], { type: 'text/plain' }),
|
new Blob([result], { type: 'text/plain' }),
|
||||||
@ -1012,7 +1017,7 @@ async function loadPanel() {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
case 'aria2RPC': {
|
case 'aria2RPC': {
|
||||||
await batch.collectAria2(this.getFormat().quality, true)
|
await batch.collectAria2(this.getManualFormat().quality, true)
|
||||||
Toast.success(`成功发送了批量请求.`, 'aria2 RPC', 3000)
|
Toast.success(`成功发送了批量请求.`, 'aria2 RPC', 3000)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,17 +41,17 @@ export const dashToFragments = (dashes: { videoDashes: VideoDash[], audioDashes:
|
|||||||
const audio = dashes.audioDashes.sort(descendingSort(d => d.bandWidth))[0]
|
const audio = dashes.audioDashes.sort(descendingSort(d => d.bandWidth))[0]
|
||||||
return [dashToFragment(video), dashToFragment(audio)]
|
return [dashToFragment(video), dashToFragment(audio)]
|
||||||
}
|
}
|
||||||
export const getDashInfo = async (api: string, quality: number) => {
|
export const getDashInfo = async (api: string, quality: number, allowLowerQuality = false) => {
|
||||||
const json = await Ajax.getJsonWithCredentials(api)
|
const json = await Ajax.getJsonWithCredentials(api)
|
||||||
const data = json.data || json.result || json
|
const data = json.data || json.result || json
|
||||||
if (json.code !== 0 || !data.dash) {
|
if (json.code !== 0 || !data.dash) {
|
||||||
throw new Error('DASH api failed')
|
throw new Error('DASH api failed')
|
||||||
}
|
}
|
||||||
const qualities = data.accept_quality as number[]
|
const qualities = data.accept_quality as number[]
|
||||||
if (!qualities.includes(quality)) {
|
if (!qualities.includes(quality) && !allowLowerQuality) {
|
||||||
throw new Error('没有找到请求的清晰度')
|
throw new Error('没有找到请求的清晰度')
|
||||||
}
|
}
|
||||||
if (data.quality !== quality) {
|
if (data.quality !== quality && !allowLowerQuality) {
|
||||||
const { throwQualityError } = await import('./quality-errors')
|
const { throwQualityError } = await import('./quality-errors')
|
||||||
throwQualityError(quality)
|
throwQualityError(quality)
|
||||||
}
|
}
|
||||||
@ -59,7 +59,7 @@ export const getDashInfo = async (api: string, quality: number) => {
|
|||||||
const qualityText = qualityTexts[qualities.indexOf(quality)]
|
const qualityText = qualityTexts[qualities.indexOf(quality)]
|
||||||
const duration = data.dash.duration
|
const duration = data.dash.duration
|
||||||
const videoDashes: VideoDash[] = data.dash.video
|
const videoDashes: VideoDash[] = data.dash.video
|
||||||
.filter((d: any) => d.id === quality)
|
.filter((d: any) => d.id === (allowLowerQuality ? data.quality : quality))
|
||||||
.map((d: any) => {
|
.map((d: any) => {
|
||||||
const videoCodec: DashCodec = (() => {
|
const videoCodec: DashCodec = (() => {
|
||||||
switch (d.codecid) {
|
switch (d.codecid) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user