Use mp4/m4a for dash extensions

This commit is contained in:
the1812 2019-11-08 23:04:48 +08:00
parent ec35b9f160
commit d2acf71d01
10 changed files with 37 additions and 32 deletions

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

View File

@ -47,7 +47,7 @@
"download-video-package.min.js": "B10FF11DE7DFBACEC38F195B8E836511E527215B5E177CB1D223D14F30EB1435",
"download-video.min.css": "95FF9DA3C1FFF1C1134D70AE3BB609049B7D5D3FBB71CAAAE84C8742C51AD841",
"download-video.min.html": "2727789E8423E8DBC8801FF6AC0D8181AC684A643A83CD446A5D69318DDBF9F6",
"download-video.min.js": "2485F8AB5A4A4E5E7F40388ACD1657C9ABD1B2279C62BEA4AA3728E80F706C0F",
"download-video.min.js": "4013A2F8DB6B2859DF83EFEC32274158ABA1769536D8656537E2FCDF96560AD8",
"dpi-img.vue.min.js": "3D9D93079365DCABA8DC8970F051AD1A7F25C3EFFF850CD1000C4312E9B910DD",
"expand-danmaku.min.js": "B21658C40085AEA8DC49652AE62EB8610BB2EBEAF7A9C9AF69EF3B11E08EEC8D",
"expand-description.min.css": "58C7710A50521B80F7D872BDC4C652610D84C4FABC6874BA66DA37B4F8759224",
@ -56,7 +56,7 @@
"feeds-apis.min.js": "ED1FFDEBC22680C5089F9D30CF667535FB99881C96A969DB47BC70BF095A99E8",
"feeds-filter-card.vue.min.js": "3A7F8F402EA46E43B718506329814953C9E358A8AF94088D4E5745D48296D80B",
"feeds-filter.min.js": "10557E498B8BADA3C1C03E8C1DCD6FB24DBA2DA27A5A03BD861054F7E2989D46",
"ffmpeg-support.min.js": "E3D90A111457F7093BE2DBBC011B268B497351CCFF987394A34171F77146A9B2",
"ffmpeg-support.min.js": "CB33E150098394ABCACE6FC45CC1C6DA1B71012C77265D93F23C555A532016A1",
"fill-with-comments.min.js": "5D52ACB5057267C2EEBA5AA74EEE5D4086215645623560825C25AAA133536F2F",
"filter-type-switch.vue.min.js": "E06B00EF48F3CCFACC82B858A266CE0DF48F8332C5900B3AD579330D4C6D3125",
"fix-fullscreen.min.js": "C0628A7CABB4421FCBD7663700EF9965C96F6D79979B9F7523A9F9B0B009C8B6",

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -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}}}})();

View File

@ -325,7 +325,7 @@ class VideoDownloader {
const option = settings.aria2RpcOption
const params = this.fragments.map((fragment, index) => {
let indexNumber = ''
if (this.fragments.length > 1) {
if (this.fragments.length > 1 && !this.isDash) {
indexNumber = ' - ' + (index + 1)
}
const params = []
@ -355,7 +355,7 @@ class VideoDownloader {
# https://github.com/the1812/Bilibili-Evolved/
${this.fragments.map((it, index) => {
let indexNumber = ''
if (this.fragments.length > 1) {
if (this.fragments.length > 1 && !this.isDash) {
indexNumber = ' - ' + (index + 1)
}
return `
@ -380,10 +380,11 @@ ${it.url}
const match = [
'.flv',
'.mp4',
'.m4s',
].find(it => f.url.includes(it))
if (match) {
return match
} else if (f.url.includes('.m4s')) {
return this.fragments.indexOf(f) === 0 ? '.mp4' : '.m4a'
} else {
console.warn('No extension detected.')
return '.flv'
@ -488,14 +489,12 @@ ${it.url}
downloadedData.forEach((data, index) => {
let filename: string
const fragment = this.fragments[index]
if (downloadedData.length > 1) {
if (downloadedData.length > 1 && !this.isDash) {
filename = `${title} - ${index + 1}${this.extension(fragment)}`
} else {
filename = `${title}${this.extension(fragment)}`
}
pack.add(filename, new Blob(Array.isArray(data) ? data : [data], {
type: this.extension(fragment) === '.flv' ? 'video/x-flv' : 'video/mp4'
}))
pack.add(filename, new Blob(Array.isArray(data) ? data : [data]))
})
const danmaku = await this.downloadDanmaku()
pack.add(
@ -746,7 +745,7 @@ async function loadPanel() {
} else {
const { getFragmentsList } = await import('./ffmpeg-support')
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()
}
break
@ -833,7 +832,8 @@ async function loadPanel() {
const items = await batchExtractor.getRawItems(format)
const videoDownloader = new VideoDownloader(format, items[0].fragments)
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) {
Toast.info('所有选择的分P都没有分段.', '分段列表', 3000)
} else {
@ -850,7 +850,8 @@ async function loadPanel() {
const items = await batchExtractor.getRawItems(format)
const videoDownloader = new VideoDownloader(format, items[0].fragments)
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()
pack.add('ffmpeg-files.txt', content)
await pack.emit()

View File

@ -1,16 +1,20 @@
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) {
return null
}
const names = []
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')
}
export const getBatchFragmentsList = (items: RawItem[], extension: string) => {
export const getBatchFragmentsList = (items: RawItem[], extensions: string[]) => {
const multipleFragments = (item: RawItem) => item.fragments.length > 1
const fragmentsItems = items.filter(multipleFragments)
if (fragmentsItems.length === 0) {
@ -19,20 +23,20 @@ export const getBatchFragmentsList = (items: RawItem[], extension: string) => {
const names = new Map<string, string>()
fragmentsItems.forEach(item => {
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'))
})
return names
}
export const getBatchEpisodesList = (items: RawItem[], extension: string) => {
export const getBatchEpisodesList = (items: RawItem[], extensions: string[]) => {
const names: string[] = []
items.forEach(item => {
item.fragments.forEach((f, index) => {
item.fragments.forEach((_, index) => {
let indexNumber = ''
if (item.fragments.length > 1) {
if (item.fragments.length > 1 && !extensions.includes('.m4a')) {
indexNumber = ` - ${index + 1}`
}
names.push(escapeFilename(`file '${item.title}${indexNumber}${extension}'`))
names.push(escapeFilename(`file '${item.title}${indexNumber}${extensions[index]}'`))
})
})
return names.join('\n')