1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { program } from 'commander'
- import { toCompleteUUID } from '@server/helpers/custom-validators/misc.js'
- import { initDatabaseModels } from '@server/initializers/database.js'
- import { JobQueue } from '@server/lib/job-queue/index.js'
- import { StoryboardModel } from '@server/models/video/storyboard.js'
- import { VideoModel } from '@server/models/video/video.js'
- import { buildStoryboardJobIfNeeded } from '@server/lib/video-jobs.js'
- program
- .description('Generate videos storyboard')
- .option('-v, --video [videoUUID]', 'Generate the storyboard of a specific video')
- .option('-a, --all-videos', 'Generate missing storyboards of local videos')
- .parse(process.argv)
- const options = program.opts()
- if (!options['video'] && !options['allVideos']) {
- console.error('You need to choose videos for storyboard generation.')
- process.exit(-1)
- }
- run()
- .then(() => process.exit(0))
- .catch(err => {
- console.error(err)
- process.exit(-1)
- })
- async function run () {
- await initDatabaseModels(true)
- JobQueue.Instance.init()
- let ids: number[] = []
- if (options['video']) {
- const video = await VideoModel.load(toCompleteUUID(options['video']))
- if (!video) {
- console.error('Unknown video ' + options['video'])
- process.exit(-1)
- }
- if (video.remote === true) {
- console.error('Cannot process a remote video')
- process.exit(-1)
- }
- if (video.isLive) {
- console.error('Cannot process live video')
- process.exit(-1)
- }
- ids.push(video.id)
- } else {
- ids = await listLocalMissingStoryboards()
- }
- for (const id of ids) {
- const videoFull = await VideoModel.load(id)
- if (videoFull.isLive) continue
- await JobQueue.Instance.createJob(buildStoryboardJobIfNeeded({ video: videoFull, federate: true }))
- console.log(`Created generate-storyboard job for ${videoFull.name}.`)
- }
- }
- async function listLocalMissingStoryboards () {
- const ids = await VideoModel.listLocalIds()
- const results: number[] = []
- for (const id of ids) {
- const storyboard = await StoryboardModel.loadByVideo(id)
- if (!storyboard) results.push(id)
- }
- return results
- }
|