mirror of
https://github.com/lanyeeee/bilibili-video-downloader.git
synced 2026-09-05 15:38:52 +08:00
feat: 支持标记广告
This commit is contained in:
@@ -37,18 +37,30 @@ const audioQualitySelectOptions: SelectBaseOption<PreferAudioQuality>[] = [
|
||||
<span class="font-bold">主要内容</span>
|
||||
<n-checkbox v-model:checked="store.config.download_video">下载视频</n-checkbox>
|
||||
<n-checkbox v-model:checked="store.config.download_audio">下载音频</n-checkbox>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2">
|
||||
<span class="font-bold">视频处理</span>
|
||||
<n-tooltip placement="top" trigger="hover">
|
||||
<div>自动合并音频和视频</div>
|
||||
<template #trigger>
|
||||
<n-checkbox v-model:checked="store.config.auto_merge">自动合并</n-checkbox>
|
||||
</template>
|
||||
</n-tooltip>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2">
|
||||
<span class="font-bold">附加内容</span>
|
||||
<n-checkbox v-model:checked="store.config.download_subtitle">下载字幕</n-checkbox>
|
||||
<n-checkbox v-model:checked="store.config.download_cover">下载封面</n-checkbox>
|
||||
<n-tooltip placement="top" trigger="hover">
|
||||
<div>如果视频有章节分段,则将章节信息嵌入mp4文件的元数据中</div>
|
||||
<div>使视频在各类播放器中支持章节导航(例如进度条分段)</div>
|
||||
<template #trigger>
|
||||
<n-checkbox v-model:checked="store.config.embed_chapter">标记章节</n-checkbox>
|
||||
</template>
|
||||
</n-tooltip>
|
||||
<n-tooltip placement="top" trigger="hover">
|
||||
<div>将视频的广告部分以章节的形式嵌入mp4文件的元数据中</div>
|
||||
<div>可以实现自动跳过广告(如果播放器支持的话)</div>
|
||||
<template #trigger>
|
||||
<n-checkbox v-model:checked="store.config.embed_skip">标记广告</n-checkbox>
|
||||
</template>
|
||||
</n-tooltip>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2">
|
||||
@@ -58,22 +70,21 @@ const audioQualitySelectOptions: SelectBaseOption<PreferAudioQuality>[] = [
|
||||
<n-checkbox class="w-22" v-model:checked="store.config.download_json_danmaku">json弹幕</n-checkbox>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2">
|
||||
<span class="font-bold">其他内容</span>
|
||||
<n-checkbox v-model:checked="store.config.download_subtitle">下载字幕</n-checkbox>
|
||||
<n-checkbox v-model:checked="store.config.download_cover">下载封面</n-checkbox>
|
||||
</div>
|
||||
|
||||
<div class="flex gap-2">
|
||||
<span class="w-14 font-bold">元数据</span>
|
||||
<n-tooltip placement="top" trigger="hover">
|
||||
<div>还会顺便下载poster和fanart(如果有的话)</div>
|
||||
<template #trigger>
|
||||
<n-checkbox class="w-22" v-model:checked="store.config.download_nfo">nfo文件</n-checkbox>
|
||||
</template>
|
||||
</n-tooltip>
|
||||
<n-checkbox class="w-22" v-model:checked="store.config.download_json">json文件</n-checkbox>
|
||||
<n-tooltip placement="top" trigger="hover">
|
||||
<div>将章节信息嵌入mp4文件的元数据中</div>
|
||||
<div>使视频在各类播放器中支持章节导航(例如进度条分段)</div>
|
||||
<template #trigger>
|
||||
<n-checkbox v-model:checked="store.config.embed_chapter">章节标记</n-checkbox>
|
||||
<n-checkbox class="w-22" v-model:checked="store.config.download_nfo">nfo刮削</n-checkbox>
|
||||
</template>
|
||||
</n-tooltip>
|
||||
<n-checkbox class="w-22" v-model:checked="store.config.download_json">json刮削</n-checkbox>
|
||||
</div>
|
||||
|
||||
<n-tooltip placement="left" trigger="hover" class="w-20vw">
|
||||
|
||||
@@ -98,6 +98,7 @@ onMounted(async () => {
|
||||
const audioTask = progressData.audio_task
|
||||
const mergeTask = progressData.merge_task
|
||||
const embedChapterTask = progressData.embed_chapter_task
|
||||
const embedSkipTask = progressData.embed_skip_task
|
||||
const danmakuTask = progressData.danmaku_task
|
||||
const subtitleTask = progressData.subtitle_task
|
||||
const coverTask = progressData.cover_task
|
||||
@@ -105,6 +106,9 @@ onMounted(async () => {
|
||||
const jsonTask = progressData.json_task
|
||||
|
||||
const danmakuSelected = danmakuTask.xml_selected || danmakuTask.ass_selected || danmakuTask.json_selected
|
||||
const embedding =
|
||||
(embedChapterTask.selected && !embedChapterTask.completed) ||
|
||||
(embedSkipTask.selected && !embedSkipTask.completed)
|
||||
|
||||
if (videoTask.selected && !videoTask.completed && videoTask.content_length > 0) {
|
||||
const chunkCount = progressData.video_task.chunks.length
|
||||
@@ -116,18 +120,13 @@ onMounted(async () => {
|
||||
const completedChunks = progressData.audio_task.chunks.filter((chunk) => chunk.completed).length
|
||||
progressData.percentage = (completedChunks / chunkCount) * 100
|
||||
progressData.taskIndicator = `音频分片 ${completedChunks}/${chunkCount}`
|
||||
} else if (
|
||||
mergeTask.selected &&
|
||||
!mergeTask.completed &&
|
||||
embedChapterTask.selected &&
|
||||
!embedChapterTask.completed
|
||||
) {
|
||||
} else if (mergeTask.selected && !mergeTask.completed && embedding) {
|
||||
progressData.percentage = 100
|
||||
progressData.taskIndicator = '合并视频音频+嵌入章节元数据'
|
||||
progressData.taskIndicator = '自动合并+嵌入章节元数据'
|
||||
} else if (mergeTask.selected && !mergeTask.completed) {
|
||||
progressData.percentage = 100
|
||||
progressData.taskIndicator = '合并视频和音频'
|
||||
} else if (embedChapterTask.selected && !embedChapterTask.completed) {
|
||||
progressData.taskIndicator = '自动合并'
|
||||
} else if (embedding) {
|
||||
progressData.percentage = 100
|
||||
progressData.taskIndicator = '嵌入章节元数据'
|
||||
} else if (danmakuSelected && !danmakuTask.completed) {
|
||||
@@ -141,10 +140,10 @@ onMounted(async () => {
|
||||
progressData.taskIndicator = '封面'
|
||||
} else if (nfoTask.selected && !nfoTask.completed) {
|
||||
progressData.percentage = 100
|
||||
progressData.taskIndicator = 'nfo元数据'
|
||||
progressData.taskIndicator = 'nfo刮削'
|
||||
} else if (jsonTask.selected && !jsonTask.completed) {
|
||||
progressData.percentage = 100
|
||||
progressData.taskIndicator = 'json元数据'
|
||||
progressData.taskIndicator = 'json刮削'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -160,7 +160,10 @@ function handleSearchClick() {
|
||||
<ColorfulTag v-if="p.audio_task.selected" color="blue">
|
||||
音频(音质:{{ p.audio_task.audio_quality }})
|
||||
</ColorfulTag>
|
||||
<ColorfulTag v-if="p.merge_task.selected" color="blue">自动合并</ColorfulTag>
|
||||
|
||||
<ColorfulTag v-if="p.merge_task.selected" color="rose">自动合并</ColorfulTag>
|
||||
<ColorfulTag v-if="p.embed_chapter_task.selected" color="rose">标记章节</ColorfulTag>
|
||||
<ColorfulTag v-if="p.embed_skip_task.selected" color="rose">标记广告</ColorfulTag>
|
||||
|
||||
<ColorfulTag v-if="p.danmaku_task.xml_selected" color="purple">xml弹幕</ColorfulTag>
|
||||
<ColorfulTag v-if="p.danmaku_task.ass_selected" color="purple">ass弹幕</ColorfulTag>
|
||||
@@ -169,9 +172,8 @@ function handleSearchClick() {
|
||||
<ColorfulTag v-if="p.subtitle_task.selected" color="green">字幕</ColorfulTag>
|
||||
<ColorfulTag v-if="p.cover_task.selected" color="green">封面</ColorfulTag>
|
||||
|
||||
<ColorfulTag v-if="p.nfo_task.selected" color="amber">nfo元数据</ColorfulTag>
|
||||
<ColorfulTag v-if="p.json_task.selected" color="amber">json元数据</ColorfulTag>
|
||||
<ColorfulTag v-if="p.embed_chapter_task.selected" color="amber">章节信息</ColorfulTag>
|
||||
<ColorfulTag v-if="p.nfo_task.selected" color="amber">nfo刮削</ColorfulTag>
|
||||
<ColorfulTag v-if="p.json_task.selected" color="amber">json刮削</ColorfulTag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user