VLC - Почему аудиодорожка длиннее, чем видеодорожка после показа экрана?

517
Fnifni

Я использую медиаплеер VLC 2.2.8 Weatherwax (ревизия 2.2.7-14-g3cc1d8cba9), установленный из моего дистрибутива (Arch Linux). Моя цель состоит в том, чтобы создать команду, которая записывает видео моего рабочего стола, с аудиовходом от micro.

После некоторых исследований я использовал эту команду:

vlc screen://  :screen-fps=24  :screen-follow-mouse  :screen-mouse-image=cursor.png  :input-slave=alsa://hw:1,0 :sout="#transcode}:duplicate}" 

Я протестировал его для видео ~ 1 млн., И он работал без каких-либо заметных проблем. Затем я записал видео продолжительностью ~ 1 час, и в результате получилось следующее: Ссылка на изображение (imgur).

Значения являются приблизительными. Задержка звука начинается с ~ 3 с и заканчивается ~ 3 мин. За исключением задержки видео и аудио работают должным образом.

Почему задержка звука? Это происходит из-за какого-то сжатия или по каким-то причинам, например, «микропроцессор медленнее, чем захват видео с экрана»?

Спасибо за ваш ответ.

1

1 ответ на вопрос

0
Fnifni

Хорошо, я думаю, что нашел решение. Пожалуйста, поправьте меня, если я ошибаюсь.

Решение

vlc screen://  :screen-fps=24   ...  :sout="#transcode{...fps=24}... 

Решение состоит в том, чтобы указать тот же fps в опции transcode, что и в опции: screen-fps.

Полная команда (для справки):

vlc screen://  :screen-fps=24  :screen-follow-mouse  :screen-mouse-image=cursor.png  :input-slave=alsa://hw:1,0 :sout="#transcode,fps=24}:duplicate}" 

подробности

По умолчанию VLC имеет:

  • вход 500 000 µs,
  • выход 40 000 µs.

Вы можете увидеть это в консоли после команды vlc: Ссылка на изображение (imgur).

  • :screen-fps=24Опция предоставляет stream_out_transcode stream out: input interval 41666 (base 1)опцию VLC.
  • Опция fps=24in transcodeпредоставляет stream_out_transcode stream out: output interval 41666 (base 1)опцию VLC.

Если я прав, чтобы получить 41666из 24fps (или Гц), нам нужно сделать следующую операцию: 10^6 / 24 = 41666.66666... ~= 41666 µs

В моей должности, я не определил fps=24в transcodeопции. Таким образом, значение по умолчанию для выходного интервала было 40 000мкс.

Если я считаю, что мое видео 3600длинное, и я делаю следующую операцию: 3600 * (1-40000/41666) = 143.9447секунды.

Это> 2мн, и это соответствует наблюдаемой дельте.

Результат с правильными параметрами: Ссылка на изображение (imgur).


замечание

Несмотря на то, что существует параметр audio-syncв transcodeопции, он не работает, как я ожидал. Только добавив fpsпараметр сделал свое дело.


Рекомендации

Вы можете найти ссылки здесь:

Похожие вопросы