Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 1,740 Bytes
a65e95e 5dfc565 a65e95e 5dfc565 a65e95e 5dfc565 a65e95e 5dfc565 7bea24d 5dfc565 a65e95e 5dfc565 7bea24d a65e95e 5dfc565 a65e95e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
import path from "node:path"
import { v4 as uuidv4 } from "uuid"
import tmpDir from "temp-dir"
import ffmpeg from "fluent-ffmpeg"
import { moveFileFromTmpToPending } from "../utils/moveFileFromTmpToPending.mts"
export const postInterpolation = async (fileName: string, durationMs: number, nbFrames: number): Promise<string> => {
return new Promise((resolve,reject) => {
const tmpFileName = `${uuidv4()}.mp4`
const filePath = path.join(tmpDir, fileName)
const tmpFilePath = path.join(tmpDir, tmpFileName)
ffmpeg.ffprobe(filePath, function(err, metadata) {
if (err) { reject(err); return; }
const durationInSec = durationMs / 1000
const currentVideoDurationInSec = metadata.format.duration
console.log(`currentVideoDurationInSec in sec: ${currentVideoDurationInSec}s`)
console.log(`target duration in sec: ${durationInSec}s (${durationMs}ms)`)
// compute a ratio ex. 0.3 = 30% of the total length
const durationRatio = currentVideoDurationInSec / durationInSec
console.log(`durationRatio: ${durationRatio}`)
ffmpeg(filePath)
// convert to HD
.size("1280x720")
.videoFilters([
`setpts=${durationRatio}*PTS`, // we make the video faster
//'scale=-1:576:lanczos',
// 'unsharp=5:5:0.2:5:5:0.2', // not recommended, this make the video more "pixely"
'noise=c0s=10:c0f=t+u' // add a movie grain noise
])
.outputOptions([
`-r ${nbFrames}`,
])
.save(tmpFilePath)
.on("end", async () => {
await moveFileFromTmpToPending(tmpFileName, fileName)
resolve(fileName)
})
.on("error", (err) => {
reject(err)
})
})
})
} |