AviSynth FAQ - Распознавание и обработка контента различных типов

Содержание

  1. Видео и аудио в моем закодированном файле несинхронны, что мне делать?
  2. Как мне распознать прогрессивный, чересстрочный, телекино-преобразованный, гибридный и полученный смешением контенты?
  3. Как обрабатывать чересстрочное видео?
  4. Как обрабатывать телекино-преобразованное видео?
  5. Как обрабатывать гибридное видео?
  6. Что такое видео с переменной частотой кадров?
  7. Как импортировать видео с переменной частотой в AviSynth и как его обрабатывать?

Видео и аудио в моем закодированном файле несинхронны, что мне делать?

Предполагая, что вы обрабатываете ваше видео с AviSynth, существует несколько причин, почему ваше закодированный файл несинхронный (нет синхпронизации). Наиболее частые причины:

1) Ваш источник уже сам несинхронен (еще до обработки в AviSynth или кодирования). Его трудно скорректировать, но это не предмет данного документа (FAQ).

2) Аудио имеет постоянную задержку, и вы забыли эту задержку добавить (либо в AviSynth, если вы импортируете аудио в AviSynth, или в кодировщике, если вы импортируете аудио прямо в кодировщик). Например, демультиплексированный аудио поток из VOB часто имеет задержку. При демультиплексировании этого аудио потока с DGIndex, эта задержка (в действительности на сколько задержка должна быь скорректирована) записывается в имя демультиплексированного аудио потока. Вы можете использовать DelayAudio для добавления задержки в AviSynth.

vid = MPEG2Source("D:\movie.d2v")
aud = NicAC3Source("D:\movie T01 2_0ch 448Kbps DELAY -218ms.ac3")
AudioDub(vid, aud)
DelayAudio(-0.218)

3) Аудио имеет переменную задержку (с нулевой задержкой в начале и максимальной задержкой в конце). Это может произойти, если вы загружаете в AviSynth клип, который имеет переменную частоту кадров. Очень много чего, исключая видео содержащееся в AVI или MPEG-2/VOB файле, может иметь переменную частоту кадров. Если вы используете DirectShowSource для загрузки клипа, вы можете использовать

# mkv-файл используется здесь в качестве примера:
DirectShowSource("D:\movie.mkv", fps=xxx, convertfps=true) # fps = средняя частота кадров

для принудительной синхронизации. При этом происходит добавление или отбрасывание кадров для поддержания синхронности, таким образом преобразуя это в видео постоянной частоты.

Если вы не используете DirectShowSource или вы не хотите добавлять и убирать кадры, то вам необходимо создать сначала файл временных кодов и использовать его позже при вашем финальном кодировании. Посмотрите эту статью для более полной информации по этому вопросу.

Как мне распознать прогрессивный, чересстрочный, телекино-преобразованный, гибридный и полученный смешением контенты?

Важно знать, каков ваш контент, если вы хотите обрабатывать его. Наиболее важными являются: прогрессивный, чересстрочный, телекино-преобразованный, гибридный и полученный смешением, и они должны обрабатываться различно.

Как обрабатывать чересстрочное видео?

Есть два способа обрабатывать чересстрочный контент (предполагая, что вы используете фильтр, который не имеет опции interlaced=true). Первый способ наиболее аккуратный, но также медленный: Боб-деинтерлейс (bobbing), обработка и восстановление чересстрочности (reinterlacing). Второй способ - быстрый, но также и менее аккуратный: обработка полей (каждой четности) раздельно.

1) Боб-деинтерлейс:

AssumeTFF() # или AssumeBFF (установите порядок полей видео корректно!)
TDeint(mode=1, type=3) # или любой другой (умный) Боб (удвоение высоты каждого поля)
Filter(...)
AssumeTFF() # or AssumeBFF (установите порядок полей видео корректно!)
Separatefields()
Selectevery(4,0,3)
Weave()

2) обработка полей раздельно:

SeparateFields()
even = SelectEven(last).Filter(...) # четные поля
odd = SelectOdd(last).Filter(...)   # нечетные поля
Interleave(even, odd) # восстановим чересстрочность
Weave()

Как обрабатывать телекино-преобразованное видео?

Вам необходимо сделать обратное телекино-преобразование (IVTC) перед любой обработкой. Вы можете например использовать плагин Decomb, который может быть загружен здесь. Смотри руководство "Force Film, IVTC, and Deinterlacing - что DVD2AVI пытается вам сказать и что вы можете с этим делать." или "the analog capture guide" которые объясняют, как это делать.

Как обрабатывать гибридное видео?

Вы встретите затруднения, только если ваш клип, открытый в AviSynth, показывает гребенку (combing) (будучи частично чересстрочным, телекино, и т.п. ...). Я пока не уверен, что лучше всего делать в данном случае.

Что такое видео с переменной частотой кадров?

Есть два вида видео с точки зрения частоты кадров, видео с постоянной частотой (cfr) и переменной частотой кадров (vfr). Для cfr видео, кадры имеют постоянную длительность, а для vfr видео, кадры имеют непостоянную длительность. Многие программы-редакторы (включая VirtualDub и AviSynth) предполагают, что видео является cfr, в частности так как avi не поддерживает vfr. Хотя avi контейнер не поддерживает vfr, существуют несколько контейнеров (например mkv, mp4 и wmv/asf), которые поддерживают vfr. Больше информации можно найти здесь.

Как импортировать видео с переменной частотой в AviSynth и как его обрабатывать?

Существуют два способа импортировать видео с переменной частотой в AviSynth:

  1. Загрузите видео в AviSynth, используя например DirectShowSource(..., convertfps=false) или FFmpegSource. Проблемой явлается в этих случаях, что при преобразовании в видео постоянной частоты кадры не добавляются или удаляются (что надо бы для синхронности с аудио).
    Сгенерируйте файл временных кодов (timecode), используя некоторую внешнюю программы или спользуя плагин AviSynth, который вы используете для импорта видео в AviSynth (если возможно). Многие не-AVI файлы содержат видео с переменной частотой, и в этом случае вам необходимо удостовериться в следующих двух вещах:
    1. Не меняйте частоту кадров и число кадров в AviSynth. Если вы не выполните это (и вы не подправили файл временного кода вручную), то видео и аудио в ваше финальном кодировании будут не сихронны.
    2. Используйте файл временного кода снова, когда мультиплексируете (muxing) ваше кодированное видео с audio. Если вы не выполните это, то видео и аудио в ваше финальном кодировании будут не синхронны.
  2. Загрузите видео в AviSynth используя например DirectShowSource(..., converfps=true). В этом случае кадры будут добавляться или удаляться в видео постоянной частоты, для достижения синхронности. Вы можете (дальше) обрабатывать видео любым способом, как хотите. Вы можете даже создать новый файл временных кодов и, используя его, создать новое видео с переменной частотой. Больше информации может быть найдено здесь.

Относительно первого способа. Если вы изменили частоту или число кадров, вы можете использовать DeDup для создания нового файла временных кодов:

dedup_dedup(threshold=0.1, maxcopies=10, maxdrops=4, log="01.log", timesin="original.tmc", times="final.tmc")

Параметр "timesin" указывает файл временных кодов оригинального видео, на котором будет основываться выходной файл (а не просто используя частоту кадров входного потока). Я никогда не использовал это, так что не уверен, насколько способ хорош. Посмотрите обсуждение.

| Содержание FAQ | Общая информация | Загрузка клипов | Открытие скриптов | Общие сообщения об ошибках | Обработка различного контента | Работа с YV12 | Обработка с плагинами от Virtualdub |

$English Date: 2008/07/02 18:57:42 $
Русский перевод 02.07.2008 Fizick http://avisynth.org.ru