Capturando stream HDV de uma camera Firewire no Linux

Este artigo é uma tradução da página figvam.blogspot.com, e explica com capturar video HDV usando o Linux. Apesar de o autor citar o  Fedora no seu texto, suas dicas podem ser adaptadas facilmente para outras distribuições.


As coisas podem sr um pouco desarranjadas no departamento de HDV do Linux. Enquanto existem boas aplicações por ai que suportam edição de vídeo HD (como o Cinelerra), capturar stream HD da camera via ieee1394 (ou Firewire ou iLink) é uma tarefa formidável.

De qualquer forma, depois de adiquirir uma camera HD Canon HV10, eu rapidamente descobri que o utilitário dvgrab que supostamente devia cuidar de minhas necessidades de captura, não funcionava com streams HDV (que é essencialmente somente um stream MPEG2 com 1440×1080 numa fita cassete miniDV). Algumas pesquisas no Google depois, descobri um utilitário com o nome test-mpeg2 (parte do pacote libiec61883-utils no Fedora) que deveria me ajudar a capturar o stream. Mas não o fez. Somente imprimia a esperançosa mensagem “Starting to receive” e não fazia mais nada.
Outra rodada de pesquisa revelou outro utilitário: mpg1394grab que funcionou apesar de ser bem pequeno (menos de 200 linhas), ter 4 anos de idade e ser escrito para uma outra camera. As instruções para compilação estão no próprio arquivo .c.

Pesquisando mais um pouco, test-mpeg2 funcionou no final das contas. Eu tive que fornecer um id do nó ieee1394 correspondente à minha camera como repostado pelo plugreport:

test-mpeg2 -r 0 > capture.m2t

mais antes disso, tive que executar esse pequeno comando mágico:

plugctl -n 0 oPCR[0].n_p2p_connections=1

O que ele faz? -n 0 especifica um id para sua camera Firewire do plugreport, e o resto diz ao adaptador para ativar o uso de conexões p2p para a saída (oPCR) ao invés de uma conexão broadcast (bcast_connection do plugreport).

infelizmente, depois que a camera for desconectada essa conexão precisa ser feita novamente. Eu não fui capaz de escrever uma regra para o udev para fazer isso automaticamente porque aparentemente o udev não pega eventos de conectar/desconectar no bus Firewire (como monitorado pelo udevmonitor).
Então ai estava, um único arquivo de 1,5 GB contendo 8 minutos de video HDV. é uma coisa ruim o dvgrab com seu particionamento automático não funcionar com HDV. Embora funcione impecavelmente na combinação com o Kino quando a camera está configurada para saida em DV, então ao menos a captura (e edição) em DV parece bem sólida em Linux.