Предполагая, что вы обрабатываете ваше видео с 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:
Относительно первого способа. Если вы изменили частоту или число кадров, вы можете использовать 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 $