Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » VirtualDub (часть 4)

Модерирует : gyra, Maz

gyra (23-01-2017 11:20): VirtualDub (часть 5)  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

V0lt



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Теория.
 
Вот типичное распределение кадров в потоке
   
Каждый кадр стоит на своем месте. Вроде все нормально. Но давайте вспомним, чем отличаются типы кадров.
I - самодостаточный кадр, в нем храниться вся картинка целиком. Любое видео должно начинаться с I-кадра
P - кадр, в котором хранятся различия в сравнении с предыдущим I- или P-кадром. Чтобы получить картинку из такого кадра нужно знать предыдущий I- или P-кадр.
B - кадр, который ссылается на предыдущий и последующий I- или P-кадры.
 
На B-кадрах остановимся по-подробнее. Чтобы получить картинку из В-кадра 1 нужно с начала декодировать кадры 0 и 3. Загвоздка здесь в том, что при последовательной обработке кадров мы не сможем сразу декодировать В-кадр 1, т.к. мы еще не получили P-кадр 3.
 
Эта проблема решается через запросы от декодера (где-то вычитал). Но VirtualDub использует старый VFW-интерфейс, где декодер молчун, что имеет, то и пытается показать. Т.е. если мы перейдем на произвольный B-кадр, то мы увидим не его, а предыдущий I- или P-кадр.
Хотя надо отметить, что если просто перекодировать видео, то проблем не наблюдается. Возможно это из-за того, что в кодек режиме энкодера может придерживать кадры в буфере.
 
Что делать? Все просто Нужно, чтобы P-кадр 3 шел раньше В-кадров 1 и 2. А чтобы не запутаться упакуем кадры 3 и 1 вместе, а на место кадра 3 ставим пустышку. Это и называется Packed Bitstream.
   
Принцип работы декодера:
0) декодируем кадр 0 и отображаем его;
1) видим, что в кадр 1 упакованы два кадра: P и B. Декодируем P-кадр и запоминаем его. Декодируем B-кадр и отображаем его;
2) декодируем кадр 2 и отображаем его;
3) видим пустышку - отображаем запомненный ранее P-кадр.
 
 
Практика
 
Для начала хотелось бы заметить, что при кодировании DivX-ом со стандартным профилем Home Theater, получается поток с одним последовательным B-кадром и используется Packed Bitstream.
 
Я не помню были ли в DivX 4.0 профили изначально, но кодеры прочухали, что если использовать два последовательных B-кадра, то при сравнимом качестве можно было получить меньший размер потока. И когда появились профили (в DivX 5 они уже точно были), то многие их просто отключали и настраивали энкодер как душе угодно. В Xvid-е, кстати, по умолчанию стояло 2 B-кадра.
 
Потом появились DVD-плееры с поддержкой DivX. На тот момент было еще полно контента, закодированного хакерским DivX 3.11, с ним проблем не было. Но вот с Xvid картинка на телевизоре почему-то дергалась, с DivX 5 тоже бывало дергалась, но не так часто. Методом перебора настроек выяснилось, что причина в опции Packed Bitstream. Замечу, что проблема возникает, если Packed Bitstream включен и количество последовательных B-кадров равно 2 или более. Что делать? Не перекодировать же все скачанные фильмы, ведь можно наверное как-нибудь "исправить" файл. Такое стало возможным благодаря Mpeg4Modifer. И что интересно в умах закрепилось: Packed Bitstream - всегда зло. Хотя это не совсем так.
 
Вкратце ситуация такая:
Кол-во посл. B-кадров Packed Bitstream VirtualDub DVD-плееры    
1 + хорошо хорошо (профиль Home Theater)    
1 - проблема с отображением текущего кадра хорошо    
2 и более + хорошо проблема с вопроизведением    
2 и более - проблема с отображением текущего кадра хорошо

Проверено на DVD-плеерах с MTK-чипами (одни из самых распространенных)

Всего записей: 10456 | Зарегистр. 05-02-2003 | Отправлено: 21:34 02-12-2011 | Исправлено: V0lt, 21:57 02-12-2011
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » VirtualDub (часть 4)
gyra (23-01-2017 11:20): VirtualDub (часть 5)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru