Masterização de VCD's com menu interativo
Este artigo descreve passo-a-passo o processo direto de como fazer (termo correto: "masterizar") um VCD numa forma que será possível substituir as antigas fitas VHS por vídeos digitais até para o mais leigo Linuxer. E isso fazendo uso de um recurso simples, mas visualmente muito atraente, que são os menus interativos.
Parte 7: Estrutura do XML
Tome uma xícara de café antes de continuar lendo.
<?xml version="1.0"?>
<!DOCTYPE videocd PUBLIC "-//GNU/DTD VideoCD//EN"
"http://www.gnu.org/software/vcdimager/videocd.dtd">
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/"
class="vcd" version="2.0">
<info>
<album-id>ALICE_DISC</album-id>
<volume-count>1</volume-count>
<volume-number>1</volume-number>
<restriction>0</restriction>
</info>
<!DOCTYPE videocd PUBLIC "-//GNU/DTD VideoCD//EN"
"http://www.gnu.org/software/vcdimager/videocd.dtd">
<videocd xmlns="http://www.gnu.org/software/vcdimager/1.0/"
class="vcd" version="2.0">
<info>
<album-id>ALICE_DISC</album-id>
<volume-count>1</volume-count>
<volume-number>1</volume-number>
<restriction>0</restriction>
</info>
Informações sobre o disco. Esta sessão contém informações do disco, que não precisam ser modificadas. De fato, na maioria dos DVD player os dados colocados aqui jamais serão visualizados. A única coisa que alguém pode se interessar em modificar é a marca <album-id>, que contém o "label" do disco.
<pvd>
<volume-id>ALICE_CHEGOU</volume-id>
<system-id>CD-RTOS CD-BRIDGE</system-id>
<publisher-id>GUSTAVO VASCONCELOS - TANGO</publisher-id>
</pvd>
<volume-id>ALICE_CHEGOU</volume-id>
<system-id>CD-RTOS CD-BRIDGE</system-id>
<publisher-id>GUSTAVO VASCONCELOS - TANGO</publisher-id>
</pvd>
Descrição do volume primário (PVD). De novo, mais informações sobre o disco. Você pode querer modificar ou acrescentar o <volume-id> (informação de volume, pode ser a mesma do <album-id>) e <publisher-id> para colocar seu nome.
<segment-items>
<segment-item src="menuprincipal.mpg" id="seg-top-menu"/>
<segment-item src="menu1.mpg" id="seg-menu-1"/>
<segment-item src="menu2.mpg" id="seg-menu-2"/>
</segment-items>
<sequence-items>
<sequence-item src="meuvideo1.mpg" id="seq-title-1"/>
<sequence-item src="meuvideo2.mpg" id="seq-title-2"/>
<sequence-item src="meuvideo3.mpg" id="seq-title-3"/>
<sequence-item src="meuvideo4.mpg" id="seq-title-4"/>
<sequence-item src="meuvideo5.mpg" id="seq-title-5"/>
</sequence-items>
<segment-item src="menuprincipal.mpg" id="seg-top-menu"/>
<segment-item src="menu1.mpg" id="seg-menu-1"/>
<segment-item src="menu2.mpg" id="seg-menu-2"/>
</segment-items>
<sequence-items>
<sequence-item src="meuvideo1.mpg" id="seq-title-1"/>
<sequence-item src="meuvideo2.mpg" id="seq-title-2"/>
<sequence-item src="meuvideo3.mpg" id="seq-title-3"/>
<sequence-item src="meuvideo4.mpg" id="seq-title-4"/>
<sequence-item src="meuvideo5.mpg" id="seq-title-5"/>
</sequence-items>
Aqui as coisas começam a ficar interessantes. Este trecho do XML trata dos itens de segmento, que são justamente os menus e dos itens de seqüência, que são os filmes em si. Esta é apenas uma declaração dos mesmos, que serão referenciados daqui para frente por nomes como seq-menu-1 e seq-title-3.
<pbc>
<selection id="select-top-menu">
<bsn>1</bsn>
<timeout ref="select-menu-1"/>
<wait>298</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-top-menu"/>
<select ref="select-menu-1"/>
<select ref="select-menu-2"/>
</selection>
<selection id="select-menu-1">
<bsn>1</bsn>
<return ref="select-top-menu"/>
<timeout ref="select-menu-2"/>
<wait>222</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-menu-1"/>
<select ref="play-title-1"/>
<select ref="play-title-2"/>
<select ref="play-title-3"/>
<select ref="select-top-menu"/>
</selection>
<playlist id="play-title-1">
<prev ref="play-title-1"/>
<next ref="play-title-2"/>
<return ref="select-menu-1"/>
<wait>0</wait>
<play-item ref="seq-title-1"/>
</playlist>
<playlist id="play-title-2">
<prev ref="play-title-1"/>
<next ref="play-title-3"/>
<return ref="select-menu-1"/>
<wait>0</wait>
<play-item ref="seq-title-2"/>
</playlist>
<playlist id="play-title-3">
<prev ref="play-title-2"/>
<next ref="select-menu-1"/>
<return ref="select-menu-1"/>
<wait>0</wait>
<play-item ref="seq-title-3"/>
</playlist>
<selection id="select-menu-2">
<bsn>4</bsn>
<return ref="select-top-menu"/>
<timeout ref="select-top-menu"/>
<wait>207</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-menu-2"/>
<select ref="play-title-4"/>
<select ref="play-title-5"/>
<select ref="select-top-menu"/>
</selection>
<playlist id="play-title-4">
<prev ref="play-title-4"/>
<next ref="play-title-5"/>
<return ref="select-menu-2"/>
<wait>0</wait>
<play-item ref="seq-title-9"/>
</playlist>
<playlist id="play-title-5">
<prev ref="play-title-4"/>
<next ref="select-menu-2"/>
<return ref="select-menu-2"/>
<wait>0</wait>
<play-item ref="seq-title-5"/>
</playlist>
</pbc>
</videocd>
<selection id="select-top-menu">
<bsn>1</bsn>
<timeout ref="select-menu-1"/>
<wait>298</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-top-menu"/>
<select ref="select-menu-1"/>
<select ref="select-menu-2"/>
</selection>
<selection id="select-menu-1">
<bsn>1</bsn>
<return ref="select-top-menu"/>
<timeout ref="select-menu-2"/>
<wait>222</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-menu-1"/>
<select ref="play-title-1"/>
<select ref="play-title-2"/>
<select ref="play-title-3"/>
<select ref="select-top-menu"/>
</selection>
<playlist id="play-title-1">
<prev ref="play-title-1"/>
<next ref="play-title-2"/>
<return ref="select-menu-1"/>
<wait>0</wait>
<play-item ref="seq-title-1"/>
</playlist>
<playlist id="play-title-2">
<prev ref="play-title-1"/>
<next ref="play-title-3"/>
<return ref="select-menu-1"/>
<wait>0</wait>
<play-item ref="seq-title-2"/>
</playlist>
<playlist id="play-title-3">
<prev ref="play-title-2"/>
<next ref="select-menu-1"/>
<return ref="select-menu-1"/>
<wait>0</wait>
<play-item ref="seq-title-3"/>
</playlist>
<selection id="select-menu-2">
<bsn>4</bsn>
<return ref="select-top-menu"/>
<timeout ref="select-top-menu"/>
<wait>207</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-menu-2"/>
<select ref="play-title-4"/>
<select ref="play-title-5"/>
<select ref="select-top-menu"/>
</selection>
<playlist id="play-title-4">
<prev ref="play-title-4"/>
<next ref="play-title-5"/>
<return ref="select-menu-2"/>
<wait>0</wait>
<play-item ref="seq-title-9"/>
</playlist>
<playlist id="play-title-5">
<prev ref="play-title-4"/>
<next ref="select-menu-2"/>
<return ref="select-menu-2"/>
<wait>0</wait>
<play-item ref="seq-title-5"/>
</playlist>
</pbc>
</videocd>
Se você ainda não dormiu, essa é uma péssima hora para fazê-lo. Conforme foi dito antes, dentro do XML é que é feita a masterização de verdade, quando definimos como o DVD player reagirá aos eventos de teclado e vídeo.
Como é possível perceber, é uma grande quantidade de texto a ser destrinchada, mas a maioria são métodos que se repetem em vários vídeos. Explicaremos um tipo de cada, a começar pelo menu:
<selection id="select-top-menu">
<bsn>1</bsn>
<timeout ref="select-menu-1"/>
<wait>298</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-top-menu"/>
<select ref="select-menu-1"/>
<select ref="select-menu-2"/>
</selection>
<bsn>1</bsn>
<timeout ref="select-menu-1"/>
<wait>298</wait>
<loop jump-timing="immediate">1</loop>
<play-item ref="seg-top-menu"/>
<select ref="select-menu-1"/>
<select ref="select-menu-2"/>
</selection>
- <bsn> é a base de seleção numérica, e diz em que número começar a contar as entradas. O que vier abaixo dele responderá aos botões do aparelho de DVD, em seqüência. Exemplo: Se <bsn> for 4, o primeiro vídeo será acessível através da tecla 4, o segundo na tecla 5 e assim por diante.
- <timeout> especifica a ação a ser tomada depois de decorrido <wait> segundos. No caso acima ao terminar a trilha de áudio do menu principal (que dura 298s) ele irá automaticamente para o menu secundário 1. E, como você pode observar, daí ele irá para o menu secundário 2 e então para o menu principal, num looping entre os menus.
- <loop> especifica quantas vezes o menu deve ser reproduzido antes de ir para a referência de <timeout>. Neste caso ele não se repetirá, sendo reproduzido apenas uma única vez.
- <select> é a ação a se tomar quando os botões de número <bsn> forem digitados. Neste caso o botão 1 do aparelho de DVD chamará o menu secundário 1 e o botão 2 chamará o menu secundário 2.
<playlist id="play-title-5">
<prev ref="play-title-4"/>
<next ref="select-menu-2"/>
<return ref="select-menu-2"/>
<wait>0</wait>
<play-item ref="seq-title-5"/>
</playlist>
<prev ref="play-title-4"/>
<next ref="select-menu-2"/>
<return ref="select-menu-2"/>
<wait>0</wait>
<play-item ref="seq-title-5"/>
</playlist>
Aqui vemos como será a seqüência de reprodução dos filmes. Neste em particular a reprodução de meuvideo5.mpg, que está aqui referenciado por title-5.
Podemos ver claramente (através da marca <prev>) que ao pressionar a tecla "anterior" («) do DVD player ele irá iniciar a reprodução do vídeo 4, enquanto a tecla "próximo" (») o levará de volta ao menu secundário 2 (a ação <next> também se aplica ao fim do vídeo sem interrupção do usuário).
Resumindo todo este arquivo, o que ele quer dizer é que o VCD, ao ser inserido no DVD player, será reproduzido da seguinte maneira:
- O vídeo principal tem sua reprodução iniciada;
- Se nenhuma interação for feita por parte do usuário ele será reproduzido uma única vez e então pulará automaticamente para o menu secundário 1;
- Se nenhuma interação for feita por parte do usuário ele será reproduzido uma única vez e então pulará automaticamente para o menu secundário 2;
- Se nenhuma interação for feita por parte do usuário ele será reproduzido uma única vez e então pulará automaticamente para o menu principal;
- No menu principal, o usuário pode alcançar manualmente os menus secundários através das teclas 1 (secundário 1) e 2 (secundário 2);
- Uma vez dentro de algum dos menus secundários, a reprodução dos vídeos pode ser iniciada através das teclas 1 - 3 no menu 1 (4 volta ao menu principal) e 4 - 5 no menu 2 (6 volta ao menu principal);
- Ao se iniciar a reprodução de um dos vídeos, ela prosseguirá sequencialmente passando por todos os vídeos depois dele até chagar ao último.
- Ao final do último vídeo o DVD player volta ao menu secundário que chamou o vídeo.
Em primeiro lugar, meus parabéns pelo artigo, sem dúvida um dos melhores que já foram publicados aqui no VOL. Antes de perdermos os 3 meses de banco, seu artigo estava na fila de espera e masterização de VCDs era algo que eu já queria pesquisar fazia tempo, pois estava louco pra queimar uns VCDs de vídeos pessoais.
Por incrível que pareça, seu artigo foi o primeiro que me veio em mente quando pensei: "putz, perdi 3 meses de artigos". Fique danado por não tê-lo lido enquanto estava na fila de espera :), ainda bem que tinhas backup em casa.
[]'s,
Fábio