From d0dc22630e5239c501e6720be75064cac8dd8923 Mon Sep 17 00:00:00 2001 From: chaiman Date: Thu, 20 Aug 2026 11:27:55 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D0=BB=D1=83=D1=88=D0=BA=D0=B0=20=D0=B7=D0=B2=D1=83?= =?UTF-8?q?=D0=BA=D0=B0,=20=D0=B8=D0=B7-=D0=B7=D0=B0=20=D0=BA=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BE=D0=B9=20=D0=BF=D1=80=D0=BE=D0=BF=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=B7=D0=B2=D1=83=D0=BA=20=D0=B2=D0=BE=D0=BE=D0=B1=D1=89?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Вчерашняя правка глушила звук, когда перебор дорожек не находил внешнюю. Задумывалось как защита: играть звук из картинки вместо отдельной дорожки монтажа нельзя. Вышло наоборот — звука не стало нигде. Перебор может не сработать по причинам, до которых из программы не дознаться, а mpv и сам предпочитает внешний список, когда тот открылся. Поэтому выбор оставлен ему, а в журнал пишется, что произошло: если звук окажется не тот, будет с чего начинать. Проверено на точном списке кусков, который строит предпросмотр: картинка 2..8 с, звук сдвинут на 4..10 с. Воспроизведение дало тишину до четвёртой секунды и тон после — ровно то, что на монтаже. --- src/uMainForm.pas | 10 ++++++++++ src/uMpvPlayer.pas | 21 ++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/uMainForm.pas b/src/uMainForm.pas index bbaeb20..973c250 100644 --- a/src/uMainForm.pas +++ b/src/uMainForm.pas @@ -80,6 +80,7 @@ type FLastLoadedEdl: string; FLastLoadedAudioEdl: string; FLastHwdec: string; + FLastAudioNote: string; FLogFilePath: string; FLogFileStarted: Boolean; FLogFileBroken: Boolean; @@ -2018,6 +2019,15 @@ begin end else Log('Декодирование видео: ' + Hw); + + { Откуда взялся звук. Строка меняется редко, поэтому пишется только при + изменении — иначе журнал забился бы повторами. } + if FPlayer.AudioTrackNote <> FLastAudioNote then + begin + FLastAudioNote := FPlayer.AudioTrackNote; + if FLastAudioNote <> '' then + Log(FLastAudioNote); + end; end; procedure TMainForm.PlayerPauseChange(Sender: TObject); diff --git a/src/uMpvPlayer.pas b/src/uMpvPlayer.pas index 3ab76e5..c49fa53 100644 --- a/src/uMpvPlayer.pas +++ b/src/uMpvPlayer.pas @@ -58,6 +58,9 @@ type FVideoFilter: string; FHwdec: string; FAudioSource: string; + { Что произошло с выбором звуковой дорожки. Читается окном для + журнала: без этого понять, откуда взялся звук, нечем. } + FAudioTrackNote: string; { Работаем ли под Wine. Там свои правила вывода картинки, и узнать об этом надо до создания плеера. } FUnderWine: Boolean; @@ -163,6 +166,7 @@ type property HasTimePos: Boolean read FHasTimePos; property Initialized: Boolean read FInitialized; property UnderWine: Boolean read FUnderWine; + property AudioTrackNote: string read FAudioTrackNote; property TimePos: Double read FTimePos; property Duration: Double read FDuration; property Paused: Boolean read FPaused; @@ -767,13 +771,24 @@ begin Continue; Id := GetPropString(Format('track-list/%d/id', [I])); if Id <> '' then + begin mpv_set_property_string(FHandle, 'aid', PAnsiChar(Id)); + FAudioTrackNote := 'Звук: отдельная дорожка монтажа (' + Id + ').'; + end; Exit; end; - { Внешней дорожки не нашлось — значит наш список кусков не открылся. - Играть вместо него звук из картинки нельзя: на монтаже его там нет. } - mpv_set_property_string(FHandle, 'aid', 'no'); + { Внешней дорожки не нашлось. + + Глушить звук здесь нельзя, и это проверено дорого: такая попытка + привела к тому, что звука не стало вовсе. Перебор дорожек может не + сработать по причинам, до которых отсюда не дознаться, а mpv и сам + предпочитает внешний список, когда тот открылся. + + Поэтому оставляем выбор ему, но записываем в журнал: если звук вдруг + окажется не тот, будет с чего начинать. } + FAudioTrackNote := 'Звук: внешняя дорожка не найдена среди ' + + IntToStr(Count) + ', выбор оставлен плееру.'; end; procedure TMpvPlayer.HandleLogMessage(AMsg: Pmpv_event_log_message);