From 318b0bd0c2ff575f35d51d97327f77abfecd6b86 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 8 Jun 2021 11:28:51 +0200 Subject: Fix "height not divisible by 2" ffmpeg error --- server/helpers/core-utils.ts | 17 ++++++++++++++++- server/helpers/ffmpeg-utils.ts | 15 ++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) (limited to 'server/helpers') diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts index b5bf2c92c..f7e6fdddc 100644 --- a/server/helpers/core-utils.ts +++ b/server/helpers/core-utils.ts @@ -243,6 +243,18 @@ function execShell (command: string, options?: ExecOptions) { // --------------------------------------------------------------------------- +function isOdd (num: number) { + return (num % 2) !== 0 +} + +function toEven (num: number) { + if (isOdd) return num + 1 + + return num +} + +// --------------------------------------------------------------------------- + function promisify0 (func: (cb: (err: any, result: A) => void) => void): () => Promise { return function promisified (): Promise { return new Promise((resolve: (arg: A) => void, reject: (err: any) => void) => { @@ -310,5 +322,8 @@ export { execPromise, pipelinePromise, - parseSemVersion + parseSemVersion, + + isOdd, + toEven } diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts index e328c49ac..d20ca5d56 100644 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts @@ -5,11 +5,12 @@ import { dirname, join } from 'path' import { FFMPEG_NICE, VIDEO_LIVE } from '@server/initializers/constants' import { AvailableEncoders, EncoderOptionsBuilder, EncoderOptions, EncoderProfile, VideoResolution } from '../../shared/models/videos' import { CONFIG } from '../initializers/config' -import { execPromise, promisify0 } from './core-utils' +import { execPromise, isOdd, promisify0 } from './core-utils' import { computeFPS, getAudioStream, getVideoFileFPS } from './ffprobe-utils' import { processImage } from './image-utils' import { logger } from './logger' import { FilterSpecification } from 'fluent-ffmpeg' +import { findCommentId } from '@shared/extra-utils' /** * @@ -133,7 +134,7 @@ interface BaseTranscodeOptions { availableEncoders: AvailableEncoders profile: string - resolution: VideoResolution + resolution: number isPortraitMode?: boolean @@ -407,8 +408,7 @@ async function buildx264VODCommand (command: ffmpeg.FfmpegCommand, options: Tran async function buildAudioMergeCommand (command: ffmpeg.FfmpegCommand, options: MergeAudioTranscodeOptions) { command = command.loop(undefined) - // Avoid "height not divisible by 2" error - const scaleFilterValue = 'trunc(iw/2)*2:trunc(ih/2)*2' + const scaleFilterValue = getScaleCleanerValue() command = await presetVideo({ command, input: options.audioPath, transcodeOptions: options, scaleFilterValue }) command.outputOption('-preset:v veryfast') @@ -542,7 +542,7 @@ async function getEncoderBuilderResult (options: { } } - const result = await builder({ input, resolution: resolution, fps, streamNum }) + const result = await builder({ input, resolution, fps, streamNum }) return { result, @@ -727,6 +727,11 @@ async function runCommand (options: { }) } +// Avoid "height not divisible by 2" error +function getScaleCleanerValue () { + return 'trunc(iw/2)*2:trunc(ih/2)*2' +} + // --------------------------------------------------------------------------- export { -- cgit v1.2.3