]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/helpers/ffmpeg-utils.ts
Fix video block in abuse table
[github/Chocobozzz/PeerTube.git] / server / helpers / ffmpeg-utils.ts
index 5ee295635eec6d1faaa1ca0430666e483b1fb73e..7bfd5d44acce0b5160a377c2fa0438fa85810bc9 100644 (file)
@@ -74,7 +74,7 @@ namespace audio {
   }
 }
 
-function computeResolutionsToTranscode (videoFileHeight: number) {
+function computeResolutionsToTranscode (videoFileResolution: number) {
   const resolutionsEnabled: number[] = []
   const configResolutions = CONFIG.TRANSCODING.RESOLUTIONS
 
@@ -90,7 +90,7 @@ function computeResolutionsToTranscode (videoFileHeight: number) {
   ]
 
   for (const resolution of resolutions) {
-    if (configResolutions[resolution + 'p'] === true && videoFileHeight > resolution) {
+    if (configResolutions[resolution + 'p'] === true && videoFileResolution > resolution) {
       resolutionsEnabled.push(resolution)
     }
   }
@@ -125,7 +125,8 @@ async function getVideoStreamCodec (path: string) {
     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}`
 }
@@ -170,7 +171,7 @@ async function getVideoFileFPS (path: string) {
   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)
@@ -337,11 +338,29 @@ function getClosestFramerateStandard (fps: number, type: 'HD_STANDARD' | 'STANDA
                                     .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,
@@ -422,6 +441,7 @@ async function buildHLSCommand (command: ffmpeg.FfmpegCommand, options: HLSTrans
   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')