aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--server/lib/video-transcoding.ts34
1 files changed, 28 insertions, 6 deletions
diff --git a/server/lib/video-transcoding.ts b/server/lib/video-transcoding.ts
index a204c0c63..612d388ee 100644
--- a/server/lib/video-transcoding.ts
+++ b/server/lib/video-transcoding.ts
@@ -1,7 +1,14 @@
1import { HLS_STREAMING_PLAYLIST_DIRECTORY, P2P_MEDIA_LOADER_PEER_VERSION, WEBSERVER } from '../initializers/constants' 1import { HLS_STREAMING_PLAYLIST_DIRECTORY, P2P_MEDIA_LOADER_PEER_VERSION, WEBSERVER } from '../initializers/constants'
2import { join } from 'path' 2import { basename, join } from 'path'
3import { canDoQuickTranscode, getVideoFileFPS, transcode, TranscodeOptions, TranscodeOptionsType } from '../helpers/ffmpeg-utils' 3import {
4import { ensureDir, move, remove, stat } from 'fs-extra' 4 canDoQuickTranscode,
5 getDurationFromVideoFile,
6 getVideoFileFPS,
7 transcode,
8 TranscodeOptions,
9 TranscodeOptionsType
10} from '../helpers/ffmpeg-utils'
11import { copyFile, ensureDir, move, remove, stat } from 'fs-extra'
5import { logger } from '../helpers/logger' 12import { logger } from '../helpers/logger'
6import { VideoResolution } from '../../shared/models/videos' 13import { VideoResolution } from '../../shared/models/videos'
7import { VideoFileModel } from '../models/video/video-file' 14import { VideoFileModel } from '../models/video/video-file'
@@ -97,22 +104,37 @@ async function mergeAudioVideofile (video: MVideoWithFileThumbnail, resolution:
97 const audioInputPath = join(videosDirectory, video.getVideoFilename(video.getOriginalFile())) 104 const audioInputPath = join(videosDirectory, video.getVideoFilename(video.getOriginalFile()))
98 const videoTranscodedPath = join(transcodeDirectory, video.id + '-transcoded' + newExtname) 105 const videoTranscodedPath = join(transcodeDirectory, video.id + '-transcoded' + newExtname)
99 106
107 // If the user updates the video preview during transcoding
108 const previewPath = video.getPreview().getPath()
109 const tmpPreviewPath = join(CONFIG.STORAGE.TMP_DIR, basename(previewPath))
110 await copyFile(previewPath, tmpPreviewPath)
111
100 const transcodeOptions = { 112 const transcodeOptions = {
101 type: 'merge-audio' as 'merge-audio', 113 type: 'merge-audio' as 'merge-audio',
102 inputPath: video.getPreview().getPath(), 114 inputPath: tmpPreviewPath,
103 outputPath: videoTranscodedPath, 115 outputPath: videoTranscodedPath,
104 audioPath: audioInputPath, 116 audioPath: audioInputPath,
105 resolution 117 resolution
106 } 118 }
107 119
108 await transcode(transcodeOptions) 120 try {
121 await transcode(transcodeOptions)
109 122
110 await remove(audioInputPath) 123 await remove(audioInputPath)
124 await remove(tmpPreviewPath)
125 } catch (err) {
126 await remove(tmpPreviewPath)
127 throw err
128 }
111 129
112 // Important to do this before getVideoFilename() to take in account the new file extension 130 // Important to do this before getVideoFilename() to take in account the new file extension
113 inputVideoFile.extname = newExtname 131 inputVideoFile.extname = newExtname
114 132
115 const videoOutputPath = video.getVideoFilePath(inputVideoFile) 133 const videoOutputPath = video.getVideoFilePath(inputVideoFile)
134 // ffmpeg generated a new video file, so update the video duration
135 // See https://trac.ffmpeg.org/ticket/5456
136 video.duration = await getDurationFromVideoFile(videoTranscodedPath)
137 await video.save()
116 138
117 return onVideoFileTranscoding(video, inputVideoFile, videoTranscodedPath, videoOutputPath) 139 return onVideoFileTranscoding(video, inputVideoFile, videoTranscodedPath, videoOutputPath)
118} 140}