feat(server): add pcm_s16le accepted audio codec (#13418)

This commit is contained in:
pyorot 2024-10-18 13:26:16 +01:00 committed by GitHub
parent 12628b80bc
commit b1149881bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 13 additions and 5 deletions

View File

@ -19,7 +19,7 @@ The default configuration looks like this:
"targetVideoCodec": "h264", "targetVideoCodec": "h264",
"acceptedVideoCodecs": ["h264"], "acceptedVideoCodecs": ["h264"],
"targetAudioCodec": "aac", "targetAudioCodec": "aac",
"acceptedAudioCodecs": ["aac", "mp3", "libopus"], "acceptedAudioCodecs": ["aac", "mp3", "libopus", "pcm_s16le"],
"acceptedContainers": ["mov", "ogg", "webm"], "acceptedContainers": ["mov", "ogg", "webm"],
"targetResolution": "720", "targetResolution": "720",
"maxBitrate": "0", "maxBitrate": "0",

View File

@ -26,12 +26,14 @@ class AudioCodec {
static const mp3 = AudioCodec._(r'mp3'); static const mp3 = AudioCodec._(r'mp3');
static const aac = AudioCodec._(r'aac'); static const aac = AudioCodec._(r'aac');
static const libopus = AudioCodec._(r'libopus'); static const libopus = AudioCodec._(r'libopus');
static const pcmS16le = AudioCodec._(r'pcm_s16le');
/// List of all possible values in this [enum][AudioCodec]. /// List of all possible values in this [enum][AudioCodec].
static const values = <AudioCodec>[ static const values = <AudioCodec>[
mp3, mp3,
aac, aac,
libopus, libopus,
pcmS16le,
]; ];
static AudioCodec? fromJson(dynamic value) => AudioCodecTypeTransformer().decode(value); static AudioCodec? fromJson(dynamic value) => AudioCodecTypeTransformer().decode(value);
@ -73,6 +75,7 @@ class AudioCodecTypeTransformer {
case r'mp3': return AudioCodec.mp3; case r'mp3': return AudioCodec.mp3;
case r'aac': return AudioCodec.aac; case r'aac': return AudioCodec.aac;
case r'libopus': return AudioCodec.libopus; case r'libopus': return AudioCodec.libopus;
case r'pcm_s16le': return AudioCodec.pcmS16le;
default: default:
if (!allowNull) { if (!allowNull) {
throw ArgumentError('Unknown enum value to decode: $data'); throw ArgumentError('Unknown enum value to decode: $data');

View File

@ -8507,7 +8507,8 @@
"enum": [ "enum": [
"mp3", "mp3",
"aac", "aac",
"libopus" "libopus",
"pcm_s16le"
], ],
"type": "string" "type": "string"
}, },

View File

@ -3501,7 +3501,8 @@ export enum TranscodeHWAccel {
export enum AudioCodec { export enum AudioCodec {
Mp3 = "mp3", Mp3 = "mp3",
Aac = "aac", Aac = "aac",
Libopus = "libopus" Libopus = "libopus",
PcmS16Le = "pcm_s16le"
} }
export enum VideoContainer { export enum VideoContainer {
Mov = "mov", Mov = "mov",

View File

@ -163,7 +163,7 @@ export const defaults = Object.freeze<SystemConfig>({
targetVideoCodec: VideoCodec.H264, targetVideoCodec: VideoCodec.H264,
acceptedVideoCodecs: [VideoCodec.H264], acceptedVideoCodecs: [VideoCodec.H264],
targetAudioCodec: AudioCodec.AAC, targetAudioCodec: AudioCodec.AAC,
acceptedAudioCodecs: [AudioCodec.AAC, AudioCodec.MP3, AudioCodec.LIBOPUS], acceptedAudioCodecs: [AudioCodec.AAC, AudioCodec.MP3, AudioCodec.LIBOPUS, AudioCodec.PCMS16LE],
acceptedContainers: [VideoContainer.MOV, VideoContainer.OGG, VideoContainer.WEBM], acceptedContainers: [VideoContainer.MOV, VideoContainer.OGG, VideoContainer.WEBM],
targetResolution: '720', targetResolution: '720',
maxBitrate: '0', maxBitrate: '0',

View File

@ -278,6 +278,7 @@ export enum AudioCodec {
MP3 = 'mp3', MP3 = 'mp3',
AAC = 'aac', AAC = 'aac',
LIBOPUS = 'libopus', LIBOPUS = 'libopus',
PCMS16LE = 'pcm_s16le',
} }
export enum VideoContainer { export enum VideoContainer {

View File

@ -49,7 +49,7 @@ const updatedConfig = Object.freeze<SystemConfig>({
threads: 0, threads: 0,
preset: 'ultrafast', preset: 'ultrafast',
targetAudioCodec: AudioCodec.AAC, targetAudioCodec: AudioCodec.AAC,
acceptedAudioCodecs: [AudioCodec.AAC, AudioCodec.MP3, AudioCodec.LIBOPUS], acceptedAudioCodecs: [AudioCodec.AAC, AudioCodec.MP3, AudioCodec.LIBOPUS, AudioCodec.PCMS16LE],
targetResolution: '720', targetResolution: '720',
targetVideoCodec: VideoCodec.H264, targetVideoCodec: VideoCodec.H264,
acceptedVideoCodecs: [VideoCodec.H264], acceptedVideoCodecs: [VideoCodec.H264],

View File

@ -102,6 +102,7 @@
onSelect={() => (config.ffmpeg.acceptedVideoCodecs = [config.ffmpeg.targetVideoCodec])} onSelect={() => (config.ffmpeg.acceptedVideoCodecs = [config.ffmpeg.targetVideoCodec])}
/> />
<!-- PCM is excluded here since it's a bad choice for users storage-wise -->
<SettingSelect <SettingSelect
label={$t('admin.transcoding_audio_codec')} label={$t('admin.transcoding_audio_codec')}
{disabled} {disabled}
@ -145,6 +146,7 @@
{ value: AudioCodec.Aac, text: 'AAC' }, { value: AudioCodec.Aac, text: 'AAC' },
{ value: AudioCodec.Mp3, text: 'MP3' }, { value: AudioCodec.Mp3, text: 'MP3' },
{ value: AudioCodec.Libopus, text: 'Opus' }, { value: AudioCodec.Libopus, text: 'Opus' },
{ value: AudioCodec.PcmS16Le, text: 'PCM (16 bit)' },
]} ]}
isEdited={!isEqual(sortBy(config.ffmpeg.acceptedAudioCodecs), sortBy(savedConfig.ffmpeg.acceptedAudioCodecs))} isEdited={!isEqual(sortBy(config.ffmpeg.acceptedAudioCodecs), sortBy(savedConfig.ffmpeg.acceptedAudioCodecs))}
/> />