}
}
-function computeResolutionsToTranscode (videoFileHeight: number) {
+function computeResolutionsToTranscode (videoFileResolution: number) {
const resolutionsEnabled: number[] = []
const configResolutions = CONFIG.TRANSCODING.RESOLUTIONS
]
for (const resolution of resolutions) {
- if (configResolutions[resolution + 'p'] === true && videoFileHeight > resolution) {
+ if (configResolutions[resolution + 'p'] === true && videoFileResolution > resolution) {
resolutionsEnabled.push(resolution)
}
}
baseProfile = baseProfileMatrix['High'] // Fallback
}
- const level = videoStream.level.toString(16)
+ let level = videoStream.level.toString(16)
+ if (level.length === 1) level = `0${level}`
return `${videoCodec}.${baseProfile}${level}`
}
return 0
}
-async function getMetadataFromFile<T> (path: string, cb = metadata => metadata) {
+async function getMetadataFromFile <T> (path: string, cb = metadata => metadata) {
return new Promise<T>((res, rej) => {
ffmpeg.ffprobe(path, (err, metadata) => {
if (err) return rej(err)
.sort((a, b) => fps % a - fps % b)[0]
}
+function convertWebPToJPG (path: string, destination: string): Promise<void> {
+ return new Promise<void>(async (res, rej) => {
+ try {
+ const command = ffmpeg(path).output(destination)
+
+ command.on('error', (err, stdout, stderr) => {
+ logger.error('Error in ffmpeg webp convert process.', { stdout, stderr })
+ return rej(err)
+ })
+ .on('end', () => res())
+ .run()
+ } catch (err) {
+ return rej(err)
+ }
+ })
+}
+
// ---------------------------------------------------------------------------
export {
getVideoStreamCodec,
getAudioStreamCodec,
+ convertWebPToJPG,
getVideoStreamSize,
getVideoFileResolution,
getMetadataFromFile,
const videoPath = getHLSVideoPath(options)
if (options.copyCodecs) command = presetCopy(command)
+ else if (options.resolution === VideoResolution.H_NOVIDEO) command = presetOnlyAudio(command)
else command = await buildx264Command(command, options)
command = command.outputOption('-hls_time 4')