-function addEncoderDefaultParams (command: ffmpeg.FfmpegCommand, encoder: 'libx264' | string, fps?: number) {
- if (encoder !== 'libx264') return
-
- command.outputOption('-level 3.1') // 3.1 is the minimal resource allocation for our highest supported resolution
- .outputOption('-b_strategy 1') // NOTE: b-strategy 1 - heuristic algorithm, 16 is optimal B-frames for it
- .outputOption('-bf 16') // NOTE: Why 16: https://github.com/Chocobozzz/PeerTube/pull/774. b-strategy 2 -> B-frames<16
- .outputOption('-pix_fmt yuv420p') // allows import of source material with incompatible pixel formats (e.g. MJPEG video)
- .outputOption('-map_metadata -1') // strip all metadata
- .outputOption('-max_muxing_queue_size 1024') // avoid issues when transcoding some files: https://trac.ffmpeg.org/ticket/6375
- // Keyframe interval of 2 seconds for faster seeking and resolution switching.
- // https://streaminglearningcenter.com/blogs/whats-the-right-keyframe-interval.html
- // https://superuser.com/a/908325
- .outputOption('-g ' + (fps * 2))
+function addDefaultEncoderGlobalParams (options: {
+ command: ffmpeg.FfmpegCommand
+}) {
+ const { command } = options
+
+ // avoid issues when transcoding some files: https://trac.ffmpeg.org/ticket/6375
+ command.outputOption('-max_muxing_queue_size 1024')
+ // strip all metadata
+ .outputOption('-map_metadata -1')
+ // NOTE: b-strategy 1 - heuristic algorithm, 16 is optimal B-frames for it
+ .outputOption('-b_strategy 1')
+ // NOTE: Why 16: https://github.com/Chocobozzz/PeerTube/pull/774. b-strategy 2 -> B-frames<16
+ .outputOption('-bf 16')
+ // allows import of source material with incompatible pixel formats (e.g. MJPEG video)
+ .outputOption('-pix_fmt yuv420p')
+}
+
+function addDefaultEncoderParams (options: {
+ command: ffmpeg.FfmpegCommand
+ encoder: 'libx264' | string
+ streamNum?: number
+ fps?: number
+}) {
+ const { command, encoder, fps, streamNum } = options
+
+ if (encoder === 'libx264') {
+ // 3.1 is the minimal resource allocation for our highest supported resolution
+ command.outputOption(buildStreamSuffix('-level:v', streamNum) + ' 3.1')
+
+ if (fps) {
+ // Keyframe interval of 2 seconds for faster seeking and resolution switching.
+ // https://streaminglearningcenter.com/blogs/whats-the-right-keyframe-interval.html
+ // https://superuser.com/a/908325
+ command.outputOption(buildStreamSuffix('-g:v', streamNum) + ' ' + (fps * 2))
+ }
+ }