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-play.min.js": "DC9938AC15DADDC9D88DCA0C9BE64BE142C37D32CB85E42E23DAB2A7378531E5",
|
||||
"bangumi-timeline.vue.min.js": "753B8C96AFB3E6AC4C9507576D12B6CBB207BC1CC3FE5885C419E99C65BCD547",
|
||||
"batch-download.min.js": "44F0F3C9CFC0DD3B841A0CA24F506918E8F8AB44ABEED43D03464B3BC88CCD40",
|
||||
"batch-download.min.js": "A93E6C2030A9C80D8B9187A47D6B19A74BCF93F34C614C96F76F725D5DE0FB0C",
|
||||
"biliplus-redirect.min.js": "9882D14DAC5C103212A101A5168883C41B4B3B2737FD5F222DC343D0304FF8AF",
|
||||
"blackboard.min.js": "8BB9CCDE72302AE7DE39D66F9231EFB82BA27DDA799BA4AAAC06F6DE802661BF",
|
||||
"blackboard.vue.min.js": "84A30D5A6F322A3C083FC1100E9FF51233ECD08AFBD89A6449AD2388ACCC8522",
|
||||
@ -71,7 +71,7 @@
|
||||
"download-subtitle.min.js": "4B99A00FEEA40C6D577AC8BD8DFFD34D91B75E150C7848B965D58B0096DF762C",
|
||||
"download-video.min.css": "8B68CCDADACC3D84BC1AC661C3E46CD3EBEB657CC89F244B05D756B0ECF4069C",
|
||||
"download-video.min.html": "D5542056B00352B37B9BAF05D823832B477FD10E8F6C179A02A4B1ADBB6F0761",
|
||||
"download-video.min.js": "A4356AF7EF2EE2298377673D134656D9D989E268002128B0D2B8B2AB47BE44B7",
|
||||
"download-video.min.js": "17E76FB8966626D13C0AF0547C91AA94539697BFB52EF0A290C65C7BC730B250",
|
||||
"download-video-package.min.js": "B10FF11DE7DFBACEC38F195B8E836511E527215B5E177CB1D223D14F30EB1435",
|
||||
"dpi-img.vue.min.js": "11DF7577B754D8C01E8331E4FDAC9494E72523099845A0D6B0D897849CD841D6",
|
||||
"expand-danmaku.min.js": "B21658C40085AEA8DC49652AE62EB8610BB2EBEAF7A9C9AF69EF3B11E08EEC8D",
|
||||
@ -212,7 +212,7 @@
|
||||
"v-dropdown.vue.min.js": "DE6DF6A2081FEE6AB802A355FEC5FF87B7FDE054BC01AB145379DB6634A83133",
|
||||
"video-card.vue.min.js": "C335B564D4D625D4AE26D15A4031898479EEE81A84AB43A7D4D8D144C32B5D6F",
|
||||
"video-card-info.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
||||
"video-dash.min.js": "010621860893DE3E324090F01CCDE542B6AE7F2115F44D76A634C9D541980BBA",
|
||||
"video-dash.min.js": "8F657BDA87B5DE18F8978B02B311F491F9D23302DB0E38C5A62CA1BCB5F56726",
|
||||
"video-downloader-fragment.min.js": "13B755C0EE0CA018AE65251E168BAF3395FEA2EB4FAD6949AADD752F61B8819B",
|
||||
"video-info.min.js": "EDF4176D830A516FBE476576B1944E09997309A543233DDF298FF23213B08CFC",
|
||||
"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 {
|
||||
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)
|
||||
}
|
||||
result.push({
|
||||
|
||||
@ -784,13 +784,18 @@ async function loadPanel() {
|
||||
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() {
|
||||
let format: VideoFormat | undefined
|
||||
if (this.selectedTab.name === 'manual') {
|
||||
format = allFormats.find(f => f.displayName === this.manualQualityModel.value)
|
||||
} else {
|
||||
format = formats.find(f => f.displayName === this.qualityModel.value)
|
||||
}
|
||||
format = formats.find(f => f.displayName === this.qualityModel.value)
|
||||
if (!format) {
|
||||
console.error(`No format found. model value = ${this.qualityModel.value}`)
|
||||
return null
|
||||
@ -1003,7 +1008,7 @@ async function loadPanel() {
|
||||
switch (type) {
|
||||
default:
|
||||
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(
|
||||
'manual-exports.txt',
|
||||
new Blob([result], { type: 'text/plain' }),
|
||||
@ -1012,7 +1017,7 @@ async function loadPanel() {
|
||||
break
|
||||
}
|
||||
case 'aria2RPC': {
|
||||
await batch.collectAria2(this.getFormat().quality, true)
|
||||
await batch.collectAria2(this.getManualFormat().quality, true)
|
||||
Toast.success(`成功发送了批量请求.`, 'aria2 RPC', 3000)
|
||||
break
|
||||
}
|
||||
|
||||
@ -41,17 +41,17 @@ export const dashToFragments = (dashes: { videoDashes: VideoDash[], audioDashes:
|
||||
const audio = dashes.audioDashes.sort(descendingSort(d => d.bandWidth))[0]
|
||||
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 data = json.data || json.result || json
|
||||
if (json.code !== 0 || !data.dash) {
|
||||
throw new Error('DASH api failed')
|
||||
}
|
||||
const qualities = data.accept_quality as number[]
|
||||
if (!qualities.includes(quality)) {
|
||||
if (!qualities.includes(quality) && !allowLowerQuality) {
|
||||
throw new Error('没有找到请求的清晰度')
|
||||
}
|
||||
if (data.quality !== quality) {
|
||||
if (data.quality !== quality && !allowLowerQuality) {
|
||||
const { throwQualityError } = await import('./quality-errors')
|
||||
throwQualityError(quality)
|
||||
}
|
||||
@ -59,7 +59,7 @@ export const getDashInfo = async (api: string, quality: number) => {
|
||||
const qualityText = qualityTexts[qualities.indexOf(quality)]
|
||||
const duration = data.dash.duration
|
||||
const videoDashes: VideoDash[] = data.dash.video
|
||||
.filter((d: any) => d.id === quality)
|
||||
.filter((d: any) => d.id === (allowLowerQuality ? data.quality : quality))
|
||||
.map((d: any) => {
|
||||
const videoCodec: DashCodec = (() => {
|
||||
switch (d.codecid) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user