Compare commits
	
		
			11 Commits
		
	
	
		
			38936ff6ef
			...
			add-cq-con
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 901d20e265 | |||
| 98acf0be91 | |||
| 4c9ee97fb9 | |||
| 8fda9f4435 | |||
| 72d52d1580 | |||
| 1bd02a4902 | |||
| 21b28b35f2 | |||
| 92b9e78076 | |||
| dff32f1466 | |||
| 1e7cc6961d | |||
| 70a974335f | 
							
								
								
									
										49
									
								
								dist/main.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										49
									
								
								dist/main.js
									
									
									
									
										vendored
									
									
								
							| @ -4,8 +4,9 @@ exports.unregister = exports.register = void 0; | ||||
| let logger; | ||||
| let transcodingManager; | ||||
| const DEFAULT_HARDWARE_DECODE = false; | ||||
| const DEFAULT_VOD_QUALITY = "p5"; | ||||
| const DEFAULT_VOD_QUALITY = "p7"; | ||||
| const DEFAULT_LIVE_QUALITY = "hq"; | ||||
| const DEFAULT_CQ = 23; | ||||
| const DEFAULT_BITRATES = new Map([ | ||||
|     [0, 64 * 1000], | ||||
|     [144, 320 * 1000], | ||||
| @ -20,6 +21,7 @@ let pluginSettings = { | ||||
|     hardwareDecode: DEFAULT_HARDWARE_DECODE, | ||||
|     vodQuality: DEFAULT_VOD_QUALITY, | ||||
|     liveQuality: DEFAULT_LIVE_QUALITY, | ||||
|     cqQuality: DEFAULT_CQ, | ||||
|     baseBitrate: new Map(DEFAULT_BITRATES) | ||||
| }; | ||||
| let latestStreamNum = 9999; | ||||
| @ -72,6 +74,14 @@ async function register({ settingsManager, peertubeHelpers, transcodingManager: | ||||
|         default: DEFAULT_LIVE_QUALITY.toString(), | ||||
|         private: false | ||||
|     }); | ||||
|     registerSetting({ | ||||
|         name: 'constant-quality', | ||||
|         label: 'Constant Quality (-cq)', | ||||
|         descriptionHTML: 'Edit the constant quality (-cq) for videos. The lower the number, the higher the perceived visual fidelity and file size.', | ||||
|         type: 'input', | ||||
|         default: DEFAULT_CQ.toString(), | ||||
|         private: false, | ||||
|     }); | ||||
|     registerSetting({ | ||||
|         name: 'base-bitrate-description', | ||||
|         label: 'Base bitrate', | ||||
| @ -106,6 +116,7 @@ async function loadSettings(settingsManager) { | ||||
|     pluginSettings.hardwareDecode = await settingsManager.getSetting('hardware-decode') == "true"; | ||||
|     pluginSettings.vodQuality = parseInt(await settingsManager.getSetting('vod-quality')) || DEFAULT_VOD_QUALITY; | ||||
|     pluginSettings.liveQuality = parseInt(await settingsManager.getSetting('live-quality')) || DEFAULT_LIVE_QUALITY; | ||||
|     pluginSettings.cqQuality = parseInt(await settingsManager.getSetting('constant-quality')) || DEFAULT_CQ; | ||||
|     for (const [resolution, bitrate] of DEFAULT_BITRATES) { | ||||
|         const key = `base-bitrate-${resolution}`; | ||||
|         const storedValue = await settingsManager.getSetting(key); | ||||
| @ -146,11 +157,12 @@ function buildInitOptions() { | ||||
| async function vodBuilder(params) { | ||||
|     const { resolution, fps, streamNum, inputBitrate } = params; | ||||
|     const streamSuffix = streamNum == undefined ? '' : `:${streamNum}`; | ||||
|     let targetBitrate = getTargetBitrate(resolution, fps); | ||||
|     // let targetBitrate = getTargetBitrate(resolution, fps); | ||||
|     let targetBitrate = inputBitrate; | ||||
|     let shouldInitVaapi = (streamNum == undefined || streamNum <= latestStreamNum); | ||||
|     if (targetBitrate > inputBitrate) { | ||||
|         targetBitrate = inputBitrate; | ||||
|     } | ||||
|     // if (targetBitrate > inputBitrate) { | ||||
|     //     targetBitrate = inputBitrate; | ||||
|     // } | ||||
|     logger.info(`Building encoder options, received ${JSON.stringify(params)}`); | ||||
|     if (shouldInitVaapi && streamNum != undefined) { | ||||
|         latestStreamNum = streamNum; | ||||
| @ -162,10 +174,12 @@ async function vodBuilder(params) { | ||||
|         inputOptions: shouldInitVaapi ? buildInitOptions() : [], | ||||
|         outputOptions: [ | ||||
|             `-preset ${pluginSettings.vodQuality}`, | ||||
|             `-b:v${streamSuffix} ${targetBitrate}`, | ||||
|             `-bufsize ${targetBitrate * 2}`, | ||||
|             // `-b:v${streamSuffix} ${targetBitrate}`, | ||||
|             // `-bufsize ${targetBitrate * 2}`, | ||||
|             //`-crf 21`, // increased 19 to 21, file size massive | ||||
|             `-profile:v${streamSuffix} high` | ||||
|             `-profile:v${streamSuffix} high`, | ||||
|             `-cq 22`, | ||||
|             `-c:v${streamSuffix} h264_nvenc` | ||||
|         ] | ||||
|     }; | ||||
|     logger.info(`EncoderOptions: ${JSON.stringify(options)}`); | ||||
| @ -174,11 +188,12 @@ async function vodBuilder(params) { | ||||
| async function liveBuilder(params) { | ||||
|     const { resolution, fps, streamNum, inputBitrate } = params; | ||||
|     const streamSuffix = streamNum == undefined ? '' : `:${streamNum}`; | ||||
|     let targetBitrate = getTargetBitrate(resolution, fps); | ||||
|     // let targetBitrate = getTargetBitrate(resolution, fps); | ||||
|     let targetBitrate = inputBitrate; | ||||
|     let shouldInitVaapi = (streamNum == undefined || streamNum <= latestStreamNum); | ||||
|     if (targetBitrate > inputBitrate) { | ||||
|         targetBitrate = inputBitrate; | ||||
|     } | ||||
|     // if (targetBitrate > inputBitrate) { | ||||
|     //     targetBitrate = inputBitrate; | ||||
|     // } | ||||
|     logger.info(`Building encoder options, received ${JSON.stringify(params)}`); | ||||
|     if (shouldInitVaapi && streamNum != undefined) { | ||||
|         latestStreamNum = streamNum; | ||||
| @ -190,11 +205,13 @@ async function liveBuilder(params) { | ||||
|         inputOptions: shouldInitVaapi ? buildInitOptions() : [], | ||||
|         outputOptions: [ | ||||
|             `-tune ${pluginSettings.liveQuality}`, | ||||
|             `-r:v${streamSuffix} ${fps}`, | ||||
|             // `-r:v${streamSuffix} ${fps}`, | ||||
|             `-profile:v${streamSuffix} high`, | ||||
|             `-g:v${streamSuffix} ${fps * 2}`, | ||||
|             `-b:v${streamSuffix} ${targetBitrate}`, | ||||
|             `-bufsize ${targetBitrate * 2}`, | ||||
|             `-c:v${streamSuffix} h264_nvenc`, | ||||
|             `-cq 22` | ||||
|             // `-g:v${streamSuffix} ${fps * 2}`, | ||||
|             // `-b:v${streamSuffix} ${targetBitrate}`, | ||||
|             // `-bufsize ${targetBitrate * 2}`, | ||||
|         ] | ||||
|     }; | ||||
|     logger.info(`EncoderOptions: ${JSON.stringify(options)}`); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user