diff options
author | Chocobozzz <me@florianbigard.com> | 2020-01-29 16:54:03 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2020-01-29 16:54:52 +0100 |
commit | c7f36e4f485d92191b9d04c6a880724b02fa220b (patch) | |
tree | accf79acae92c274d10c1e248ef1706e961979eb /server/helpers/ffmpeg-utils.ts | |
parent | 14aa85562cb83559d20105b4ddb4bf8b2340578a (diff) | |
download | PeerTube-c7f36e4f485d92191b9d04c6a880724b02fa220b.tar.gz PeerTube-c7f36e4f485d92191b9d04c6a880724b02fa220b.tar.zst PeerTube-c7f36e4f485d92191b9d04c6a880724b02fa220b.zip |
Fix transcoding
Diffstat (limited to 'server/helpers/ffmpeg-utils.ts')
-rw-r--r-- | server/helpers/ffmpeg-utils.ts | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts index 63dc5b6a3..7022d3e03 100644 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts | |||
@@ -263,8 +263,9 @@ async function canDoQuickTranscode (path: string): Promise<boolean> { | |||
263 | return true | 263 | return true |
264 | } | 264 | } |
265 | 265 | ||
266 | function getClosestFramerateStandard (fps: number, hd = false): number { | 266 | function getClosestFramerateStandard (fps: number, type: 'HD_STANDARD' | 'STANDARD'): number { |
267 | return VIDEO_TRANSCODING_FPS[hd ? 'HD_STANDARD' : 'STANDARD'].slice(0).sort((a, b) => fps % a - fps % b)[0] | 267 | return VIDEO_TRANSCODING_FPS[type].slice(0) |
268 | .sort((a, b) => fps % a - fps % b)[0] | ||
268 | } | 269 | } |
269 | 270 | ||
270 | // --------------------------------------------------------------------------- | 271 | // --------------------------------------------------------------------------- |
@@ -294,12 +295,10 @@ async function buildx264Command (command: ffmpeg.FfmpegCommand, options: Transco | |||
294 | // On small/medium resolutions, limit FPS | 295 | // On small/medium resolutions, limit FPS |
295 | options.resolution !== undefined && | 296 | options.resolution !== undefined && |
296 | options.resolution < VIDEO_TRANSCODING_FPS.KEEP_ORIGIN_FPS_RESOLUTION_MIN && | 297 | options.resolution < VIDEO_TRANSCODING_FPS.KEEP_ORIGIN_FPS_RESOLUTION_MIN && |
297 | fps > VIDEO_TRANSCODING_FPS.AVERAGE || | 298 | fps > VIDEO_TRANSCODING_FPS.AVERAGE |
298 | // If the video is doesn't match hd standard | ||
299 | !VIDEO_TRANSCODING_FPS.HD_STANDARD.some(value => fps % value === 0) | ||
300 | ) { | 299 | ) { |
301 | // Get closest standard framerate by modulo: downsampling has to be done to a divisor of the nominal fps value | 300 | // Get closest standard framerate by modulo: downsampling has to be done to a divisor of the nominal fps value |
302 | fps = getClosestFramerateStandard(fps) | 301 | fps = getClosestFramerateStandard(fps, 'STANDARD') |
303 | } | 302 | } |
304 | 303 | ||
305 | command = await presetH264(command, options.inputPath, options.resolution, fps) | 304 | command = await presetH264(command, options.inputPath, options.resolution, fps) |
@@ -312,7 +311,7 @@ async function buildx264Command (command: ffmpeg.FfmpegCommand, options: Transco | |||
312 | 311 | ||
313 | if (fps) { | 312 | if (fps) { |
314 | // Hard FPS limits | 313 | // Hard FPS limits |
315 | if (fps > VIDEO_TRANSCODING_FPS.MAX) fps = getClosestFramerateStandard(fps, true) | 314 | if (fps > VIDEO_TRANSCODING_FPS.MAX) fps = getClosestFramerateStandard(fps, 'HD_STANDARD') |
316 | else if (fps < VIDEO_TRANSCODING_FPS.MIN) fps = VIDEO_TRANSCODING_FPS.MIN | 315 | else if (fps < VIDEO_TRANSCODING_FPS.MIN) fps = VIDEO_TRANSCODING_FPS.MIN |
317 | 316 | ||
318 | command = command.withFPS(fps) | 317 | command = command.withFPS(fps) |