import { Job } from 'bullmq'
import { readdir, remove } from 'fs-extra'
import { join } from 'path'
-import { ffprobePromise, getAudioStream, getVideoStreamDimensionsInfo, getVideoStreamDuration } from '@server/helpers/ffmpeg'
+import { ffprobePromise, getAudioStream, getVideoStreamDimensionsInfo } from '@server/helpers/ffmpeg'
import { getLocalVideoActivityPubUrl } from '@server/lib/activitypub/url'
import { federateVideoIfNeeded } from '@server/lib/activitypub/videos'
import { cleanupPermanentLive, cleanupTMPLiveFiles, cleanupUnsavedNormalLive } from '@server/lib/live'
}) {
const { video, replayDirectory } = options
- let durationDone = false
-
const concatenatedTsFiles = await readdir(replayDirectory)
for (const concatenatedTsFile of concatenatedTsFiles) {
const probe = await ffprobePromise(concatenatedTsFilePath)
const { audioStream } = await getAudioStream(concatenatedTsFilePath, probe)
-
const { resolution } = await getVideoStreamDimensionsInfo(concatenatedTsFilePath, probe)
- const { resolutionPlaylistPath: outputPath } = await generateHlsPlaylistResolutionFromTS({
+ await generateHlsPlaylistResolutionFromTS({
video,
concatenatedTsFilePath,
resolution,
isAAC: audioStream?.codec_name === 'aac'
})
-
- if (!durationDone) {
- video.duration = await getVideoStreamDuration(outputPath)
- await video.save()
-
- durationDone = true
- }
}
return video
// Move video file
await move(join(videoTranscodedBasePath, videoFilename), videoFilePath, { overwrite: true })
+ // Update video duration if it was not set (in case of a live for example)
+ if (!video.duration) {
+ video.duration = await getVideoStreamDuration(videoFilePath)
+ await video.save()
+ }
+
const stats = await stat(videoFilePath)
newVideoFile.size = stats.size