Аудиодекодер и A/V синхронизация.[Исправлено]

Автор Aleksoid1978, 30 апреля 2018, 05:47:04

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Aleksoid1978

Существуют MKV, в которых реальная длительность аудио дорожки отличается от длительности видео. Такие дорожки укладываются в MKV с корректировкой (масштабированием) временных меток.
Например: Был видеофайл со звуков и частотой 25 к/с, к нему добавили дорожку из видео с частотой 23,976. Чтобы все было хорошо, временные метки новой дорожки подкорректированы.
Примеры: sample.mkv.

В текущих версиях MPC-BE такие файлы нормально воспроизводиться только, если подключить LAV Audio Decoder. Если использовать встроенный MpaDecFilter, то будут рывки.
[merge_posts_bbcode]Добавлено: 2018-04-30 12:47:04[/merge_posts_bbcode]

Предлагаю тестовый билд - https://yadi.sk/d/JH-cvVU23UwtTx, там сам .exe + патч(получилось немного некрасиво что в классе ffmpeg декодера используются переменные из самого фильтра, но так на самом деле удобнее чем дублировать переменные и придумывать как их передавать. Тем более что эти новые переменные пригодятся в дальнейшем).
Переделал обработку временных меток(за исключением SPDIF/HDMI Bitstream - руки еще не дошли). Взял за основу код из LAV Audio Decoder.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

Пример воспроизводиться так же - с нарастающим рассинхроном.

Aleksoid1978

Опцию корректировки включи в декодере :)
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

С включенной опцией нормально. Я думал опция больше не нужна.

Aleksoid1978

Как так не нужна. Я просто избавился от резких рывков, так же корректно обрабатываются данные после парсера ffmpeg(более не нужно большое значение jitter для DTS)
[merge_posts_bbcode]Добавлено: 2018-04-30 16:07:18[/merge_posts_bbcode]

Седня-завтра доделаю для битстрима, ac3 энкодинга.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

А в чем тогда смысл второго режима, который сейчас дает рассинхрон?

Aleksoid1978

Чето попадалось такое, уже и не помню. Пришлось отключать корректировку. Да и что, лишним не будет.
[merge_posts_bbcode]Добавлено: 2018-04-30 18:42:21[/merge_posts_bbcode]

Окончательный вариант(сделал для битстрима и AC3 энкодинга).
https://yadi.sk/d/QctAJ4qQ3Uxmvz
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

Просто раньше встроенный аудиорендерер иначе работал, и отключение опции, скорее всего, под него и сделано было, чтобы звук не прерывался для некоторых файлов.
Сейчас в аудиорендерере свои часы, и он не пропускает и не добавляет сэмплы.
[merge_posts_bbcode]Добавлено: 2018-04-30 21:39:29[/merge_posts_bbcode]

По поводу файла sample.mkv и автопереключалки.
Для этого файла невозможно заранее выставить частоту дисплея. Раньше тоже нельзя было. Хоть usalex и пишет, что было лучше, но сам же признается, что звук постоянно заикался.

[merge_posts_bbcode]Добавлено: 2018-04-30 22:52:15[/merge_posts_bbcode]

Хотя такое можно разрулить на стороне аудиорендерера через ускорение-замедление (atempo), но нужен достоверный "детектор" таких случаев.

Aleksoid1978

Можно будет подумать про ускорение/замедление.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

usalex

Цитата: V0ltДля этого файла невозможно заранее выставить частоту дисплея
Почему это нельзя? Можно. Частота дисплея должна быть кратна частоте кадров видео. Это главное правило, необходимое для плавности картинки. А звук - это другая история. Он не на дисплей выводится и не надо на него ориентироваться при выставлении частоты дисплея.
[merge_posts_bbcode]Добавлено: 2018-05-01 05:10:38[/merge_posts_bbcode]

Цитата: V0ltХоть usalex и пишет, что было лучше, но сам же признается, что звук постоянно заикался.
Нет. Звук заикался не постоянно, а только тогда, когда я ему это разрешал (была опция выбора режима синхры).
А если какой-то фильм был более разговорного или музыкального жанра, где звук был важнее картинки, можно было поменять режим. Было лучше, потому, что был выбор.

Aleksoid1978

Ну звук ВСЕГДА является "источником" времени вывода, картинки в том числе. Так работают все аудио-рендереры.
Но это никак не относиться к данной теме(тут про аудио-декодер).
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

usalex

Цитата: Aleksoid1978Ну звук ВСЕГДА является "источником" времени вывода, картинки в том числе. Так работают все аудио-рендереры.
Да, я знаю. Но эта схема нормально работает только там, где соблюдены стандарты при изготовлении клипа. А когда сталкиваемся с кривизной, нужен костыль. Был костыль в форме ручного выбора синхры. Но если тебе удастся побороть кривизну через правку декодера, будет супер. Хотя, я сильно сомневаюсь, что на кривизне, типа твоего клипа, возможно сделать плавными одновременно и картинку, и звук.

Aleksoid1978

Плавность можно конечно сделать - для этого надо в аудио-рендерере немного разгонять/тормозить аудио-поток.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

К сожалению, после переделки встроенного аудио декодера (временных меток), на некоторых видео файлах появился рассинхрон.
[merge_posts_bbcode]Добавлено: 2018-05-01 10:13:08[/merge_posts_bbcode]

И даже не на некоторых....

Да уж, эти переделки временных меток...

В общем так, после SVN r3574 появились следующие проблемы:

1. Рассинхрон
2. Джиттер, которого раньше и близко ни разу не было на некоторых видео файлах
3. Пропуски кадров во время воспроизведения, опять же из-за нарастающего джиттера, которого быть не должно на некоторых видео файлах.

Данное изменение в SVN, на текущий момент, - некорректное, нуждается в доработках и исправлениях, а также и в тщательном тестирование различных форматов видео файлов.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Ну так наверное надо выложить файлы на которых наблюдается рассинхрон, пропуски кадров и т.д.
Я проверял и на разных "тестовых" файлах, и на реальном просмотре(ну 5-10 минут - а несколько часов).

На самом деле переделывание было не из-за одного этого файла с первого поста.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215