Огрызкам на резах задаётся битрейт проекта

Перекодированный кусочек от точки реза до опорного кадра шёл без ключа
битрейта, и NVENC брал своё умолчание. Замерено в готовом ролике
пользователя: 5.7-6.8 Мбит/с в огрызке против 54-60 в скопированном
материале рядом — мутное пятно на полсекунды.

Раньше это задевало только редкие точные резы, а теперь точны все: в том
ролике 98 кусков, то есть 98 таких пятен.

После правки на том же материале: огрызок 86.8 Мбит/с (потолок в полтора
битрейта проекта, для куска в 0.7 с с опорным кадром это нормально),
соседний скопированный 61.6. Сверка кадров и звука проходит.
This commit is contained in:
4aiman 2026-09-30 00:55:09 +03:00
commit 0ba3bd40a6
2 changed files with 10 additions and 4 deletions

View file

@ -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;

View file

@ -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);
{ Столько кадров, сколько просили: огрызок стыкуется с копией кадр в
кадр, и лишнему взяться неоткуда. }