/test5/
/test6/
/server/tests/fixtures/video_high_bitrate_1080p.mp4
+/server/tests/fixtures/video_59fps.mp4
# Production
/storage/
return true
}
-function getClosestFramerateStandard (fps: number, hd = false): number {
- return VIDEO_TRANSCODING_FPS[hd ? 'HD_STANDARD' : 'STANDARD'].slice(0).sort((a, b) => fps % a - fps % b)[0]
+function getClosestFramerateStandard (fps: number, type: 'HD_STANDARD' | 'STANDARD'): number {
+ return VIDEO_TRANSCODING_FPS[type].slice(0)
+ .sort((a, b) => fps % a - fps % b)[0]
}
// ---------------------------------------------------------------------------
// On small/medium resolutions, limit FPS
options.resolution !== undefined &&
options.resolution < VIDEO_TRANSCODING_FPS.KEEP_ORIGIN_FPS_RESOLUTION_MIN &&
- fps > VIDEO_TRANSCODING_FPS.AVERAGE ||
- // If the video is doesn't match hd standard
- !VIDEO_TRANSCODING_FPS.HD_STANDARD.some(value => fps % value === 0)
+ fps > VIDEO_TRANSCODING_FPS.AVERAGE
) {
// Get closest standard framerate by modulo: downsampling has to be done to a divisor of the nominal fps value
- fps = getClosestFramerateStandard(fps)
+ fps = getClosestFramerateStandard(fps, 'STANDARD')
}
command = await presetH264(command, options.inputPath, options.resolution, fps)
if (fps) {
// Hard FPS limits
- if (fps > VIDEO_TRANSCODING_FPS.MAX) fps = getClosestFramerateStandard(fps, true)
+ if (fps > VIDEO_TRANSCODING_FPS.MAX) fps = getClosestFramerateStandard(fps, 'HD_STANDARD')
else if (fps < VIDEO_TRANSCODING_FPS.MIN) fps = VIDEO_TRANSCODING_FPS.MIN
command = command.withFPS(fps)
let tempFixturePath: string
{
- tempFixturePath = await generateVideoWithFramerate()
+ tempFixturePath = await generateVideoWithFramerate(59)
const fps = await getVideoFileFPS(tempFixturePath)
expect(fps).to.be.equal(59)
const res = await getVideosList(server.url)
const video = res.body.data.find(v => v.name === videoAttributes.name)
- const path = join(root(), 'test' + servers[1].internalServerNumber, 'videos', video.uuid + '-240.mp4')
- const fps = await getVideoFileFPS(path)
- expect(fps).to.be.equal(25)
+ {
+ const path = join(root(), 'test' + servers[ 1 ].internalServerNumber, 'videos', video.uuid + '-240.mp4')
+ const fps = await getVideoFileFPS(path)
+ expect(fps).to.be.equal(25)
+ }
+
+ {
+ const path = join(root(), 'test' + servers[ 1 ].internalServerNumber, 'videos', video.uuid + '-720.mp4')
+ const fps = await getVideoFileFPS(path)
+ expect(fps).to.be.equal(59)
+ }
}
})
if (!exists) {
return new Promise<string>(async (res, rej) => {
ffmpeg()
- .outputOptions([ '-f rawvideo', '-video_size 320x240', '-i /dev/urandom' ])
+ .outputOptions([ '-f rawvideo', '-video_size 1280x720', '-i /dev/urandom' ])
.outputOptions([ '-ac 2', '-f s16le', '-i /dev/urandom', '-t 10' ])
.outputOptions([ `-r ${fps}` ])
.output(tempFixturePath)