mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Use mp4/m4a for dash extensions
This commit is contained in:
parent
ec35b9f160
commit
d2acf71d01
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
@ -47,7 +47,7 @@
|
|||||||
"download-video-package.min.js": "B10FF11DE7DFBACEC38F195B8E836511E527215B5E177CB1D223D14F30EB1435",
|
"download-video-package.min.js": "B10FF11DE7DFBACEC38F195B8E836511E527215B5E177CB1D223D14F30EB1435",
|
||||||
"download-video.min.css": "95FF9DA3C1FFF1C1134D70AE3BB609049B7D5D3FBB71CAAAE84C8742C51AD841",
|
"download-video.min.css": "95FF9DA3C1FFF1C1134D70AE3BB609049B7D5D3FBB71CAAAE84C8742C51AD841",
|
||||||
"download-video.min.html": "2727789E8423E8DBC8801FF6AC0D8181AC684A643A83CD446A5D69318DDBF9F6",
|
"download-video.min.html": "2727789E8423E8DBC8801FF6AC0D8181AC684A643A83CD446A5D69318DDBF9F6",
|
||||||
"download-video.min.js": "2485F8AB5A4A4E5E7F40388ACD1657C9ABD1B2279C62BEA4AA3728E80F706C0F",
|
"download-video.min.js": "4013A2F8DB6B2859DF83EFEC32274158ABA1769536D8656537E2FCDF96560AD8",
|
||||||
"dpi-img.vue.min.js": "3D9D93079365DCABA8DC8970F051AD1A7F25C3EFFF850CD1000C4312E9B910DD",
|
"dpi-img.vue.min.js": "3D9D93079365DCABA8DC8970F051AD1A7F25C3EFFF850CD1000C4312E9B910DD",
|
||||||
"expand-danmaku.min.js": "B21658C40085AEA8DC49652AE62EB8610BB2EBEAF7A9C9AF69EF3B11E08EEC8D",
|
"expand-danmaku.min.js": "B21658C40085AEA8DC49652AE62EB8610BB2EBEAF7A9C9AF69EF3B11E08EEC8D",
|
||||||
"expand-description.min.css": "58C7710A50521B80F7D872BDC4C652610D84C4FABC6874BA66DA37B4F8759224",
|
"expand-description.min.css": "58C7710A50521B80F7D872BDC4C652610D84C4FABC6874BA66DA37B4F8759224",
|
||||||
@ -56,7 +56,7 @@
|
|||||||
"feeds-apis.min.js": "ED1FFDEBC22680C5089F9D30CF667535FB99881C96A969DB47BC70BF095A99E8",
|
"feeds-apis.min.js": "ED1FFDEBC22680C5089F9D30CF667535FB99881C96A969DB47BC70BF095A99E8",
|
||||||
"feeds-filter-card.vue.min.js": "3A7F8F402EA46E43B718506329814953C9E358A8AF94088D4E5745D48296D80B",
|
"feeds-filter-card.vue.min.js": "3A7F8F402EA46E43B718506329814953C9E358A8AF94088D4E5745D48296D80B",
|
||||||
"feeds-filter.min.js": "10557E498B8BADA3C1C03E8C1DCD6FB24DBA2DA27A5A03BD861054F7E2989D46",
|
"feeds-filter.min.js": "10557E498B8BADA3C1C03E8C1DCD6FB24DBA2DA27A5A03BD861054F7E2989D46",
|
||||||
"ffmpeg-support.min.js": "E3D90A111457F7093BE2DBBC011B268B497351CCFF987394A34171F77146A9B2",
|
"ffmpeg-support.min.js": "CB33E150098394ABCACE6FC45CC1C6DA1B71012C77265D93F23C555A532016A1",
|
||||||
"fill-with-comments.min.js": "5D52ACB5057267C2EEBA5AA74EEE5D4086215645623560825C25AAA133536F2F",
|
"fill-with-comments.min.js": "5D52ACB5057267C2EEBA5AA74EEE5D4086215645623560825C25AAA133536F2F",
|
||||||
"filter-type-switch.vue.min.js": "E06B00EF48F3CCFACC82B858A266CE0DF48F8332C5900B3AD579330D4C6D3125",
|
"filter-type-switch.vue.min.js": "E06B00EF48F3CCFACC82B858A266CE0DF48F8332C5900B3AD579330D4C6D3125",
|
||||||
"fix-fullscreen.min.js": "C0628A7CABB4421FCBD7663700EF9965C96F6D79979B9F7523A9F9B0B009C8B6",
|
"fix-fullscreen.min.js": "C0628A7CABB4421FCBD7663700EF9965C96F6D79979B9F7523A9F9B0B009C8B6",
|
||||||
|
|||||||
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/ffmpeg-support.min.js
vendored
2
min/ffmpeg-support.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>{return(e,t)=>{const n=(e,t,n)=>{if(e<2){return null}const r=[];for(let s=1;s<=e;s++){r.push(escapeFilename(`file '${t} - ${s}${n}'`))}return r.join("\n")};const r=(e,t)=>{const n=e=>e.fragments.length>1;const r=e.filter(n);if(r.length===0){return null}const s=new Map;r.forEach(e=>{s.set(escapeFilename(`ffmpeg-files-${e.title}.txt`),e.fragments.map((n,r)=>{return escapeFilename(`file '${e.title} - ${r+1}${t}'`)}).join("\n"))});return s};const s=(e,t)=>{const n=[];e.forEach(e=>{e.fragments.forEach((r,s)=>{let i="";if(e.fragments.length>1){i=` - ${s+1}`}n.push(escapeFilename(`file '${e.title}${i}${t}'`))})});return n.join("\n")};return{export:{getFragmentsList:n,getBatchFragmentsList:r,getBatchEpisodesList:s}}}})();
|
(()=>{return(e,t)=>{const n=(e,t,n)=>{if(e<2){return null}const s=[];for(let r=1;r<=e;r++){let e=` - ${r}`;if(n.includes(".m4a")){e=""}s.push(escapeFilename(`file '${t}${e}${n[r-1]}'`))}return s.join("\n")};const s=(e,t)=>{const n=e=>e.fragments.length>1;const s=e.filter(n);if(s.length===0){return null}const r=new Map;s.forEach(e=>{r.set(escapeFilename(`ffmpeg-files-${e.title}.txt`),e.fragments.map((n,s)=>{return escapeFilename(`file '${e.title} - ${s+1}${t[s]}'`)}).join("\n"))});return r};const r=(e,t)=>{const n=[];e.forEach(e=>{e.fragments.forEach((s,r)=>{let i="";if(e.fragments.length>1&&!t.includes(".m4a")){i=` - ${r+1}`}n.push(escapeFilename(`file '${e.title}${i}${t[r]}'`))})});return n.join("\n")};return{export:{getFragmentsList:n,getBatchFragmentsList:s,getBatchEpisodesList:r}}}})();
|
||||||
@ -325,7 +325,7 @@ class VideoDownloader {
|
|||||||
const option = settings.aria2RpcOption
|
const option = settings.aria2RpcOption
|
||||||
const params = this.fragments.map((fragment, index) => {
|
const params = this.fragments.map((fragment, index) => {
|
||||||
let indexNumber = ''
|
let indexNumber = ''
|
||||||
if (this.fragments.length > 1) {
|
if (this.fragments.length > 1 && !this.isDash) {
|
||||||
indexNumber = ' - ' + (index + 1)
|
indexNumber = ' - ' + (index + 1)
|
||||||
}
|
}
|
||||||
const params = []
|
const params = []
|
||||||
@ -355,7 +355,7 @@ class VideoDownloader {
|
|||||||
# https://github.com/the1812/Bilibili-Evolved/
|
# https://github.com/the1812/Bilibili-Evolved/
|
||||||
${this.fragments.map((it, index) => {
|
${this.fragments.map((it, index) => {
|
||||||
let indexNumber = ''
|
let indexNumber = ''
|
||||||
if (this.fragments.length > 1) {
|
if (this.fragments.length > 1 && !this.isDash) {
|
||||||
indexNumber = ' - ' + (index + 1)
|
indexNumber = ' - ' + (index + 1)
|
||||||
}
|
}
|
||||||
return `
|
return `
|
||||||
@ -380,10 +380,11 @@ ${it.url}
|
|||||||
const match = [
|
const match = [
|
||||||
'.flv',
|
'.flv',
|
||||||
'.mp4',
|
'.mp4',
|
||||||
'.m4s',
|
|
||||||
].find(it => f.url.includes(it))
|
].find(it => f.url.includes(it))
|
||||||
if (match) {
|
if (match) {
|
||||||
return match
|
return match
|
||||||
|
} else if (f.url.includes('.m4s')) {
|
||||||
|
return this.fragments.indexOf(f) === 0 ? '.mp4' : '.m4a'
|
||||||
} else {
|
} else {
|
||||||
console.warn('No extension detected.')
|
console.warn('No extension detected.')
|
||||||
return '.flv'
|
return '.flv'
|
||||||
@ -488,14 +489,12 @@ ${it.url}
|
|||||||
downloadedData.forEach((data, index) => {
|
downloadedData.forEach((data, index) => {
|
||||||
let filename: string
|
let filename: string
|
||||||
const fragment = this.fragments[index]
|
const fragment = this.fragments[index]
|
||||||
if (downloadedData.length > 1) {
|
if (downloadedData.length > 1 && !this.isDash) {
|
||||||
filename = `${title} - ${index + 1}${this.extension(fragment)}`
|
filename = `${title} - ${index + 1}${this.extension(fragment)}`
|
||||||
} else {
|
} else {
|
||||||
filename = `${title}${this.extension(fragment)}`
|
filename = `${title}${this.extension(fragment)}`
|
||||||
}
|
}
|
||||||
pack.add(filename, new Blob(Array.isArray(data) ? data : [data], {
|
pack.add(filename, new Blob(Array.isArray(data) ? data : [data]))
|
||||||
type: this.extension(fragment) === '.flv' ? 'video/x-flv' : 'video/mp4'
|
|
||||||
}))
|
|
||||||
})
|
})
|
||||||
const danmaku = await this.downloadDanmaku()
|
const danmaku = await this.downloadDanmaku()
|
||||||
pack.add(
|
pack.add(
|
||||||
@ -746,7 +745,7 @@ async function loadPanel() {
|
|||||||
} else {
|
} else {
|
||||||
const { getFragmentsList } = await import('./ffmpeg-support')
|
const { getFragmentsList } = await import('./ffmpeg-support')
|
||||||
const pack = new DownloadVideoPackage()
|
const pack = new DownloadVideoPackage()
|
||||||
pack.add('ffmpeg-files.txt', getFragmentsList(videoDownloader.fragments.length, getFriendlyTitle(), videoDownloader.extension(videoDownloader.fragments[0])))
|
pack.add('ffmpeg-files.txt', getFragmentsList(videoDownloader.fragments.length, getFriendlyTitle(), videoDownloader.fragments.map(f => videoDownloader.extension(f))))
|
||||||
await pack.emit()
|
await pack.emit()
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
@ -833,7 +832,8 @@ async function loadPanel() {
|
|||||||
const items = await batchExtractor.getRawItems(format)
|
const items = await batchExtractor.getRawItems(format)
|
||||||
const videoDownloader = new VideoDownloader(format, items[0].fragments)
|
const videoDownloader = new VideoDownloader(format, items[0].fragments)
|
||||||
const { getBatchFragmentsList } = await import('./ffmpeg-support')
|
const { getBatchFragmentsList } = await import('./ffmpeg-support')
|
||||||
const map = getBatchFragmentsList(items, videoDownloader.extension())
|
const extensions = this.dash ? ['.mp4', 'm4a'] : [videoDownloader.extension()]
|
||||||
|
const map = getBatchFragmentsList(items, extensions)
|
||||||
if (!map) {
|
if (!map) {
|
||||||
Toast.info('所有选择的分P都没有分段.', '分段列表', 3000)
|
Toast.info('所有选择的分P都没有分段.', '分段列表', 3000)
|
||||||
} else {
|
} else {
|
||||||
@ -850,7 +850,8 @@ async function loadPanel() {
|
|||||||
const items = await batchExtractor.getRawItems(format)
|
const items = await batchExtractor.getRawItems(format)
|
||||||
const videoDownloader = new VideoDownloader(format, items[0].fragments)
|
const videoDownloader = new VideoDownloader(format, items[0].fragments)
|
||||||
const { getBatchEpisodesList } = await import('./ffmpeg-support')
|
const { getBatchEpisodesList } = await import('./ffmpeg-support')
|
||||||
const content = getBatchEpisodesList(items, videoDownloader.extension())
|
const extensions = this.dash ? ['.mp4', 'm4a'] : [videoDownloader.extension()]
|
||||||
|
const content = getBatchEpisodesList(items, extensions)
|
||||||
const pack = new DownloadVideoPackage()
|
const pack = new DownloadVideoPackage()
|
||||||
pack.add('ffmpeg-files.txt', content)
|
pack.add('ffmpeg-files.txt', content)
|
||||||
await pack.emit()
|
await pack.emit()
|
||||||
|
|||||||
@ -1,16 +1,20 @@
|
|||||||
import { RawItem } from './batch-download'
|
import { RawItem } from './batch-download'
|
||||||
|
|
||||||
export const getFragmentsList = (count: number, originalTitle: string, extension: string) => {
|
export const getFragmentsList = (count: number, originalTitle: string, extensions: string[]) => {
|
||||||
if (count < 2) {
|
if (count < 2) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
const names = []
|
const names = []
|
||||||
for (let index = 1; index <= count; index++) {
|
for (let index = 1; index <= count; index++) {
|
||||||
names.push(escapeFilename(`file '${originalTitle} - ${index}${extension}'`))
|
let indexNumber = ` - ${index}`
|
||||||
|
if (extensions.includes('.m4a')) {
|
||||||
|
indexNumber = ''
|
||||||
|
}
|
||||||
|
names.push(escapeFilename(`file '${originalTitle}${indexNumber}${extensions[index - 1]}'`))
|
||||||
}
|
}
|
||||||
return names.join('\n')
|
return names.join('\n')
|
||||||
}
|
}
|
||||||
export const getBatchFragmentsList = (items: RawItem[], extension: string) => {
|
export const getBatchFragmentsList = (items: RawItem[], extensions: string[]) => {
|
||||||
const multipleFragments = (item: RawItem) => item.fragments.length > 1
|
const multipleFragments = (item: RawItem) => item.fragments.length > 1
|
||||||
const fragmentsItems = items.filter(multipleFragments)
|
const fragmentsItems = items.filter(multipleFragments)
|
||||||
if (fragmentsItems.length === 0) {
|
if (fragmentsItems.length === 0) {
|
||||||
@ -19,20 +23,20 @@ export const getBatchFragmentsList = (items: RawItem[], extension: string) => {
|
|||||||
const names = new Map<string, string>()
|
const names = new Map<string, string>()
|
||||||
fragmentsItems.forEach(item => {
|
fragmentsItems.forEach(item => {
|
||||||
names.set(escapeFilename(`ffmpeg-files-${item.title}.txt`), item.fragments.map((_, index) => {
|
names.set(escapeFilename(`ffmpeg-files-${item.title}.txt`), item.fragments.map((_, index) => {
|
||||||
return escapeFilename(`file '${item.title} - ${index + 1}${extension}'`)
|
return escapeFilename(`file '${item.title} - ${index + 1}${extensions[index]}'`)
|
||||||
}).join('\n'))
|
}).join('\n'))
|
||||||
})
|
})
|
||||||
return names
|
return names
|
||||||
}
|
}
|
||||||
export const getBatchEpisodesList = (items: RawItem[], extension: string) => {
|
export const getBatchEpisodesList = (items: RawItem[], extensions: string[]) => {
|
||||||
const names: string[] = []
|
const names: string[] = []
|
||||||
items.forEach(item => {
|
items.forEach(item => {
|
||||||
item.fragments.forEach((f, index) => {
|
item.fragments.forEach((_, index) => {
|
||||||
let indexNumber = ''
|
let indexNumber = ''
|
||||||
if (item.fragments.length > 1) {
|
if (item.fragments.length > 1 && !extensions.includes('.m4a')) {
|
||||||
indexNumber = ` - ${index + 1}`
|
indexNumber = ` - ${index + 1}`
|
||||||
}
|
}
|
||||||
names.push(escapeFilename(`file '${item.title}${indexNumber}${extension}'`))
|
names.push(escapeFilename(`file '${item.title}${indexNumber}${extensions[index]}'`))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
return names.join('\n')
|
return names.join('\n')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user