diff --git a/src/uExport.pas b/src/uExport.pas index b13c9c7..3fd14b7 100644 --- a/src/uExport.pas +++ b/src/uExport.pas @@ -909,7 +909,7 @@ begin FMaster.FpsNum, FMaster.FpsDen, FMaster.VideoCodec, FMaster.PixFmt, FMaster.AudioCodec, FMaster.SampleRate, FMaster.Channels, FIntermediateFormat, - HeadFrames, WithAudio), + HeadFrames, WithAudio, FMaster.VideoBitrate), 'Перекодирование стыка куска ' + IntToStr(I + 1)) then Exit; diff --git a/src/uFfmpegCmd.pas b/src/uFfmpegCmd.pas index 7d05609..617a290 100644 --- a/src/uFfmpegCmd.pas +++ b/src/uFfmpegCmd.pas @@ -87,7 +87,8 @@ function ArgsEncodeFragment(const ASrc, ADst: string; AStart, AEnd: Double; AFpsNum, AFpsDen: Integer; const AVideoCodec, APixFmt, AAudioCodec: string; ASampleRate, AChannels: Integer; const AFormat: string; - AFrames: Integer = 0; AWithAudio: Boolean = True): TArgs; + AFrames: Integer = 0; AWithAudio: Boolean = True; + ABitrate: Int64 = 0): TArgs; { Пересобрать кусок в параметры проекта. @@ -655,7 +656,7 @@ function ArgsEncodeFragment(const ASrc, ADst: string; AStart, AEnd: Double; AFpsNum, AFpsDen: Integer; const AVideoCodec, APixFmt, AAudioCodec: string; ASampleRate, AChannels: Integer; const AFormat: string; - AFrames: Integer; AWithAudio: Boolean): TArgs; + AFrames: Integer; AWithAudio: Boolean; ABitrate: Int64): TArgs; var HalfFrame, StopAt: Double; begin @@ -691,8 +692,13 @@ begin из того же файла, что и соседние куски, так что менять ему нечего. Хуже того: принудительная частота включает пересчёт кадров, и на пробе это добавило один лишний кадр на стыке — 601 вместо 600. } + { Битрейт обязателен. Без него кодировщик берёт своё умолчание, а у + NVENC оно около двух мегабит: замерено в готовом ролике 5.7 Мбит/с в + огрызке против 54-60 в скопированном материале рядом. Раньше это + задевало редкие точные резы, а теперь точны все — и мутный огрызок + появлялся на каждом. } Result := Concat(Result, MasterOutputArgs(0, 0, 0, 0, - AVideoCodec, APixFmt, AAudioCodec, ASampleRate, AChannels)); + AVideoCodec, APixFmt, AAudioCodec, ASampleRate, AChannels, ABitrate)); Result := Concat(Result, NoBFramesArgs); { Столько кадров, сколько просили: огрызок стыкуется с копией кадр в кадр, и лишнему взяться неоткуда. }