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) {
const videoFilters: string[] = [];
if (fps != null) videoFilters.push(`fps=${fps}`);
// todo
// [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`);
if (size != null) videoFilters.push(`scale=${size}:${size}:flags=lanczos:force_original_aspect_ratio=decrease:force_divisible_by=2`);
const videoFiltersStr = videoFilters.length > 0 ? videoFilters.join(',') : 'null';
graph.push(`[0:${videoStreamIndex}]${videoFiltersStr}[video]`);
}
if (audioStreamIndexes.length > 0) {
const indexesStr = audioStreamIndexes.map((i) => `[0:${i}]`).join('');
let audioFiltersStr;
if (audioStreamIndexes.length > 1) {
const resampledStr = audioStreamIndexes.map((i) => `[resampled${i}]`).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 {
audioFiltersStr = 'anull';
graph.push(`[0:${audioStreamIndexes[0]}]anull[audio]`);
}
graph.push(`${indexesStr}${audioFiltersStr}[audio]`);
}
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
'-flush_packets', '1',
'-vsync', 'passthrough',
'-ss', String(seekTo),
'-noautorotate',
'-i', path,
'-fps_mode', 'passthrough',
...(encode ? [
...getFilters(),

Loading…
Cancel
Save