Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

Форумы RDA _ Общие вопросы _ Как избавиться от dropped frames в Дубе?

Автор: DarkK Понедельник, 16 Августа 2004, 21:33

После извратной переделки .wmv в .avi получился авишник, в котором в два раза больше кадров, чем в оригинале и каждый второй кадр обозначается в дубе, как [D] и повторяет предыдущий. Если подряд идут несколько keyframes, то dropped frames между ними нет. Пробовал делать decimate by 2, не помогает, дуб выкидывает каждый второй нормальный кадр и идущий за ним [D]-кадр.

Сразу в морг или можно побороть?

Автор: Yanch Понедельник, 16 Августа 2004, 22:31

Я пытался с таким бороться, но решения не нашел. ИМХО, в морг.

Автор: starsoft Понедельник, 16 Августа 2004, 22:46

dropped? Думаю с терминологией ошибочка - судя по описанию не dropped, а duplicated или что-то в этом духе. Судя по реакции на decimate физически этих фреймов не существует, скорее всего они только в индексе. Может быть стОит переделать индекс. Это мои догадки, наверняка не знаю - не сталкивался.

Закинь куда-нить кусочек авишки такой - интересно посмотреть.

Автор: DarkK Понедельник, 16 Августа 2004, 23:13

В доках дуба написано, что dropped.

QUOTE
[K] at the end -- this is the current frame type. K indicates a keyframe; nothing indicates a delta frame; [D] indicates a dropped frame


http://www.virtualdub.org/docs_processing

Автор: DarkK Среда, 18 Августа 2004, 2:11

Сэмпл: http://members.rogers.com/dark_kolobok/5e-sample.avi

Кодек: http://download.microsoft.com/download/9/8/a/98a6cb2d-6659-485e-b1f9-2c0d9bf6c328/wmv9VCMsetup.exe

Автор: starsoft Среда, 18 Августа 2004, 11:20

Если исходник потом пережимать, то AVS c Decimate(cycle=2) справился с задачей без проблем. Но он убрал каждый второй кадр без разбора, то есть если шло несколько кей-фреймов подряд и не было [D], то убрал всё равно.

Надо как-то умудрится написать Sylia-скрипт для ДУБа, который бы в цикле выкидывал все [D]-фреймы и потом пресохранял файл. Вот только не знаю как в скрипте определять тип фрейма, кажется интерфейс не предусматривает такой функции. Надо читать полную документацию...

Автор: Quazar Среда, 18 Августа 2004, 15:16

Физически этих D-frames (dropped, duplicated, dummy - название неважно) не существует, нулевой размер. Фактически плейер проигрывает на 11.988 fps. Decimate удаляет реальные кадры, зачем удалять dummy, которые и так не занимают места. Чтобы определить вид кадра (K,B,D) поток нужно декодировать, так что без перекодировки корректно исправить индекс врядли удастся.

Автор: starsoft Среда, 18 Августа 2004, 17:14

QUOTE (Quazar @ там)
Decimate удаляет реальные кадры

Откуда Decimate знает какой кадр реальный, а какой [D]? После открытия исходника AviSynth-ом не существует различия на типы фреймов, нет ни ключевых ни дроп ни каких-то других - есть поток последовательных фреймов (причем откуда они декодируются физически - из своего исходного фрейма или из предыдущего - не важно), из которых выкидывается каждый N-ный в соответствии с параметром.

Автор: Quazar Среда, 18 Августа 2004, 18:23

QUOTE
Откуда Decimate знает какой кадр реальный

Дубовский Decimate имеет некоторые отличия от decomba, с которым в AviSynth работает функция Decimate. Но чтобы использовать AviSynth поток нужно декодировать и тогда уже действительно всё равно, откуда взялся фрейм. Я так понял, что речь шла о возможности удаления D-frames без перекодировки.

Автор: starsoft Среда, 18 Августа 2004, 20:28

А дубовский Decimate - это фильтр? Если да, то отличия от AviSynth-а никакого в плане перекомпресии - фильтры не работают ни в Direct Stream Copy ни даже в Fast или Normal Processing.

Автор: Quazar Среда, 18 Августа 2004, 20:34

Получилось с помощью http://www.mysif.ru/Files/Nandub2_Inst.exe.
Audio - No audio
Video - Direct stream copy
Video - Frame Rate - Change to - 47.952
Decimate by 2
Корректно удалились все D-frames из сэмпла.
Насчёт идущих подряд K-frames неизвестно, в сэмпле этого не было...
Когда-то сталкивался с похожим, когда о VirtualDubMod и слышно не было. smile.gif

Автор: starsoft Среда, 18 Августа 2004, 20:40

2 Quazar:
Спасибо, полезная инфа, никогда не обращал внимание на decimate в ДУБе.

Автор: Quazar Среда, 18 Августа 2004, 20:55

Фильтры дуба работают в RGB24, а входящий поток в режиме Fast Recompress не обязательно в этом формате, поэтому вкладка фильтров отключена. Некоторые, не влияющие на обработку видео, можно воткнуть принудительно (например shutdown). Decimate (VD) же работает с входящим потоком независимо от его формата жёстко и по другому алгоритму, чем в AviSynth.

Автор: DarkK Среда, 18 Августа 2004, 21:24

Спасибо. Фрейм-рейт увеличивать я пробовал, но вот decimate после этого сделать не догадался.
Только вот чего с кейфреймами, идущими подряд теперь делать? =\ Пойду пороюсь в доках по скриптингу.

Автор: DarkK Среда, 18 Августа 2004, 21:27

А можно как-нить статистику по фреймам из файла сделать, чтоб найти места, где ки-фреймы идут подряд? Их можно было бы руками доделать...

Автор: kvappa Среда, 18 Августа 2004, 21:54

Кстати, Дубы не всегда корректно меняют framerate - могут вылезти какие-нибудь стотысячные или миллионные в конечном результате. Лучше это дело потом проверять.

Автор: bred Четверг, 19 Августа 2004, 14:21

Очень может быть что я ошибаюсь, это тока предположение.

dropped frame это такая гадость которая позволяет кодеру сбрасыват фреймы когда он считает нужным( битрейта не хватает, или изменения из кадра в кадр незначительны ), самое дурацкое, что почему-то в wmv это не заметно, а как только переводишь в avi начинает дергатся особенно на быстрых сценах. Такое впечатление что декодеры для avi и wmv обрабатывают dropped frame по разному. Для avi повторяет предыдущий фрейм, а wmv ... хрен его знает, что он там делает, но дерганья не видно. И как это лечить, не знаю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)