修复动态视频多个小动态图视频 合成失败bug
其他优化
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
<script lang="ts" setup>
|
||||
// 原有代码不变,此处省略(仅保留模板相关修改,脚本逻辑无变化)
|
||||
import { getBase64 } from '@/utils/file';
|
||||
import { FormInstance } from 'ant-design-vue';
|
||||
import { reactive, ref, onMounted, UnwrapRef, watch } from 'vue';
|
||||
@@ -320,49 +321,50 @@ const downImgVideo = ref(true);
|
||||
|
||||
<a-form-item label="我的secUserId" name="secUserId">
|
||||
<div style="display: flex; align-items: center; gap: 6px;">
|
||||
<a-input v-model:value="form.secUserId" style="flex: 1;" />
|
||||
<a-tooltip title="同步“我喜欢的”视频时,必填!!!">
|
||||
<a-input v-model:value="form.secUserId" style="flex: 1;" placeholder="如果要同步“我喜欢”的视频和关注列表时,必填!!!" />
|
||||
<a-tooltip title="如果要同步“我喜欢”的视频和关注列表时,必填!!!">
|
||||
<ExclamationCircleOutlined style="color: #faad14;font-size: 16px;" />
|
||||
</a-tooltip>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<!-- 收藏的存储路径 -->
|
||||
<a-form-item label="收藏的存储路径" name="savePath">
|
||||
<div style="display: flex; align-items: center; gap: 6px;">
|
||||
<a-input v-model:value="form.savePath" />
|
||||
<div style="display: flex; align-items: center; gap: 12px; width: 100%;">
|
||||
<a-input v-model:value="form.savePath" style="width: 200px;" />
|
||||
<a-alert message="不想同步收藏的视频就空着" type="info" size="small" style="flex: 1; margin-bottom: 0;" />
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<!-- 新增:是否全部用一个地址开关 -->
|
||||
<a-form-item label="统一存储路径" name="useSinglePath">
|
||||
<div style="display: flex; align-items: center; gap: 8px;">
|
||||
<a-switch v-model:checked="form.useSinglePath" :checked-value="true" :un-checked-value="false" size="default" />
|
||||
<span>{{ form.useSinglePath ? '开启(共用收藏视频路径,如果是容器部署-docker-compose只需要映射一个路径就行了)' : '关闭(各路径独立配置)' }}</span>
|
||||
<span>{{ form.useSinglePath ? '共用收藏视频路径,如果是容器部署-docker-compose配置,只需要映射一个路径就行了' : '各类视频路径分开独立配置' }}</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<!-- 喜欢的存储路径 -->
|
||||
<a-form-item label="喜欢的存储路径" name="favSavePath">
|
||||
<div style="display: flex; align-items: center; gap: 6px;">
|
||||
<a-input v-model:value="form.favSavePath" :disabled="form.useSinglePath" placeholder="开启统一存储路径模式后将自动同步收藏路径的值" />
|
||||
<a-tooltip title="同步“我喜欢的”视频时,必填!!!">
|
||||
<ExclamationCircleOutlined style="color: #faad14;font-size: 16px;" />
|
||||
</a-tooltip>
|
||||
<div style="display: flex; align-items: center; gap: 12px; width: 100%;">
|
||||
<a-input v-model:value="form.favSavePath" :disabled="form.useSinglePath" placeholder="" style="width: 200px;" />
|
||||
<a-alert message="不想同步喜欢的视频就空着" type="info" size="small" style="flex: 1; margin-bottom: 0;" />
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<!-- 关注的存储路径 -->
|
||||
<a-form-item label="关注的存储路径" name="upSavePath">
|
||||
<div style="display: flex; align-items: center; gap: 6px;">
|
||||
<a-input v-model:value="form.upSavePath" :disabled="form.useSinglePath" placeholder="开启统一存储路径模式后将自动同步收藏路径的值" style="flex: 1;" />
|
||||
<a-tooltip title="同步指定博主视频时必填!!!">
|
||||
<ExclamationCircleOutlined style="color: #faad14;font-size: 16px;" />
|
||||
</a-tooltip>
|
||||
<div style="display: flex; align-items: center; gap: 12px; width: 100%;">
|
||||
<a-input v-model:value="form.upSavePath" :disabled="form.useSinglePath" placeholder="开启统一存储路径模式后将自动同步收藏路径的值" style="width: 200px;" />
|
||||
<a-alert message="不想同步关注列表博主的视频就空着" type="info" size="small" style="flex: 1; margin-bottom: 0;" />
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<!-- 图文的存储路径 -->
|
||||
<a-form-item label="图文的存储路径" name="imgSavePath">
|
||||
<div style="display: flex; align-items: center; gap: 6px;">
|
||||
<a-input v-model:value="form.imgSavePath" :disabled="form.useSinglePath" placeholder="开启统一存储路径模式后将自动同步收藏路径的值" style="flex: 1;" />
|
||||
<a-tooltip title="同步图文视频必填!!!">
|
||||
<ExclamationCircleOutlined style="color: #faad14;font-size: 16px;" />
|
||||
</a-tooltip>
|
||||
<div style="display: flex; align-items: center; gap: 12px; width: 100%;">
|
||||
<a-input v-model:value="form.imgSavePath" :disabled="form.useSinglePath" placeholder="开启统一存储路径模式后将自动同步收藏路径的值" style="width: 200px;" />
|
||||
<a-alert message="如果系统配置页面开启了同步图文视频,且开启了单独存储,则必填!!!" type="info" size="small" style="flex: 1; margin-bottom: 0;" />
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
@@ -522,4 +524,57 @@ const downImgVideo = ref(true);
|
||||
background-color: #f5f5f5 !important;
|
||||
color: #666 !important;
|
||||
}
|
||||
|
||||
/* 修复:移除对alert的自定义样式修改,还原官方默认样式 */
|
||||
/* 删除了原有的ant-alert-small和ant-alert-message自定义样式,避免覆盖官方主题 */
|
||||
/* 如需调整alert间距,仅修改外层容器,不修改alert内部样式 */
|
||||
.alert-wrapper {
|
||||
flex: 1;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- 新增全局样式块,确保alert样式不受scoped影响(仅针对alert还原默认) -->
|
||||
<style>
|
||||
/* 还原Ant Design Vue alert官方默认样式,消除scoped样式的间接影响 */
|
||||
.ant-alert {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
/* padding: 16px 16px; */
|
||||
color: rgba(0, 0, 0, 0.88);
|
||||
font-size: 14px;
|
||||
line-height: 1.5714285714;
|
||||
list-style: none;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.ant-alert-small {
|
||||
padding: 8px 16px;
|
||||
font-size: 12px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
/* 还原alert不同类型的官方默认颜色 */
|
||||
.ant-alert-info {
|
||||
background-color: #e6f4ff;
|
||||
border: 1px solid #91caff;
|
||||
}
|
||||
.ant-alert-info .ant-alert-message {
|
||||
color: #1677ff;
|
||||
}
|
||||
.ant-alert-warning {
|
||||
background-color: #fffbe6;
|
||||
border: 1px solid #ffe58f;
|
||||
}
|
||||
.ant-alert-warning .ant-alert-message {
|
||||
color: #faad14;
|
||||
}
|
||||
/* 确保alert图标颜色同步官方样式 */
|
||||
.ant-alert-info .ant-alert-icon {
|
||||
color: #1677ff;
|
||||
}
|
||||
.ant-alert-warning .ant-alert-icon {
|
||||
color: #faad14;
|
||||
}
|
||||
</style>
|
||||
@@ -76,7 +76,7 @@
|
||||
<template v-if="item.isEditing">
|
||||
<div class="edit-input-group">
|
||||
<!-- 输入框禁用:item.isSaving 为 true 时 -->
|
||||
<a-input v-model:value="item.savePath" placeholder="请输入文件夹名称" @keypress.enter="() => handleSavePath(item)" maxlength="10" :disabled="item.isSaving" />
|
||||
<a-input v-model:value="item.savePath" placeholder="请输入文件夹名称" @keypress.enter="() => handleSavePath(item)" maxlength="30" :disabled="item.isSaving" />
|
||||
<!-- 保存按钮禁用:item.isSaving 为 true 时 -->
|
||||
<a-button type="text" class="edit-btn" @click="() => handleSavePath(item)" :disabled="item.isSaving">
|
||||
<SaveOutlined />
|
||||
|
||||
@@ -5,23 +5,23 @@
|
||||
<div class="form-section">
|
||||
<h3 class="section-title">任务调度</h3>
|
||||
|
||||
<a-form-item has-feedback label="同步周期(分钟)" name="Cron" :wrapper-col="{ span: 20 }" style="margin-left: 30px">
|
||||
<a-form-item has-feedback label="同步周期" name="Cron" :wrapper-col="{ span: 20 }">
|
||||
<a-input-number v-model:value="formState.Cron" placeholder="请输入数字" :min="15" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>同步任务执行间隔,最小15分钟,建议使用默认值</span>
|
||||
<span>同步任务执行间隔(分钟),最小15分钟,建议使用默认值</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item has-feedback label="每次同步上限" name="BatchCount" :wrapper-col="{ span: 20 }" style="margin-left: 30px">
|
||||
<a-form-item has-feedback label="单次最多" name="BatchCount" :wrapper-col="{ span: 20 }">
|
||||
<a-input-number v-model:value="formState.BatchCount" placeholder="请输入每次下载数量上限(最大30)" :min="10" :max="30" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>每次最大下载数量:10-30</span>
|
||||
<span>每次任务最多下载数量:10-30,拉取视频数据超出该值将会等待下次任务执行。</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item has-feedback label="仅同步最新视频" name="OnlySyncNew" :wrapper-col="{ span: 20 }">
|
||||
<a-form-item has-feedback label="仅新视频" name="OnlySyncNew" :wrapper-col="{ span: 20 }">
|
||||
<a-switch v-model:checked="formState.OnlySyncNew" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
@@ -34,24 +34,24 @@
|
||||
<div class="form-section">
|
||||
<h3 class="section-title">博主视频</h3>
|
||||
|
||||
<a-form-item has-feedback label="标题当文件名" name="UperUseViedoTitle" :wrapper-col="{ span: 20 }">
|
||||
<a-form-item has-feedback label="默认规则" name="UperUseViedoTitle" :wrapper-col="{ span: 20 }">
|
||||
<a-switch v-model:checked="formState.UperUseViedoTitle" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>开启后,用原标题作为文件名,不开启但又没设置标题规则模板,则默认用视频id命名</span>
|
||||
<span>开启后,将使用原标题作为文件名,未开启且未设置标题规则模板,则默认用视频id命名</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item has-feedback label="不创建子目录" name="UperSaveTogether" :wrapper-col="{ span: 20 }">
|
||||
<a-form-item has-feedback label="统一存储" name="UperSaveTogether" :wrapper-col="{ span: 20 }">
|
||||
<a-switch v-model:checked="formState.UperSaveTogether" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>默认按博主名建文件夹,开启后直接存映射目录根目录</span>
|
||||
<span>开启后,所有博主视频直接都存一个根目录;关闭后,按博主名称创建文件夹单独存储。</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<!-- 模板相关配置:只有关闭"标题当文件名"时才显示 -->
|
||||
<a-form-item has-feedback label="定义标题模板" name="FollowedTitleTemplate" :wrapper-col="{ span: 12 }" v-if="!formState.UperUseViedoTitle">
|
||||
<a-form-item has-feedback label="标题模板" name="FollowedTitleTemplate" :wrapper-col="{ span: 12 }" v-if="!formState.UperUseViedoTitle">
|
||||
<a-select v-model:value="formState.FollowedTitleTemplate" :options="template_options" mode="multiple" size="middle" placeholder="请选择占位符组合"></a-select>
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<p></p>
|
||||
@@ -62,27 +62,19 @@
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item has-feedback label="模板分隔符" name="FollowedTitleSeparator" :wrapper-col="{ span: 12 }" v-if="!formState.UperUseViedoTitle">
|
||||
<a-form-item has-feedback label="分隔符" name="FollowedTitleSeparator" :wrapper-col="{ span: 12 }" v-if="!formState.UperUseViedoTitle">
|
||||
<a-input v-model:value="formState.FollowedTitleSeparator" placeholder="请输入分隔符(如 - _ 或空)" style="width: 200px" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>
|
||||
占位符之间的连接符(如“-”“_”“.”),为空则直接拼接<br />
|
||||
<strong class="text-gray-700">示例:</strong>选择{Author}和{VideoTitle},分隔符填“-”,将生成“博主名称-视频标题”格式文件名
|
||||
占位符之间的连接符(如“-”“_”“.”),为空则直接拼接,不要使用无法用来作为文件名得特殊字符
|
||||
</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<!-- 完整模板预览:只有关闭"标题当文件名"时才显示 -->
|
||||
<a-form-item label="完整模板预览" :wrapper-col="{ span: 12 }" v-if="!formState.UperUseViedoTitle">
|
||||
<a-input v-model:value="formState.FullFollowedTitleTemplate" placeholder="最终的模板" disabled style="background: #f5f5f5" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>
|
||||
实时展示您选择的占位符和分隔符组合效果<br />
|
||||
<strong class="text-gray-700">示例:</strong>选择{Author}、{ReleaseTime}、{Id},分隔符填“_”,预览结果为“博主名称_20250101_123456”
|
||||
</span>
|
||||
</div>
|
||||
<a-form-item label="标题预览" :wrapper-col="{ span: 12 }" v-if="!formState.UperUseViedoTitle">
|
||||
<a-input v-model:value="formState.FullFollowedTitleTemplate" placeholder="自定义标题预览" disabled style="background: #f5f5f5" />
|
||||
</a-form-item>
|
||||
</div>
|
||||
|
||||
@@ -126,7 +118,7 @@
|
||||
<div class="audio-upload-player-wrapper" style="display: flex; align-items: center; gap: 16px;">
|
||||
<a-upload :before-upload="beforeUpload" :custom-request="customUpload" :show-upload-list="false" accept=".mp3,.wav">
|
||||
<a-button type="default">
|
||||
<UploadOutlined /> 选择默认音频文件
|
||||
<UploadOutlined /> 选择文件
|
||||
</a-button>
|
||||
</a-upload>
|
||||
|
||||
@@ -156,22 +148,14 @@
|
||||
<a-switch v-model:checked="formState.DownDynamicVideo" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>针对有些视频是多个视频生成的,实际是分为多个视频,开启后将会分别下载多个视频,名字带_001,002这样</span>
|
||||
<span>开启后,将下载动态视频(多个短的小视频拼接-合成)</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
<a-form-item v-if="formState.DownDynamicVideo" has-feedback label="合并动态视频" name="MegDynamicVideo" :wrapper-col="{ span: 20 }">
|
||||
<a-switch v-model:checked="formState.MegDynamicVideo" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>开启后将多个动态视频会合并为一个视频</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item v-if="formState.MegDynamicVideo" has-feedback label="保留原视频" name="KeepDynamicVideo" :wrapper-col="{ span: 20 }">
|
||||
<a-form-item v-if="formState.DownDynamicVideo" has-feedback label="保留原视频" name="KeepDynamicVideo" :wrapper-col="{ span: 20 }">
|
||||
<a-switch v-model:checked="formState.KeepDynamicVideo" />
|
||||
<div class="flex items-start mt-1 text-sm text-gray-500">
|
||||
<InfoCircleOutlined class="text-blue-400 mr-1 mt-0.5" />
|
||||
<span>开启后,将保留合成视频之前的每个短视频</span>
|
||||
<span>开启后,将保留合成视频之前的每个短视频(动态视频会有多个独立的短视频文件,可以选择保留-但不建议,否则emby会出现很多没有封面的视频...)</span>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</div>
|
||||
@@ -180,7 +164,7 @@
|
||||
<div class="form-section">
|
||||
<h3 class="section-title">视频去重</h3>
|
||||
|
||||
<a-form-item v-show="formState.AutoDistinct" has-feedback label="去重优先等级" name="PriorityLevel" :wrapper-col="{ span: 20 }">
|
||||
<a-form-item v-show="formState.AutoDistinct" has-feedback label="去重优先级" name="PriorityLevel" :wrapper-col="{ span: 20 }">
|
||||
<!-- Tag 拖拽容器 -->
|
||||
<div class="tag-drag-container">
|
||||
<!-- Tag 拖拽容器(绑定 ref 供 Sortable 初始化) -->
|
||||
|
||||
Reference in New Issue
Block a user