import { VideoResolution, VideoTranscodingFPS } from '@shared/models'
import { CONFIG } from '../../initializers/config'
import { VIDEO_TRANSCODING_FPS } from '../../initializers/constants'
+import { toEven } from '../core-utils'
import { logger } from '../logger'
/**
baseProfile = baseProfileMatrix[videoCodec]['High'] // Fallback
}
- let level = videoStream.level.toString(16)
- if (level.length === 1) level = `0${level}`
-
if (videoCodec === 'av01') {
+ let level = videoStream.level.toString()
+ if (level.length === 1) level = `0${level}`
+
// Guess the tier indicator and bit depth
return `${videoCodec}.${baseProfile}.${level}M.08`
}
+ let level = videoStream.level.toString(16)
+ if (level.length === 1) level = `0${level}`
+
// Default, h264 codec
return `${videoCodec}.${baseProfile}${level}`
}
type: 'vod' | 'live'
includeInput: boolean
strictLower: boolean
+ hasAudio: boolean
}) {
- const { input, type, includeInput, strictLower } = options
+ const { input, type, includeInput, strictLower, hasAudio } = options
const configResolutions = type === 'vod'
? CONFIG.TRANSCODING.RESOLUTIONS
if (input < resolution) continue
// We only want lower resolutions than input file
if (strictLower && input === resolution) continue
+ // Audio resolutio but no audio in the video
+ if (resolution === VideoResolution.H_NOVIDEO && !hasAudio) continue
resolutionsEnabled.add(resolution)
}
if (includeInput) {
- resolutionsEnabled.add(input)
+ // Always use an even resolution to avoid issues with ffmpeg
+ resolutionsEnabled.add(toEven(input))
}
return Array.from(resolutionsEnabled)