Звуковая дорожка подключается командой, а не свойством
Найдена настоящая причина обеих жалоб на звук. Свойство audio-files, заданное перед загрузкой, не подключает внешний список кусков вовсе: проверено на живом mpv через его канал управления — после установки свойства дорожек по-прежнему две, обе не внешние. Играл звук, встроенный в саму картинку. Отсюда обе стороны: звук был слышен там, где на монтаже его нет (шёл из видеофайла), и не был слышен там, где есть (в этом месте картинкой была чёрная вставка, а она молчит). Правильный способ — команда audio-add с признаком select после загрузки. Проверено: дорожек становится четыре, внешняя звуковая выбрана, внутренняя снята с выбора. Если подключить не удалось, в журнал пишется предупреждение. Глушить звук на этот случай нельзя — прошлая попытка так сделать оставила без звука весь монтаж.
This commit is contained in:
parent
d0dc22630e
commit
79fe091fbb
2 changed files with 33 additions and 9 deletions
16
README.md
16
README.md
|
|
@ -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», и под
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue