]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
add support for inputOptions in trancode plugins
authorThéo Le Calvar <tlc@kher.nl>
Sat, 3 Apr 2021 16:48:14 +0000 (18:48 +0200)
committerChocobozzz <chocobozzz@cpy.re>
Fri, 9 Apr 2021 13:53:18 +0000 (15:53 +0200)
server/helpers/ffmpeg-utils.ts
server/lib/video-transcoding-profiles.ts
shared/models/videos/video-transcoding.model.ts
support/doc/plugins/guide.md

index 01c3aa5f759dda4ceb6deccd1887b0aa25171bc8..32bd3e44a7ecca298718af56d8f15c12abd6b12b 100644 (file)
@@ -277,6 +277,7 @@ async function getLiveTranscodingCommand (options: {
       logger.debug('Apply ffmpeg live video params from %s using %s profile.', builderResult.encoder, profile, builderResult)
 
       command.outputOption(`${buildStreamSuffix('-c:v', i)} ${builderResult.encoder}`)
+      command.addInputOptions(builderResult.result.inputOptions)
       command.addOutputOptions(builderResult.result.outputOptions)
     }
 
@@ -294,6 +295,7 @@ async function getLiveTranscodingCommand (options: {
       logger.debug('Apply ffmpeg live audio params from %s using %s profile.', builderResult.encoder, profile, builderResult)
 
       command.outputOption(`${buildStreamSuffix('-c:a', i)} ${builderResult.encoder}`)
+      command.addInputOptions(builderResult.result.inputOptions)
       command.addOutputOptions(builderResult.result.outputOptions)
     }
 
@@ -605,6 +607,7 @@ async function presetVideo (
       localCommand.audioCodec(builderResult.encoder)
     }
 
+    command.addInputOptions(builderResult.result.inputOptions)
     command.addOutputOptions(builderResult.result.outputOptions)
     addDefaultEncoderParams({ command: localCommand, encoder: builderResult.encoder, fps })
   }
index b7f9178c4c486e912b9c88b84105cf82c4ecd7c2..d802e2c9dd6eb421b45b42e1a367b8b87355c2d2 100644 (file)
@@ -24,9 +24,10 @@ import { VIDEO_TRANSCODING_FPS } from '../initializers/constants'
 
 const defaultX264VODOptionsBuilder: EncoderOptionsBuilder = async ({ input, resolution, fps }) => {
   const targetBitrate = await buildTargetBitrate({ input, resolution, fps })
-  if (!targetBitrate) return { outputOptions: [ ] }
+  if (!targetBitrate) return { inputOptions: [ ], outputOptions: [ ] }
 
   return {
+    inputOptions: [ ],
     outputOptions: [
       `-preset veryfast`,
       `-r ${fps}`,
@@ -40,6 +41,7 @@ const defaultX264LiveOptionsBuilder: EncoderOptionsBuilder = async ({ resolution
   const targetBitrate = getTargetBitrate(resolution, fps, VIDEO_TRANSCODING_FPS)
 
   return {
+    inputOptions: [ ],
     outputOptions: [
       `-preset veryfast`,
       `${buildStreamSuffix('-r:v', streamNum)} ${fps}`,
@@ -55,7 +57,7 @@ const defaultAACOptionsBuilder: EncoderOptionsBuilder = async ({ input, streamNu
 
   if (await canDoQuickAudioTranscode(input, probe)) {
     logger.debug('Copy audio stream %s by AAC encoder.', input)
-    return { copy: true, outputOptions: [] }
+    return { copy: true, inputOptions: [ ], outputOptions: [ ] }
   }
 
   const parsedAudio = await getAudioStream(input, probe)
@@ -70,14 +72,14 @@ const defaultAACOptionsBuilder: EncoderOptionsBuilder = async ({ input, streamNu
   logger.debug('Calculating audio bitrate of %s by AAC encoder.', input, { bitrate: parsedAudio.bitrate, audioCodecName })
 
   if (bitrate !== undefined && bitrate !== -1) {
-    return { outputOptions: [ buildStreamSuffix('-b:a', streamNum), bitrate + 'k' ] }
+    return { inputOptions: [ ], outputOptions: [ buildStreamSuffix('-b:a', streamNum), bitrate + 'k' ] }
   }
 
-  return { outputOptions: [ ] }
+  return { inputOptions: [ ], outputOptions: [ ] }
 }
 
 const defaultLibFDKAACVODOptionsBuilder: EncoderOptionsBuilder = ({ streamNum }) => {
-  return { outputOptions: [ buildStreamSuffix('-q:a', streamNum), '5' ] }
+  return { inputOptions: [ ], outputOptions: [ buildStreamSuffix('-q:a', streamNum), '5' ] }
 }
 
 // Used to get and update available encoders
index 06b555c16034380a46e62547f063344ff7208aa3..52b468a965818e6da2166d91b5456ecd57e1bef2 100644 (file)
@@ -12,6 +12,7 @@ export type EncoderOptionsBuilder = (params: {
 export interface EncoderOptions {
   copy?: boolean // Copy stream? Default to false
 
+  inputOptions: string[]
   outputOptions: string[]
 }
 
index f5e753b794d724ae8d1795881816a0d4ee4f6da1..18e962c10ff49b8d4f94708b00c764f3ec66b3ef 100644 (file)
@@ -342,6 +342,7 @@ async function register ({
 
       // You can also return a promise
       return {
+        inputOptions: [],
         outputOptions: [
         // Use a custom bitrate
           '-b' + streamString + ' 10K'
@@ -392,6 +393,7 @@ async function register ({
   {
     const builder = () => {
       return {
+        inputOptions: [],
         outputOptions: []
       }
     }