feat(saveVideoMetadata): option for time format

This commit is contained in:
lainio24 2025-10-19 19:27:26 +08:00
parent 89566501e4
commit 23eecd4e4e
No known key found for this signature in database
GPG Key ID: B333508B1D79D277
3 changed files with 36 additions and 5 deletions

View File

@ -7,7 +7,7 @@ import { Toast } from '@/core/toast'
import { name as componentName, title as pluginTitle } from '.'
import { FieldsMode, Options } from './options'
import { MetadataType, Tag, ViewPoint } from './types'
import { bangumiSkipToViewPoints, escape, fixBgmTag, tagWithId } from './utils'
import { bangumiSkipToViewPoints, escape, fixBgmTag, formatTime, tagWithId } from './utils'
class VideoMetadata {
private readonly aid: number
@ -85,13 +85,18 @@ async function generateFFMetadata(aid: string = unsafeWindow.aid, cid: string =
console.debug(data)
const {
options: { fieldsMode },
options: { fieldsMode, timeFormat },
} = getComponentSettings<Options>(componentName)
const generated = new Date()
const lines = [
';FFMETADATA1',
`;generated by Bilibili-Evolved v${meta.compilationInfo.version}`,
`;generated on ${new Date().toLocaleString()}`,
`;generated on ${generated.toLocaleDateString()} at ${generated.toLocaleTimeString(
navigator.language,
{ timeZoneName: 'short' },
)}`,
// Standard fields
ff('title', `${basic.title} - ${data.page.title}`, false),
ff('description', basic.description, false),
@ -101,9 +106,10 @@ async function generateFFMetadata(aid: string = unsafeWindow.aid, cid: string =
if (fieldsMode === FieldsMode.ALL) {
// Custom fields
lines.push(
ff('metadata_generated', formatTime(generated, timeFormat)),
ff('title', basic.title),
ff('description', basic.description),
ff('publish_date', new Date(basic.pubdate * 1000).toLocaleString()),
ff('publish_date', formatTime(new Date(basic.pubdate * 1000), timeFormat)),
ff('aid', basic.aid),
ff('bvid', basic.bvid),
ff('cid', data.page.cid),

View File

@ -5,11 +5,22 @@ export enum FieldsMode {
Standard = '仅标准字段',
}
export enum TimeFormat {
Timestmp = '时间戳',
Local = '本地时间',
IOS = 'ISO时间',
}
export const options = defineOptionsMetadata({
fieldsMode: {
defaultValue: FieldsMode.ALL,
displayName: 'FFMETADATA 字段',
dropdownEnum: FieldsMode,
defaultValue: FieldsMode.ALL,
},
timeFormat: {
displayName: '时间格式',
dropdownEnum: TimeFormat,
defaultValue: TimeFormat.Local,
},
convertBangumiSkips: {
displayName: '将番剧的「跳过头尾」转换为章节', //

View File

@ -57,3 +57,17 @@ export function bangumiSkipToViewPoints(skip: EpisodeInfo['skip'], duration: num
return p
}
export function formatTime(date: Date, format: TimeFormat) {
switch (format) {
case TimeFormat.Timestmp:
return date.getTime()
case TimeFormat.Local:
return date.toLocaleString()
case TimeFormat.IOS:
return date.toISOString()
default:
break
}
return 0
}