Две ошибки раздельного звука
Первая: при выключенных дорожках картинки не играло вообще ничего. Поток картинки опустевал, уплощение возвращало неудачу, и предпросмотр останавливался вместе со звуком, которого выключение не касалось. Теперь длина берётся по обоим видам дорожек сразу, и недостающее заполняется чёрным и тишиной. Оба потока всегда одной длины. Вторая: звук был слышен там, где на монтаже его нет. mpv добавляет внешний список кусков ещё одной дорожкой, а какую играть, решает сам, и мог взять звук, встроенный в саму картинку. Теперь после загрузки внешняя дорожка выбирается явно. Если её не оказалось, звук выключается совсем: играть вместо него звук из картинки нельзя — на монтаже его там нет. Проверено: при выключенных дорожках картинки получается чёрный кадр и сохранившийся звук (-21 dB); внешний список кусков выбирается верно и в ту, и в другую сторону.
This commit is contained in:
parent
3acf79d174
commit
cf20a0164e
3 changed files with 91 additions and 13 deletions
|
|
@ -564,7 +564,7 @@ begin
|
|||
try
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 10, 5, 0);
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 15, 5, 5);
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
DumpSegments(Segs);
|
||||
Check(Length(Segs) = 1, 'склеились в один кусок');
|
||||
if Length(Segs) = 1 then
|
||||
|
|
@ -583,7 +583,7 @@ begin
|
|||
try
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 100, 5, 0);
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 200, 5, 5);
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
DumpSegments(Segs);
|
||||
Check(Length(Segs) = 2, 'остались двумя кусками');
|
||||
finally
|
||||
|
|
@ -598,7 +598,7 @@ begin
|
|||
{ Дорожка 0 — верхняя, она побеждает. }
|
||||
Proj.AddClip(Proj.Tracks[1], Media, 0, 30, 0);
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 100, 10, 10);
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
DumpSegments(Segs);
|
||||
Check(Length(Segs) = 3, 'получилось три куска');
|
||||
if Length(Segs) = 3 then
|
||||
|
|
@ -622,7 +622,7 @@ begin
|
|||
try
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 0, 5, 3);
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 50, 5, 12);
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
DumpSegments(Segs);
|
||||
Check(Length(Segs) = 4, 'четыре куска: чёрное, видео, чёрное, видео');
|
||||
if Length(Segs) = 4 then
|
||||
|
|
@ -652,7 +652,7 @@ begin
|
|||
try
|
||||
Proj.AddClip(Proj.Tracks[1], Media, 0, 10, 0);
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 200, 10, 0);
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
DumpSegments(Segs);
|
||||
Check(Length(Segs) = 1, 'остался один кусок');
|
||||
if Length(Segs) = 1 then
|
||||
|
|
@ -669,7 +669,7 @@ begin
|
|||
Proj.AddClip(Proj.Tracks[1], Media, 0, 10, 0);
|
||||
Proj.AddClip(Proj.Tracks[0], Media, 200, 10, 0);
|
||||
Proj.Tracks[0].Muted := True;
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
DumpSegments(Segs);
|
||||
Check(Length(Segs) = 1, 'остался один кусок');
|
||||
if Length(Segs) = 1 then
|
||||
|
|
@ -689,7 +689,7 @@ begin
|
|||
Proj.Tracks[0][0].EdgeIn := edPrecise;
|
||||
Proj.RippleMode := rmAllTracks;
|
||||
Proj.RippleEnabled := True;
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
Check(Length(Segs) = 3, 'до записи три куска');
|
||||
Check(Proj.SaveToFile(TempFile, Err), 'записан: ' + Err);
|
||||
finally
|
||||
|
|
@ -709,7 +709,7 @@ begin
|
|||
Check(Proj.RippleEnabled, 'состояние схлопывания сохранилось');
|
||||
if Proj.TrackCount = 2 then
|
||||
Check(Proj.Tracks[0][0].EdgeIn = edPrecise, 'признак точного реза сохранился');
|
||||
FlattenStream(Proj, tkVideo, Segs, Missing);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
DumpSegments(Segs);
|
||||
Check(Length(Segs) = 3, 'после чтения снова три куска');
|
||||
if Length(Segs) = 3 then
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue