2024-03-05 10:20:36 +00:00

43 lines
1.4 KiB
JavaScript
Executable File

import path from "path"
const ffmpeg = require("fluent-ffmpeg")
function videoTranscode(originalFilePath, outputPath, options = {}) {
return new Promise((resolve, reject) => {
const filename = path.basename(originalFilePath)
const outputFilename = `${filename.split(".")[0]}_transcoded.${options.format ?? "webm"}`
const outputFilepath = `${outputPath}/${outputFilename}`
console.debug(`[TRANSCODING] Transcoding ${originalFilePath} to ${outputFilepath}`)
const onEnd = async () => {
console.debug(`[TRANSCODING] Finished transcode ${originalFilePath} to ${outputFilepath}`)
return resolve({
filepath: outputFilepath,
filename: outputFilename,
})
}
const onError = (err) => {
console.error(`[TRANSCODING] Transcoding ${originalFilePath} to ${outputFilepath} failed`, err)
return reject(err)
}
ffmpeg(originalFilePath)
.audioBitrate(options.audioBitrate ?? 128)
.videoBitrate(options.videoBitrate ?? 1024)
.videoCodec(options.videoCodec ?? "libvpx")
.audioCodec(options.audioCodec ?? "libvorbis")
.format(options.format ?? "webm")
.output(outputFilepath)
.on("error", onError)
.on("end", onEnd)
.run()
})
}
export {
videoTranscode,
}