Звуковая дорожка подключается командой, а не свойством

Найдена настоящая причина обеих жалоб на звук. Свойство audio-files,
заданное перед загрузкой, не подключает внешний список кусков вовсе:
проверено на живом mpv через его канал управления — после установки
свойства дорожек по-прежнему две, обе не внешние. Играл звук, встроенный
в саму картинку.

Отсюда обе стороны: звук был слышен там, где на монтаже его нет (шёл из
видеофайла), и не был слышен там, где есть (в этом месте картинкой была
чёрная вставка, а она молчит).

Правильный способ — команда audio-add с признаком select после загрузки.
Проверено: дорожек становится четыре, внешняя звуковая выбрана,
внутренняя снята с выбора.

Если подключить не удалось, в журнал пишется предупреждение. Глушить звук
на этот случай нельзя — прошлая попытка так сделать оставила без звука
весь монтаж.
This commit is contained in:
chaiman 2026-08-20 11:58:29 +03:00
commit 79fe091fbb
2 changed files with 33 additions and 9 deletions

View file

@ -421,6 +421,22 @@ mpv сам выбрал `nvdec-copy`, всё работало, и ошибки
«Invalid floating point operation», и предпросмотр не запускался. Лечится
`SetExceptionMask` после загрузки библиотеки.
**Внешняя звуковая дорожка не подключается свойством.** Задать
`audio-files` перед загрузкой недостаточно: список дорожек после
загрузки остаётся прежним, внешний файл не подключается вовсе, и играет
звук, встроенный в саму картинку. Проверено на живом mpv через его канал
управления: после установки свойства дорожек по-прежнему две, обе не
внешние.
Из-за этого звук был слышен там, где на монтаже его нет. Попытка
защититься, отключая звук при ненайденной внешней дорожке, сделала
хуже — звука не стало нигде.
Правильный способ — команда `audio-add` с признаком `select` после
загрузки: она добавляет дорожку, выбирает её и снимает выбор с
внутренней. Проверено: дорожек становится четыре, внутренняя звуковая
помечается невыбранной.
**Аргументы loadfile.** В mpv 0.38 у команды появился четвёртый аргумент —
номер позиции в списке, и настройки файла сдвинулись на пятое место.
Прежний вызов стал ошибкой «The loadfile option must be an integer», и под

View file

@ -658,14 +658,9 @@ end;
procedure TMpvPlayer.SetAudioSource(const AUrl: string);
begin
if FHandle = nil then
Exit;
if AUrl = FAudioSource then
Exit;
{ Здесь только запоминаем. Подключается звук после загрузки картинки,
командой audio-add — см. AttachAudioSource. }
FAudioSource := AUrl;
{ Свойство действует на следующий loadfile, поэтому задавать его надо
до загрузки, а не после. }
mpv_set_property_string(FHandle, 'audio-files', PAnsiChar(AUrl));
end;
procedure TMpvPlayer.SetHwdec(const AMode: string);
@ -760,6 +755,19 @@ begin
if FAudioSource = '' then
Exit;
{ Подключаем свой список кусков как отдельную звуковую дорожку и сразу
выбираем её.
Через свойство audio-files это не работает: проверено на живом mpv —
список дорожек после загрузки остаётся прежним, внешний файл не
подключается вовсе, и играет звук, встроенный в саму картинку. Из-за
этого звук был слышен там, где на монтаже его нет, а после попытки
заглушить — пропал совсем.
Команда audio-add с признаком select делает ровно то, что нужно:
добавляет дорожку, выбирает её и снимает выбор с внутренней. }
Command(['audio-add', FAudioSource, 'select']);
Count := StrToIntDef(GetPropString('track-list/count'), 0);
for I := 0 to Count - 1 do
begin
@ -787,8 +795,8 @@ begin
Поэтому оставляем выбор ему, но записываем в журнал: если звук вдруг
окажется не тот, будет с чего начинать. }
FAudioTrackNote := 'Звук: внешняя дорожка не найдена среди ' +
IntToStr(Count) + ', выбор оставлен плееру.';
FAudioTrackNote := 'ВНИМАНИЕ: внешняя звуковая дорожка не подключилась ' +
'(дорожек: ' + IntToStr(Count) + '). Звук может идти не с монтажа.';
end;
procedure TMpvPlayer.HandleLogMessage(AMsg: Pmpv_event_log_message);