1
0
Fork 0

Fix audio encoding params

This commit is contained in:
Chocobozzz 2020-11-24 16:24:50 +01:00 committed by Chocobozzz
parent ca5c612bfd
commit 33ff70baa6
4 changed files with 36 additions and 33 deletions

View File

@ -37,38 +37,37 @@ async function getAudioStream (videoPath: string, existingProbe?: ffmpeg.Ffprobe
} }
function getMaxAudioBitrate (type: 'aac' | 'mp3' | string, bitrate: number) { function getMaxAudioBitrate (type: 'aac' | 'mp3' | string, bitrate: number) {
const baseKbitrate = 384 const maxKBitrate = 384
const toBits = (kbits: number) => kbits * 8000 const kToBits = (kbits: number) => kbits * 1000
// If we did not manage to get the bitrate, use an average value
if (!bitrate) return 256
if (type === 'aac') { if (type === 'aac') {
switch (true) { switch (true) {
case bitrate > toBits(baseKbitrate): case bitrate > kToBits(maxKBitrate):
return baseKbitrate return maxKBitrate
default: default:
return -1 // we interpret it as a signal to copy the audio stream as is return -1 // we interpret it as a signal to copy the audio stream as is
} }
} }
if (type === 'mp3') { /*
/* a 192kbit/sec mp3 doesn't hold as much information as a 192kbit/sec aac.
a 192kbit/sec mp3 doesn't hold as much information as a 192kbit/sec aac. That's why, when using aac, we can go to lower kbit/sec. The equivalences
That's why, when using aac, we can go to lower kbit/sec. The equivalences made here are not made to be accurate, especially with good mp3 encoders.
made here are not made to be accurate, especially with good mp3 encoders. */
*/ switch (true) {
switch (true) { case bitrate <= kToBits(192):
case bitrate <= toBits(192): return 128
return 128
case bitrate <= toBits(384): case bitrate <= kToBits(384):
return 256 return 256
default: default:
return baseKbitrate return maxKBitrate
}
} }
return undefined
} }
async function getVideoStreamSize (path: string, existingProbe?: ffmpeg.FfprobeData) { async function getVideoStreamSize (path: string, existingProbe?: ffmpeg.FfprobeData) {
@ -208,6 +207,9 @@ async function canDoQuickVideoTranscode (path: string, probe?: ffmpeg.FfprobeDat
const bitRate = await getVideoFileBitrate(path, probe) const bitRate = await getVideoFileBitrate(path, probe)
const resolution = await getVideoFileResolution(path, probe) const resolution = await getVideoFileResolution(path, probe)
// If ffprobe did not manage to guess the bitrate
if (!bitRate) return false
// check video params // check video params
if (videoStream == null) return false if (videoStream == null) return false
if (videoStream['codec_name'] !== 'h264') return false if (videoStream['codec_name'] !== 'h264') return false
@ -221,15 +223,15 @@ async function canDoQuickVideoTranscode (path: string, probe?: ffmpeg.FfprobeDat
async function canDoQuickAudioTranscode (path: string, probe?: ffmpeg.FfprobeData): Promise<boolean> { async function canDoQuickAudioTranscode (path: string, probe?: ffmpeg.FfprobeData): Promise<boolean> {
const parsedAudio = await getAudioStream(path, probe) const parsedAudio = await getAudioStream(path, probe)
// check audio params (if audio stream exists) if (!parsedAudio.audioStream) return true
if (parsedAudio.audioStream) {
if (parsedAudio.audioStream['codec_name'] !== 'aac') return false
const audioBitrate = parsedAudio.bitrate if (parsedAudio.audioStream['codec_name'] !== 'aac') return false
const maxAudioBitrate = getMaxAudioBitrate('aac', audioBitrate) const audioBitrate = parsedAudio.bitrate
if (maxAudioBitrate !== -1 && audioBitrate > maxAudioBitrate) return false if (!audioBitrate) return false
}
const maxAudioBitrate = getMaxAudioBitrate('aac', audioBitrate)
if (maxAudioBitrate !== -1 && audioBitrate > maxAudioBitrate) return false
return true return true
} }

View File

@ -268,8 +268,7 @@ class LiveManager {
? await getLiveTranscodingCommand({ ? await getLiveTranscodingCommand({
rtmpUrl, rtmpUrl,
outPath, outPath,
resolutions: resolutions: allResolutions,
allResolutions,
fps, fps,
deleteSegments, deleteSegments,
availableEncoders, availableEncoders,

View File

@ -216,19 +216,19 @@ describe('Test multiple servers', function () {
files: [ files: [
{ {
resolution: 240, resolution: 240,
size: 189000 size: 270000
}, },
{ {
resolution: 360, resolution: 360,
size: 278000 size: 359000
}, },
{ {
resolution: 480, resolution: 480,
size: 384000 size: 465000
}, },
{ {
resolution: 720, resolution: 720,
size: 706000 size: 788000
} }
], ],
thumbnailfile: 'thumbnail', thumbnailfile: 'thumbnail',

View File

@ -157,6 +157,8 @@ describe('Test a single server', function () {
}) })
it('Should upload the video', async function () { it('Should upload the video', async function () {
this.timeout(10000)
const videoAttributes = { const videoAttributes = {
name: 'my super name', name: 'my super name',
category: 2, category: 2,