mirror of https://github.com/Chocobozzz/PeerTube
Don't block video files on transcription
parent
07058e17c3
commit
471bf5bbce
|
@ -18,6 +18,7 @@ import { JobQueue } from './job-queue/job-queue.js'
|
||||||
import { Notifier } from './notifier/notifier.js'
|
import { Notifier } from './notifier/notifier.js'
|
||||||
import { TranscriptionJobHandler } from './runners/index.js'
|
import { TranscriptionJobHandler } from './runners/index.js'
|
||||||
import { VideoPathManager } from './video-path-manager.js'
|
import { VideoPathManager } from './video-path-manager.js'
|
||||||
|
import { MutexInterface } from 'async-mutex'
|
||||||
|
|
||||||
const lTags = loggerTagsFactory('video-caption')
|
const lTags = loggerTagsFactory('video-caption')
|
||||||
|
|
||||||
|
@ -68,14 +69,15 @@ let transcriber: AbstractTranscriber
|
||||||
export async function generateSubtitle (options: {
|
export async function generateSubtitle (options: {
|
||||||
video: MVideoUUID
|
video: MVideoUUID
|
||||||
}) {
|
}) {
|
||||||
const inputFileMutexReleaser = await VideoPathManager.Instance.lockFiles(options.video.uuid)
|
|
||||||
|
|
||||||
const outputPath = join(CONFIG.STORAGE.TMP_DIR, 'transcription', buildSUUID())
|
const outputPath = join(CONFIG.STORAGE.TMP_DIR, 'transcription', buildSUUID())
|
||||||
await ensureDir(outputPath)
|
|
||||||
|
|
||||||
const binDirectory = join(DIRECTORIES.LOCAL_PIP_DIRECTORY, 'bin')
|
let inputFileMutexReleaser: MutexInterface.Releaser
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
await ensureDir(outputPath)
|
||||||
|
|
||||||
|
const binDirectory = join(DIRECTORIES.LOCAL_PIP_DIRECTORY, 'bin')
|
||||||
|
|
||||||
// Lazy load the transcriber
|
// Lazy load the transcriber
|
||||||
if (!transcriber) {
|
if (!transcriber) {
|
||||||
transcriber = transcriberFactory.createFromEngineName({
|
transcriber = transcriberFactory.createFromEngineName({
|
||||||
|
@ -91,6 +93,8 @@ export async function generateSubtitle (options: {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inputFileMutexReleaser = await VideoPathManager.Instance.lockFiles(options.video.uuid)
|
||||||
|
|
||||||
const video = await VideoModel.loadFull(options.video.uuid)
|
const video = await VideoModel.loadFull(options.video.uuid)
|
||||||
const file = video.getMaxQualityFile().withVideoOrPlaylist(video)
|
const file = video.getMaxQualityFile().withVideoOrPlaylist(video)
|
||||||
|
|
||||||
|
@ -104,6 +108,9 @@ export async function generateSubtitle (options: {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Release input file mutex now we are going to run the command
|
||||||
|
setTimeout(() => inputFileMutexReleaser(), 1000)
|
||||||
|
|
||||||
logger.info(`Running transcription for ${video.uuid} in ${outputPath}`, lTags(video.uuid))
|
logger.info(`Running transcription for ${video.uuid} in ${outputPath}`, lTags(video.uuid))
|
||||||
|
|
||||||
const transcriptFile = await transcriber.transcribe({
|
const transcriptFile = await transcriber.transcribe({
|
||||||
|
@ -122,11 +129,10 @@ export async function generateSubtitle (options: {
|
||||||
})
|
})
|
||||||
} finally {
|
} finally {
|
||||||
if (outputPath) await remove(outputPath)
|
if (outputPath) await remove(outputPath)
|
||||||
|
if (inputFileMutexReleaser) inputFileMutexReleaser()
|
||||||
|
|
||||||
VideoJobInfoModel.decrease(options.video.uuid, 'pendingTranscription')
|
VideoJobInfoModel.decrease(options.video.uuid, 'pendingTranscription')
|
||||||
.catch(err => logger.error('Cannot decrease pendingTranscription job count', { err, ...lTags(options.video.uuid) }))
|
.catch(err => logger.error('Cannot decrease pendingTranscription job count', { err, ...lTags(options.video.uuid) }))
|
||||||
|
|
||||||
inputFileMutexReleaser()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue