})
describe('Should manipulate these videos', function () {
- it('Should update the video 3 by asking server 3', async function () {
+ let updatedAtMin: Date
+
+ it('Should update video 3', async function () {
this.timeout(10000)
const attributes = {
previewfile: 'preview.jpg'
}
+ updatedAtMin = new Date()
await servers[2].videos.update({ id: toRemove[0].id, attributes })
await waitJobs(servers)
const videoUpdated = data.find(video => video.name === 'my super video updated')
expect(!!videoUpdated).to.be.true
+ expect(new Date(videoUpdated.updatedAt)).to.be.greaterThan(updatedAtMin)
+
const isLocal = server.url === 'http://localhost:' + servers[2].port
const checkAttributes = {
name: 'my super video updated',
files: [
{
resolution: 720,
- size: 59000
+ size: 61000
},
{
resolution: 480,
- size: 34000
+ size: 40000
},
{
resolution: 360,
- size: 31000
+ size: 32000
},
{
resolution: 240,
import 'mocha'
import * as chai from 'chai'
import { omit } from 'lodash'
-import { getMaxBitrate } from '@shared/core-utils'
+import { getMaxBitrate, getMinLimitBitrate } from '@shared/core-utils'
import {
buildAbsoluteFixturePath,
cleanupTests,
}
})
- it('Should not transcode to an higher bitrate than the original file', async function () {
+ it('Should not transcode to an higher bitrate than the original file but above our low limit', async function () {
this.timeout(160_000)
const newConfig = {
const path = servers[1].servers.buildWebTorrentFilePath(file.fileUrl)
const bitrate = await getVideoFileBitrate(path)
- expect(bitrate, `${path} not below ${60_000}`).to.be.below(60_000)
+
+ const inputBitrate = 60_000
+ const limit = getMinLimitBitrate({ fps: 10, ratio: 1, resolution: r })
+ let belowValue = Math.max(inputBitrate, limit)
+ belowValue += belowValue * 0.20 // Apply 20% margin because bitrate control is not very precise
+
+ expect(bitrate, `${path} not below ${limit}`).to.be.below(belowValue)
}
})
})
import 'mocha'
import * as chai from 'chai'
-import { getVideoFileBitrate, getVideoFileFPS } from '@server/helpers/ffprobe-utils'
-import { getMaxBitrate } from '@shared/core-utils'
import { buildAbsoluteFixturePath, CLICommand } from '@shared/extra-utils'
import { VideoResolution } from '../../../shared/models/videos'
it('Should print the correct command for each resolution', async function () {
const fixturePath = buildAbsoluteFixturePath('video_short.webm')
- const fps = await getVideoFileFPS(fixturePath)
- const bitrate = await getVideoFileBitrate(fixturePath)
for (const resolution of [
VideoResolution.H_720P,
VideoResolution.H_1080P
]) {
const command = await CLICommand.exec(`npm run print-transcode-command -- ${fixturePath} -r ${resolution}`)
- const targetBitrate = Math.min(getMaxBitrate({ resolution, fps, ratio: 16 / 9 }), bitrate + (bitrate * 0.3))
expect(command).to.includes(`-vf scale=w=-2:h=${resolution}`)
expect(command).to.includes(`-y -acodec aac -vcodec libx264`)
expect(command).to.includes('-r 25')
expect(command).to.includes('-level:v 3.1')
expect(command).to.includes('-g:v 50')
- expect(command).to.includes(`-maxrate ${targetBitrate}`)
- expect(command).to.includes(`-bufsize ${targetBitrate * 2}`)
+ expect(command).to.includes(`-maxrate `)
+ expect(command).to.includes(`-bufsize `)
}
})
})