fix audio rate and divisible by 2

pull/2233/head
Mikael Finstad 1 year ago
parent f7dd568d43
commit 77cae51908
No known key found for this signature in database
GPG Key ID: 25AB36E3E81CBC26

@ -561,24 +561,24 @@ export function createMediaSourceProcess({ path, videoStreamIndex, audioStreamIn
if (videoStreamIndex != null) { if (videoStreamIndex != null) {
const videoFilters: string[] = []; const videoFilters: string[] = [];
if (fps != null) videoFilters.push(`fps=${fps}`); if (fps != null) videoFilters.push(`fps=${fps}`);
// todo if (size != null) videoFilters.push(`scale=${size}:${size}:flags=lanczos:force_original_aspect_ratio=decrease:force_divisible_by=2`);
// [libx264 @ 0x13bf07a40] height not divisible by 2 (800x333)
// [vost#0:0/libx264 @ 0x13bf07770] Error initializing output stream: Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
if (size != null) videoFilters.push(`scale=${size}:${size}:flags=lanczos:force_original_aspect_ratio=decrease`);
const videoFiltersStr = videoFilters.length > 0 ? videoFilters.join(',') : 'null'; const videoFiltersStr = videoFilters.length > 0 ? videoFilters.join(',') : 'null';
graph.push(`[0:${videoStreamIndex}]${videoFiltersStr}[video]`); graph.push(`[0:${videoStreamIndex}]${videoFiltersStr}[video]`);
} }
if (audioStreamIndexes.length > 0) { if (audioStreamIndexes.length > 0) {
const indexesStr = audioStreamIndexes.map((i) => `[0:${i}]`).join('');
let audioFiltersStr;
if (audioStreamIndexes.length > 1) { if (audioStreamIndexes.length > 1) {
const resampledStr = audioStreamIndexes.map((i) => `[resampled${i}]`).join('');
const weightsStr = audioStreamIndexes.map(() => '1').join(' '); const weightsStr = audioStreamIndexes.map(() => '1').join(' ');
audioFiltersStr = `amix=inputs=${audioStreamIndexes.length}:duration=longest:weights=${weightsStr}:normalize=0:dropout_transition=2`; graph.push(
// First resample because else we get the lowest sample rate
...audioStreamIndexes.map((i) => `[0:${i}]aresample=44100[resampled${i}]`),
// now mix all audio channels together
`${resampledStr}amix=inputs=${audioStreamIndexes.length}:duration=longest:weights=${weightsStr}:normalize=0:dropout_transition=2[audio]`,
);
} else { } else {
audioFiltersStr = 'anull'; graph.push(`[0:${audioStreamIndexes[0]}]anull[audio]`);
} }
graph.push(`${indexesStr}${audioFiltersStr}[audio]`);
} }
if (graph.length === 0) return []; if (graph.length === 0) return [];
@ -597,14 +597,14 @@ export function createMediaSourceProcess({ path, videoStreamIndex, audioStreamIn
// '-flags', 'low_delay', // this seems to ironically give a *higher* delay // '-flags', 'low_delay', // this seems to ironically give a *higher* delay
'-flush_packets', '1', '-flush_packets', '1',
'-vsync', 'passthrough',
'-ss', String(seekTo), '-ss', String(seekTo),
'-noautorotate', '-noautorotate',
'-i', path, '-i', path,
'-fps_mode', 'passthrough',
...(encode ? [ ...(encode ? [
...getFilters(), ...getFilters(),

Loading…
Cancel
Save