# AviSynth, vídeo de framerate variável (vfr) e vídeo híbrido

Há dois tipos de vídeo ao se considerar “framerate”. vídeo de Framerate constante (vfc) e de framerate variável (vfv). Para vídeo vfc os quadros têm uma duração constante e para vídeo vfv, têm uma duração inconstante. Muitos programas de edição (inclusive VirtualDub e AviSynth) assumem que o vídeo tem vfc. Um das razões é que o avi não suporta vfv. Isto não mudará num futuro próximo por várias razões. Embora o recipiente do avi não suporta vfv, há vários recipientes (mkv, mp4 e wmv por exemplo) que suportam.

## Framerate variável e vídeo híbrido

É importante entender que no vídeo em geral é essencial vfc (pelo menos em captura de vídeo ou ripagem de dvds). Há uma exceção onde a conversão para vfv é muito útil, que é o vídeo híbrido. O vídeo híbrido consiste em partes que são entrelaçado/progressivo NTSC (29.97 fps) e FILME (que é telecinado a 29.97 fps). Ao ser tocado o vídeo híbrido, a parte NTSC (também chamada parte de vídeo) é tocada a 29.97 fps e a parte telecinada a 23.976 fps. Exemplos de vídeo híbrido são alguns animes e materiais de Jornada nas Estrelas.

## Codificando vídeo híbrido (fps = frames per second - quadros por segundo)

O assumindo que o vídeo é híbrido, há vários modos para codificá-lo. Eles são listados abaixo. O primeiro está convertendo a vídeo de vfc (ou 23.976 ou 29.97 fps), o segundo está codificando a 120 fps usando avi e perda de quadros (onde os quadros duplicados são perdidos no playback). O último está criando o verdadeiro vfv com o recipiente mkv.

### codificando para 23.976 fps ou 29.97 fps

Se escolhermos a taxa de vídeo, as seqüências de vídeos estarão OK, mas as seqüências de FILME não serão dizimadas, parecendo saltar (devido aos quadros duplicados). Por outro lado, se nós escolhermos a taxa de FILME, as seqüências do FILME serão OK, mas as seqüências de vídeos serão dizimadas, parecendo saltar (devido à "perda de quadros"). Adicionalmente, você terá mais baixa qualidade pelo mesmo tamanho de arquivo, por causa de 25% a mais no número de quadros? É difícil decidir qual escolher. Se o clipe é principalmente FILME você pode escolher 23.976 fps e se o clipe é principalmente vídeo, pode escolher 29.97 fps. Se você cria seu arquivo de projeto d2v, verá se o clipe é principalmente vídeo (NTSC) ou FILME (na caixa de informação).

O plugin Decomb do AviSynth provê dois modos especiais de dizimação para controlar melhor os clipes híbridos. Para citar a documentação de Decomb como usar este plugin:

Principalmente Clipes de Filme (mode=3)

Vamos primeiro considerar o caso em que o clipe é principalmente filme. Neste caso, nós queremos dizimar as porções do filme normalmente para que eles se tornem suaves. Para as porções não de filme, queremos reduzir a sua taxa de quadro por mistura de dizimação em cada ciclo de quadros, de 5 quadros para 4 quadros. As seqüências de vídeos assim feitas parecem mais suaves que as dizimadas como filme.

Aqui, um escrito típico para habilitar este modo de operação:

    Telecide(order=0, guide=1)
    Decimate(mode=3, threshold=1.0)

Há 2 fatores que habilitam Decimate a tratar adequadamente as porções do filme e de não filme. Primeiro, quando Telecide declarar guide=1, pode passar a informação para Decimate sobre quais quadros são derivados de filme e para os de vídeo. Para este mecanismo trabalhar, Decimate tem que imediatamente seguir Telecide. Claramente, quanto melhor o trabalho que você faz com padrão que fecha em Telecide (dando os parâmetros como exigido), tanto melhor trabalho Decimate pode fazer.

O segundo fator é o percentual. Se um ciclo de quadros é visto e não tem uma duplicata, então o ciclo é tratado como vídeo. O percentual determina qual porcentagem de diferença de quadro é considerada uma duplicata. Note que threshold=0 desativa o segundo fator.

Principalmente Clipes de Vídeo (mode=1)

Vamos agora considerar o caso em que o clipe é principalmente vídeo. Neste caso, não queremos dizimar as porções de vídeos suaves. Para as porções de filme, queremos deixar na taxa de vídeo e mudar o quadro duplicado em uma mistura de quadro, assim não é tão óbvio.

Aqui está um escrito típico para habilitar este modo de operação:

    Telecide(order=0, guide=1)
    Decimate(mode=1, threshold=1.0)

### codificando para 120 fps usando avi com duplos quadros

Você precisa das seguintes utilidades

- Avi60 e GUI
- Dec60.dll (para AviSynth legado 2.0x)
- FPSCheck
- AviSynth legado versão 2.0x (NÃO 2.5)
- DecombLegacy.dll (para AviSynth legado 2.0x)
- DVD2AVI versão 1.76
- MPEG2DEC.dll (para AviSynth v2.0x; exigido para FPSChk.exe)

O linque acima descreve como fazer isto perfeitamente. Mas já que se pode fazer um pouco mais simples, repetiremos o processo aqui:

1) Crie o arquivo índice (idx):

Ponha DVD2AVI 1.76 e MPEG2DEC.dll no mesmo diretório onde FPSChk.exe fica situado, senão entra em CHOQUE. Inicie o FPSChk.exe. Infelizmente é japonês, mas nós o guiaremos: Use ALT+F, e tecle O para abrir um arquivo. Abra seu arquivo D2V e então você pode vê-lo. O próximo passo é usar as teclas ALT+A e apertar S para esquadrinhar o D2V para porções de FILME e as que são VÍDEOS. Os contadores na barra de estado embaixo contarão para baixo, assim seja paciente e espere. Quando o esquadrinhando terminar, tecle ALT+F e depois W para gravar o arquivo IDX.

2) Codifique a um arquivo 30 fps usando dec60.dll:

Aqui você pode usar AviSynth v2.5 novamente (mas também precisa de mpeg2dec.dll e dvd2avi 1.76). E precisa do LoadPluginEx.dll para carregar os plugins de v2.0x. Crie o escrito seguinte (não esqueça de ajustar os caminhos)

    LoadPlugin("C:\Program Files\AviSynth2_temp\plugins\LoadPluginEx.dll")
    LoadPlugin("C:\Program Files\AviSynth2_temp\Dec60.dll")
    LoadPlugin("C:\Program Files\AviSynth2_temp\mpeg2dec.dll")

    Mpeg2Source("F:\Guides\Hybrid\TNGsample.d2v")
    Dec60(idxfile="F:\Guides\Hybrid\TNGsample.idx", deint=false)

Crie o DivX/XviD.

3) Converta arquivo crappy 29.97 fps a 119.88 fps:

Agora execute AVI60GUI.exe e vai notar três campos. O topo é onde você carrega seu avi codificado pelo passo DEC60. O segundo campo pede onde você deseja salvar o avi modificado. O campo ao fundo pede seu arquivo IDX. Uma vez que todos os três estejam carregados e o campo de 119.88 fps está destacado, tecle Enter e espere. Uma vez feito, um vídeo de 120 fps suave e sedoso foi codificado. Agora é a vez de muxar o seu áudio.

Isto trabalha porque os quadros atuais feitos são 29.97 fps, mas cortados de tal modo que 23.976 fps e 29.97 fps são dados a uma taxa diferente de playback por perda de quadros (que atrasa os quadros ao tempo correto de ms). (Se você abrir o avi no VirtualDub verá quais quadros serão perdidos no playback (abaixo do quadro verá: quadro 23 (0:00:00.192) [D] [43.91 kB]).

### criando vídeo vfv com o recipiente mkv (matroska)

Pegue o plugin Decomb modificado chamado Decomb521VFR que pode gravar um arquivo de timecodes e vfvstats. O anterior informa quais quadros são tais taxas de quadro. Faça o escrito seguinte

    Mpeg2Source("F:\Guides\Hybrid\TNGsample.d2v")
    Decomb521VFR_Decimate(mode=4, threshold=1.0, progress=true, timecodes="F:\Guides\Hybrid\timecodes.txt", vfvstats="F:\Guides\Hybrid\video.vfvstats")
    # veja a documentação Decomb521VFR para detalhes

Abra este escrito no VDub ou VDubMod e toque. Serão criados os timecodes e os arquivos vfvstats. A seguir remova a linha Decomb521 e salve o escrito seguinte

    Mpeg2Source("F:\Guides\Hybrid\TNGsample.d2v")

e codifique-o para DivX/XviD (a 29.97 fps).

Abra o mmg.exe que é um gui para mkvmerge: abra o vídeo, o áudio, os arquivos timecodes.txt (que é possível se você clicar no vídeo clipe) e inicie o muxar.

Para tocar, você precisa de um splitter (divisor) Matroska que você pode pegar aqui (Gabest) ou aqui (Haali).

### resumo dos métodos

Resumindo as vantagens e desvantagens dos métodos acima mencionados. Ao codificar para 23.976 ou 29.97 fps o clipe será vfc (que é bom se quer re-editar no AviSynth/VDub, porque muitos editores precisam de material vfc), mas parecerá saltar no playback devido aos quadros duplicados ou perdidos. Ao codificar a 120 fps com perda de quadros, o clipe é vfc e não pula no playback. Porém é muito esforço para criar essas codificações de 120 fps (e algumas das ferramentas exigidas são fonte fechadas). Codificando com o mkv que usa o verdadeiro vfv (com timecodes) é a única opção que não tem desvantagem (diferente do mkv que não é suportado em tocadores de mesa).

## Abrindo vídeo vfv (vídeo híbrido) no AviSynth

Para abrir seu vídeo vfv no AviSynth sem perda de sincronismo, ele deve primeiro ser convertido em vfc. Isto pode ser feito de dois modos: com mk2vfr (com a habilidade de extrair arquivos timecodes e habilitando o reencode para mkv) ou DirectShowSource.

1) Usando mkv2vfr:

mkv2vfr extrai todos os quadros de vídeos do Matroska para um arquivo vfc AVI e um arquivo de timecode. Você pode extrair o vídeo em avi, reprocessá-lo com qualquer aplicativo e muxar para Matroska com um arquivo de timecode. Assumindo que não foram incluídos/removidos quadros, pode usar o mesmo arquivo timecode e se você mudou o número de quadros, precisa editar o arquivo timecode à mão. mkv2vfr é uma aplicação de linha de comando. Uso

mkv2vfr.exe xvid.mkv xvid.avi timecodes.txt

http://forum.doom9.org/showthread.php?s=&threadid=89294&highlight=mkv2vfr

Abra o avi no AviSynth (23.976 ou 29.97 fps; veja o arquivo timecode):

    AviSource("xvid.avi")

Mas, a utilidade trabalha corretamente?

2) Usando DirectShowSource (mas ainda não é possível ter o arquivo timecode; assim acho que não é possível recodificar para mkv-vfr):

Recodificando para 23.976 ou 29.97 fps:

    DirectShowSource("F:\Guides\Hybrid\vfv_startrek.mkv", fps=29.97, convertfps=true) # ou fps=23.976

ou

    DirectShowSource("F:\Guides\Hybrid\vfv_startrek.mkv", fps=119.88, convertfps=true)
    FDecimate(29.97) # ou FDecimate(23.976)

(Teoricamente, não sei o que produz melhores resultados). Isto também trabalha para MP4.

Se você o abre como fps=29.97 e restaura o arquivo timecode com decomb521vfr, algo dá errado por alguma razão.

## Criando e abrindo vídeo vfv (MKV/MP4) no AviSynth

Eu penso ser seguro dizer que mkv de vfv são sempre híbridos (no momento não há nenhuma ferramenta para criar arquivos "verdadeiro" mkv de vfv). Se você tem um arquivo mp4 de vfv não precisa passá-lo a híbrido. Para criá-los: Aqui você pode encontrar como fazer AVIs com n-vops. Ao transcodificar AVI para MP4 (MP4box ou com muxer 3ivx mp4) para criar um verdadeiro fluxo MP4 vfv (os quadros n-vop são removidos).

Como você sabe se o mkv/mp4 é vfv (sem ter o avi original)?

- mkv: pega o arquivo timecode usando mkv2vfr para verificar isso.
- mp4: Eu não sei (para confirmar se um mp4 é vfv, você pode abri-lo no mp4ui e confirmar o framerate informado).

GSpot pode ser usado para conferir se o AVI tem quadros n-vops (clipe btw com n-vops ainda é vfc.).

Um dos modos para abrir estes arquivos vfv (não-híbridos) em AviSynth, é encontrar o framerate médio e usar essa taxa no DirectShowSource. Assim

    av_rate = ...
    DirectShowSource("F:\Guides\Hybrid\vfv.mp4", fps=av_rate, convertfps=true)

Dependendo da duração de um quadro, os quadros serão acrescentados ou removidos para manter a sincronia.

## Sincronização de áudio

São discutidos vários métodos para codificar seu vídeo (a 23.976, 29.97 ou vídeo vfv). Você pode saber por que o áudio permanece em sincronia sem se preocupar com qual método codificar o vídeo. Antes de codificar, o vídeo e áudio têm a mesma duração desde que estejam em sincronia. As seguintes situações podem acontecer:

- você muda o framerate de seu o fluxo acelerando-o ou reduzindo sua velocidade (como é freqüentemente feito por conversões de FILME PAL). Isto implica que a duração do vídeo mudará e conseqüentemente o áudio estará fora de sincronia.
- você muda o framerate do seu fluxo acrescentando ou removendo quadros. Isto implica que a duração do vídeo permanecerá o mesmo e conseqüentemente o áudio estará em sincronia.

Se você codifica o vídeo para 23.976 ou 29.97 fps (ambos vfc) usando Decimate(mode=3, threshold=1.0) ou Decimate(mode=1, threshold=1.0), os quadros serão removidos ou acrescentados e assim seu áudio estará em sincronia. Por razão semelhante a codificação vfv estará em sincronia.

Finalmente, suponha abrir o vídeo vfv no AviSynth com DirectShowSource. Compare o seguinte:

    DirectShowSource("F:\Guides\Hybrid\vfr_startrek.mkv", fps=29.97) # ou fps=23.976

e

    DirectShowSource("F:\Guides\Hybrid\vfr_startrek.mkv", fps=29.97, convertfps=true) # ou fps=23.976

O anterior estará fora de sincronia desde que o vídeo é acelerado (ou reduzido sua velocidade) e o posterior estará em sincronia desde que os quadros são acrescentados para convertê-lo a vfc.

## Referências

http://www.doom9.org/ivtc-tut.htm (vídeo híbrido , IVTC)

Documentação Decomb.

http://www.masteryoshidino.com/hentai/anime-encoding.htm (fazendo vídeo com 120 fps)

http://webpages.charter.net/falconx/decombvfrmod.html (Decomb521VFR)

http://forum.doom9.org/showthread.php?s=&threadid=80673 (sobre mod Decomb521VFR1.0 para Matroska VFR automatizado)

`$Date: 2006/03/26 18:11:19 $ Portuguese translation by RoLon`