Avaliação de Sincronismo de Stream de Áudio e Vídeo

36
Universidade Federal do Rio de Janeiro Escola Politécnica Curso de Redes e Vídeo IP (RV – IP) Avaliação de Sincronismo de Stream de Áudio e Vídeo Autor: _________________________________________________ Eng. Luiz Fausto de Souza Brito Orientador UFRJ: _________________________________________________ Prof. Sergio Barbosa Villas-Boas, Ph.D. Orientador GLOBO: _________________________________________________ Eng. Luiz Carlos Abrahao Examinador: _________________________________________________ Prof. Edilberto Strauss, Ph.D. RV-IP Dezembro de 2009

description

Falta de sincronismo entre áudio e vídeo é um problema com muitas causas e poucas soluções disponíveis, particularmente para a avaliação de sistemas de transmissão por streaming. Uma metodologia simples, utilizando um sinal de teste resistente às perdas provocadas por diferentes tipos de compressão, pode ser uma solução efetiva para esse tipo de avaliação objetiva, como demonstrado neste trabalho.

Transcript of Avaliação de Sincronismo de Stream de Áudio e Vídeo

Page 1: Avaliação de Sincronismo de Stream de Áudio e Vídeo

Universidade Federal do Rio de Janeiro

Escola Politécnica

Curso de Redes e Vídeo IP (RV – IP)

Avaliação de Sincronismo de Stream de Áudio e Vídeo Autor:

_________________________________________________ Eng. Luiz Fausto de Souza Brito

Orientador UFRJ:

_________________________________________________ Prof. Sergio Barbosa Villas-Boas, Ph.D.

Orientador GLOBO:

_________________________________________________ Eng. Luiz Carlos Abrahao

Examinador:

_________________________________________________ Prof. Edilberto Strauss, Ph.D.

RV-IP

Dezembro de 2009

Page 2: Avaliação de Sincronismo de Stream de Áudio e Vídeo

ii

AGRADECIMENTO

A Deus, verdadeira fonte de toda sabedoria. À minha esposa, por todo suporte

que me concede. Aos meus pais, pela educação que me deram. À TV Globo, por

financiar esse curso, em particular pelos meus gestores que me confiaram essa

oportunidade. À UFRJ pelo comprometimento com a educação, em particular pela

dedicada equipe desse curso. Ao meu orientador na TV Globo e ao meu orientador na

UFRJ, pela generosidade em aceitarem assumir a orientação desse trabalho. Ao Ricardo

Fontenelle, pesquisador da TV Globo, pela sua disponibilidade e capacidade técnica

para discutir soluções para os problemas tecnológicos do nosso dia-a-dia, assim como

para o problema desse projeto em particular. Ao engenheiro Ricardo José, pela

disponibilidade em revisar este texto. Ao povo brasileiro, pela contribuição na minha

educação. A todos que, de alguma forma, me ajudaram a chegar até aqui, o meu muito

obrigado.

Page 3: Avaliação de Sincronismo de Stream de Áudio e Vídeo

iii

RESUMO

Falta de sincronismo entre áudio e vídeo é um problema com muitas causas e

poucas soluções disponíveis, particularmente para a avaliação de sistemas de

transmissão por streaming. Uma metodologia simples, utilizando um sinal de teste

resistente às perdas provocadas por diferentes tipos de compressão, pode ser uma

solução efetiva para esse tipo de avaliação objetiva, como demonstrado neste trabalho.

Palavras-Chave: Sincronismo, Áudio, Vídeo, Streaming.

Page 4: Avaliação de Sincronismo de Stream de Áudio e Vídeo

iv

Sumário

Capítulo 1   Introdução ................................................................................................. 1

1.1 -   Tema.................................................................................................................. 1  1.2 -   Delimitação ....................................................................................................... 1  1.3 -   Justificativa........................................................................................................ 2  1.4 -   Objetivos ........................................................................................................... 2  1.5 -   Metodologia....................................................................................................... 2  1.6 -   Descrição ........................................................................................................... 3  

Capítulo 2   Medição de Sincronismo em Banda Base ............................................... 4

2.1 -   Fontes de problemas .......................................................................................... 4  2.2 -   Tolerância de Sincronismo................................................................................ 5  2.3 -   Avaliação Subjetiva........................................................................................... 5  2.4 -   Medição usando contadores .............................................................................. 6  2.5 -   Medição usando transições rápidas ................................................................... 6  2.6 -   Medição usando contadores e transições rápidas .............................................. 6  2.7 -   Medição usando "marca d'água" ....................................................................... 7  2.8 -   Medição usando movimento labial.................................................................... 7  2.9 -   Dificuldades da aplicação a diferentes tipos de compressão............................. 7  

Capítulo 3   Medição de Sincronismo em Streams ..................................................... 8

3.1 -   Suportando diferentes compressões .................................................................. 8  3.2 -   Plataforma de Desenvolvimento e Testes........................................................ 10  3.3 -   Aplicativos Desenvolvidos.............................................................................. 10  

3.3.1 -   AVSyncGen.............................................................................................. 11  3.3.2 -   AVSyncRead ............................................................................................ 12  3.3.3 -   AVSyncAdjust.......................................................................................... 12  

Capítulo 4   Resultados Experimentais ...................................................................... 14

4.1 -   Teste 1: AVSyncGen + AVSyncRead............................................................. 14  4.2 -   Teste 2: AVSyncGen + AVSyncAdjust + AVSyncRead................................ 14  4.3 -   Teste 3: AVSyncGen + QuickTime Player + Screenium + AVSyncRead...... 15  4.4 -   Teste 4: AVSyncGen + AVSyncAdjust + QuickTime Player + Screenium + AVSyncRead .............................................................................................................. 16  4.5 -   Teste 5: AVSyncGen + Darwin Streaming Server + QuickTime Player + Screenium + AVSyncRead ......................................................................................... 16  4.6 -   Teste 6: AVSyncGen + AVSyncAdjust + Darwin Streaming Server + QuickTime Player + Screenium + AVSyncRead ....................................................... 17  

Capítulo 5   Conclusão e Trabalhos Futuros............................................................. 18

5.1 -   Conclusão ........................................................................................................ 18  5.2 -   Trabalhos Futuros............................................................................................ 19  

Page 5: Avaliação de Sincronismo de Stream de Áudio e Vídeo

v

Bibliografia .................................................................................................................... 20 Apêndice 1   Código Fonte .......................................................................................... 21

/Applications/AVSyncGen.app/Contents/Resources/Scripts/main.scpt..................... 21  /Applications/AVSyncGen.app/Contents/Resources/AVSyncGen.sce ...................... 23  /Applications/AVSyncRead.app/Contents/Resources/Scripts/main.scpt ................... 25  /Applications/AVSyncRead.app/Contents/Resources/AVSyncRead.sce................... 27  /Applications/AVSyncAdjust.app/Contents/Resources/Scripts/main.scpt................. 29  

Page 6: Avaliação de Sincronismo de Stream de Áudio e Vídeo

1

Capítulo 1

Introdução

1.1 - Tema

O presente trabalho propõe uma metodologia para avaliar o sincronismo entre

áudio e vídeo em um stream.

A justificativa do problema envolve um pouco de teoria de processamento e

streaming de áudio e vídeo, e a solução proposta será desenvolvida em software.

1.2 - Delimitação

Este trabalho contempla a avaliação de sincronismo relativo (latência) entre

áudio e vídeo em um stream através da transmissão de um sinal teste. Não atende à

avaliação de sincronismo entre áudio e vídeo de um sinal qualquer sendo transmitido.

Não garante, portanto, que outro sinal audiovisual transmitido tenha a mesma relação de

sincronismo, pois esta pode variar na fonte do sinal. Em diferentes sistemas de

reprodução também poderão existir diferenças decorrentes, por exemplo, de algum

eventual processamento anterior à exibição. A correção das eventuais diferenças de

sincronismo medidas também não é considerada neste trabalho.

Page 7: Avaliação de Sincronismo de Stream de Áudio e Vídeo

2

1.3 - Justificativa

Por diversas razões áudio e vídeo podem perder sincronismo em uma

transmissão, seja por processamentos com latências diferenciadas seja por diferenças

nas respectivas cadeias de distribuição. Na transmissão convencional de televisão este é

um problema que pode causar muito incômodo ao espectador, porém existem algumas

soluções comerciais para avaliação objetiva de eventuais problemas. Na transmissão

pela internet, pela multiplicidade de opções e sistemas utilizados, não existem

ferramentas disponíveis para essa avaliação objetiva e a avaliação subjetiva é dificultada

pela qualidade em geral inferior do vídeo. Além disso, existem mais variáveis

envolvidas no sistema que podem gerar problemas de sincronismo, como o processo de

codificação, o transporte pela rede e o processo de decodificação. Embora se considere

que o espectador desse tipo de mídia é mais tolerante a problemas de qualidade em

geral, essa é uma situação que está sendo modificada pela crescente disponibilidade de

banda de internet para o usuário final no ambiente doméstico.

1.4 - Objetivos

Pretende-se neste trabalho desenvolver uma ferramenta, capaz de avaliar

eventuais diferenças de sincronismo entre áudio e vídeo, que se aplique a sistemas de

distribuição pela internet, independente das características particulares do sistema

escolhido, tais como protocolos, codecs, hardwares e softwares.

1.5 - Metodologia

Por analogia aos sistemas de avaliação equivalentes disponíveis para áudio e

vídeo em banda base, propõe-se uma variação aplicável a sistemas com diferentes tipos

de compressão e interface diferenciada, no caso um computador. Serão ainda

apresentados os resultados de testes práticos realizados utilizando a ferramenta

desenvolvida.

Page 8: Avaliação de Sincronismo de Stream de Áudio e Vídeo

3

1.6 - Descrição

No capítulo 2 é apresentada uma breve explicação sobre os problemas de

sincronismo e alguns sistemas de avaliação disponíveis para áudio e vídeo em banda

base, além da dificuldade de aplicá-los a sistemas de distribuição pela internet com

diferentes tipos de compressão.

O capítulo 3 apresenta o desenvolvimento de ferramentas, baseadas em uma

nova proposta metodológica de avaliação de sincronismo, que se adequem às

características dos sistemas de interesse, no caso sistemas de streaming.

Os resultados de testes práticos realizados com as ferramentas desenvolvidas são

apresentados no capítulo 4.

No capítulo 5 são apresentadas as conclusões e propostas de trabalhos futuros.

Page 9: Avaliação de Sincronismo de Stream de Áudio e Vídeo

4

Capítulo 2

Medição de Sincronismo em Banda Base

2.1 - Fontes de problemas

A cadeia de transmissão de um sinal audiovisual é, em geral, um sistema

complexo, com muitos componentes envolvidos. Muitos desses componentes realizam

processamento digital de áudio e/ou vídeo, o que geralmente impõe uma certa latência

ao sinal processado. Além disso, por vezes, tanto em sistemas digitais quanto

analógicos, dispositivos de gravação ou a transmissão de sinais a longas distâncias

também podem impor latência ao áudio e ao vídeo. Se houver diferença na latência

resultante do processamento, gravação ou transmissão do áudio e do vídeo, o

sincronismo entre os dois é prejudicado.

Page 10: Avaliação de Sincronismo de Stream de Áudio e Vídeo

5

2.2 - Tolerância de Sincronismo

Embora pequenas diferenças de sincronismo entre áudio e vídeo possam ser

imperceptíveis para o espectador, em situações mais extremas, e dependendo do tipo de

programa, a falta de sincronismo pode se tornar incômoda. Embora esse limiar esteja

sujeito a uma certa variabilidade na percepção individual, a ATSC1 estabelece [1],

especificamente para a aplicação em TV Digital, que o áudio não pode estar adiantado

mais de 15 ms nem atrasado mais de 45 ms em relação ao vídeo na entrada do

codificador. Na saída do decodificador poderá ser acrescentado um erro de sincronismo

de até 15 ms entre áudio e vídeo, em qualquer direção. Ou seja, a latência total do áudio

em relação ao vídeo no sistema deve estar limitada entre -30 ms e +60 ms. Entretanto, a

ATSC não menciona como realizar essa medição. Não existem padrões abertos para

avaliação objetiva, embora existam opções comerciais através de alguns fabricantes,

cada um com sua tecnologia proprietária. Enquanto isso, a avaliação subjetiva ainda é

muito empregada. A seguir será apresentada uma análise das opções disponíveis.

2.3 - Avaliação Subjetiva

Na falta de um medidor objetivo, por qualquer motivo que seja, a alternativa é a

avaliação subjetiva. Pode ser feita através de sinais de teste, ou filmando alguém

falando para teste diante de uma câmera, ou até diretamente com o sinal audiovisual a

ser transmitido. Um avaliador treinado e experiente pode ser capaz de "acertar" o

sincronismo para um padrão aceitável, através de tentativa e erro, embora esse tipo de

teste seja lento e esteja sujeito às variabilidades da percepção individual, cuja precisão

também é afetada pelo tipo de sinal audiovisual utilizado para a análise.

1 ATSC: Comitê de Sistemas Avançados de Televisão (Advanced Television Systems Committee), grupo que estabeleceu os padrões de Televisão Digital dos Estados Unidos da América.

Page 11: Avaliação de Sincronismo de Stream de Áudio e Vídeo

6

2.4 - Medição usando contadores

Uma das técnicas utilizadas para avaliar diferenças de sincronismo entre áudio e

vídeo consiste em injetar, no sistema sob teste, sinais nos quais são inseridos

contadores, codificados na imagem e no som, que possam ser decodificados e

comparados na saída do sistema.2

2.5 - Medição usando transições rápidas

Outra técnica de medição envolve a utilização sinais de teste que contenham

transições rápidas na imagem e no som, cujos instantes de reprodução podem ser

comparados na saída do sistema sob teste.3

2.6 - Medição usando contadores e transições rápidas

As duas técnicas anteriormente citadas podem ser combinadas. Neste caso um

dos sinais (áudio ou vídeo) contém um contador enquanto o outro contém transições

rápidas. Na saída do sistema sob teste o instante da transição rápida é comparado com o

valor do contador neste mesmo instante. [2]

2 Dois sistemas experimentais utilizando essa técnica foram desenvolvidos pelo Departamento de Manutenção da TV Globo Rio, um utilizando time-code, VTs e um waveform (pelo Engenheiro Helio Eufrauzino), e outro com o desenvolvimento de um equipamento com um sistema de contagem proprietário (pelo Pesquisador Ricardo Fontenelle). 3 Dois sistemas testados pelo Departamento de Manutenção da TV Globo Rio utilizavam essa técnica: o Pro-Bel HD Valid8 utiliza color-bars com tom, piscando um quadro em black síncrono com mute no áudio; o Tektronix TG700 possui um sinal de teste para uso em conjunto com o WFM7120 (com opcional AV Delay) utiliza black no vídeo e mute no áudio, piscando um quadro de vídeo qualquer síncrono com um tom no áudio.

Page 12: Avaliação de Sincronismo de Stream de Áudio e Vídeo

7

2.7 - Medição usando "marca d'água"

Um produto [4], já descontinuado por falta de sucesso comercial, utilizava uma

técnica interessante para verificar problemas de sincronismo na distribuição de um sinal

audiovisual. Na ponta da geração de um enlace a ser verificado, em que se supõe que o

sincronismo esteja correto, um equipamento inclui no vídeo uma "marca d'água", ou

seja, um sinal praticamente invisível que corresponde ao envelope da forma de onda do

áudio correspondente. Na ponta da recepção do enlace, outro equipamento extrai essa

"marca d'água" do vídeo e compara com o envelope do áudio recebido, podendo com

isso calcular a latência. Os detalhes da implementação dessa "marca d'água" não foram

divulgados pelo fabricante.

2.8 - Medição usando movimento labial

Uma idéia aparentemente atrativa é a medição objetiva do sincronismo através

do reconhecimento dos movimentos labiais e dos fonemas correspondentes [3], porque

poderia ser aplicada sem necessidade de um sinal de teste específico e eventualmente

até para verificação do sistema em tempo real durante uma transmissão. Porém trata-se

de um processamento muito complexo (e por isso mesmo de maior custo), e cuja

eficácia é dependente da boa visibilidade do movimento labial e da qualidade do áudio.

Essas condições não são facilmente atendidas em qualquer tipo de programa.

2.9 - Dificuldades da aplicação a diferentes tipos de compressão

Alguns fabricantes alegam que seus sinais de teste suportam sofrer algum tipo

de processamento ou perda de qualidade, porém há limites. Sinais de teste que utilizam

contadores, transições rápidas, "marca d'água" ou detecção de movimento labial podem

ter sua decodificação ou interpretação seriamente dificultados por sistemas que

envolvam diferentes tipos de compressão, como é o caso de streaming pela internet. As

modificações espaciais e temporais no vídeo causadas pela mudanças na resolução, na

relação de aspecto e na taxa de quadros por segundo e a limitação de banda do áudio,

além da degradação introduzida tanto no vídeo quanto no áudio pelo processo de

codificação e decodificação, em geral inviabilizam o reconhecimento dos padrões

utilizados para avaliação de sincronismo nas técnicas mencionadas neste capítulo.

Page 13: Avaliação de Sincronismo de Stream de Áudio e Vídeo

8

Capítulo 3

Medição de Sincronismo em Streams

3.1 - Suportando diferentes compressões

Em todos os sistemas que utilizam sinais de teste para a avaliação de

sincronismo entre áudio e vídeo (com contadores, transição rápida ou combinação dos

dois) trata-se de um sinal periódico, cujo período limita a faixa de erro de sincronismo

detectável. Por exemplo, admitindo que o áudio possa estar adiantado ou atrasado em

até quatro segundos em relação ao vídeo o período do sinal de teste deve ser igual ou

superior a oito segundos.

Também é necessário poder extrair sinais de sincronismo unidimensionais do

áudio e do vídeo (o vídeo é um sinal bidimensional enquanto o áudio é um sinal

unidimensional) que possam utilizar diferentes taxas de amostragem, como é o caso de

vídeo (em geral igual ou inferior a 30 quadros por segundo) e áudio (em geral igual ou

inferior a 48000 amostras por segundo).

Além disso, para suportar especificamente diferentes tipos de compressão de

áudio e vídeo, é necessário garantir que o sinal de teste seja o mais simples possível do

ponto de vista da representação do sinal comprimido, para minimizar problemas com

eventuais perdas de compressão.

Um dos sinais periódicos mais simples que se pode imaginar (ao menos do

ponto de vista da representação no domínio da frequência) é uma senóide. O passo

seguinte é encontrar uma forma conveniente de transportar uma senóide de frequência

muito baixa (por exemplo, 1/8 Hz) no vídeo e no áudio.

Page 14: Avaliação de Sincronismo de Stream de Áudio e Vídeo

9

A compressão de um sinal de vídeo pode ser feita em dois domínios: espacial e

temporal. Quanto ao domínio espacial o sinal mais simples para ser codificado é aquele

que possui todos os pixels iguais. Isso também simplifica a análise do vídeo, já que

bastaria analisar um único pixel qualquer, e já o reduz de bidimensional a

unidimensional. Ainda melhor, para a representação codificada, se o sinal de vídeo não

contiver cores, já que em geral são alocados mais bits para a codificação de luminância

do que para a crominância. Quanto ao domínio temporal, um sinal com transições lentas

(acompanhando uma senóide de baixa frequência) é mais simples de codificar que um

vídeo com transições rápidas. Mesmo com uma taxa de quadros por segundo muito

baixa (e.g. 10 quadros por segundo), como o que pode acontecer nos vídeos para

internet, essa amostragem ainda estará muito acima do dobro da frequência da

frequência da senóide (e.g. 1/8 Hz), portanto o sinal de teste estará sempre

suficientemente amostrado para sua perfeita recuperação. O sinal de vídeo, pode ser

portanto, uma variação senoidal da luminância (com um offset constante, já que não

existe luminância negativa).

A compressão de áudio pode envolver filtros passa-altas e passa-baixas. Na pior

das hipóteses, pode-se supor uma filtragem equivalente à telefônica (aproximadamente

de 300 Hz a 3 kHz). Além disso, devido à filtragem psicoacústica do mascaramento, à

requantização do sinal no domínio da frequência, e às distorções de amplitude e fase dos

filtros, sinais multifrequenciais complexos e de amplo espectro podem não ser

adequadamente codificados. É necessário, portanto, mapear o sinal de sincronismo para

a faixa mais linear possível da resposta em frequência (em torno de 1 kHz) com

espectro mais simples e estreito possível. Pode-se utilizar para isso uma modulação

AM4 com portadora em 1 kHz. Como o sinal de sincronismo deve possuir frequência

muito baixa (e.g. 1/8 Hz) o espectro resultante será muito estreito, além de simples.

Adicionalmente a demodulação AM também é simples de ser implementada, o que

facilita a recuperação do sinal de sincronismo do áudio.

4 AM: Modulação em Amplitude (Amplitude Modulation).

Page 15: Avaliação de Sincronismo de Stream de Áudio e Vídeo

10

3.2 - Plataforma de Desenvolvimento e Testes

O desenvolvimento e os testes foram realizados através de software. O

computador utilizado foi um Apple MacBook (identificador de modelo: MacBook 4,1),

com processador Intel Core 2 Duo 2.1 GHz e 4 GB de RAM. O sistema operacional

utilizado foi o Mac OS X versão 10.5.8. Os aplicativos desenvolvidos utilizaram o

"Editor de Roteiros" (AppleScript) versão 2.2.1, o Scilab versão 5.1.1 alpha-1, o SIVP

(Scilab Image and Video Processing toolbox) versão 0.5.0 e o QuickTime Player Pro

versão 7.6.4. Para os testes também foram utilizados os softwares Screenium versão

1.2.4 e Darwin Streaming Server versão 6.0.3. A demanda de memória e processamento

dos algoritmos propostos é relativamente pequena, uma vez que é necessário carregar na

memória apenas 8 segundos de áudio e vídeo em baixa qualidade e a análise não é feita

em tempo real.

3.3 - Aplicativos Desenvolvidos

Foram desenvolvidos três aplicativos: AVSyncGen, AVSyncRead e

AVSyncAdjust. O primeiro (AVSyncGen) é responsável pela geração do sinal de teste

utilizado. O segundo (AVSyncRead) é responsável pela análise dos sinais audiovisuais

capturados. O terceiro (AVSyncAdjust) realiza modificações de sincronismo,

adiantando ou atrasando o áudio em relação ao vídeo. Todos utilizam para codificação

do áudio o formato PCM5 linear mono a 8 kHz / 8 bits e para codificação das imagens o

formato JPEG6 com 256 tons de cinza.

O fluxo de trabalho de um teste completo utilizando esses aplicativos consiste

em:

1. Gerar um sinal de teste apropriado com o aplicativo AVSyncGen

2. Transmitir este sinal de teste através de um servidor de streaming (e.g.

Darwin Streaming Server)

3. Receber o stream através de um software cliente (e.g. QuickTime Player)

5 PCM: Modulação por Código de Pulsos (Pulse-Code Modulation). 6 JPEG: Grupo de Especialistas Fográficos Reunidos (Joint Photographic Experts Group), em referência ao grupo que criou este formato.

Page 16: Avaliação de Sincronismo de Stream de Áudio e Vídeo

11

4. Gravar um pedaço da janela de exibição do software cliente utilizando

um software capaz de capturar em vídeo a tela do computador

juntamente com o áudio do sistema (e.g. Screenium)

5. Analisar a gravação realizada utilizando o aplicativo AVSyncRead

O aplicativo AVSyncAdjust pode ser utilizado para introduzir erros de

sincronismo para testar os outros dois aplicativos desenvolvidos ou para compensar a

latência de um sistema de streaming.

A seguir será apresentada uma descrição mais detalhada do funcionamento dos

três aplicativos desenvolvidos.

3.3.1 - AVSyncGen

Este aplicativo se destina a gerar sinais de teste compatíveis com diferentes

sistemas de streaming. Para tanto, o usuário é solicitado a selecionar a taxa de quadros

por segundo e as dimensões da imagem em pixels. A partir dessas informações, um

roteiro do Scilab gera uma sequência de imagens e um áudio7, de acordo com o descrito

no tópico 3.1 - : é gerado um sinal senoidal de sincronismo de 1/8 Hz, a partir do qual é

gerado o áudio (através de modulação AM8 com uma portadora em 1 kHz) e a

sequência de imagens (com a luminância determinada pelo sinal de sincronismo com

um offset constante).

Em seguida o usuário é solicitado a informar onde deseja salvar o sinal de teste a

ser gerado. A sequência de imagens e o áudio gerados pelo Scilab são unidos pelo

QuickTime e salvos em um arquivo de vídeo, com o sinal de teste repetido algumas

vezes9.

7 A sequência de imagens e o áudio são gerados em uma pasta temporária que é excluída no final da execução do aplicativo. 8 Utiliza-se modulação AM DSB-FC (Amplitude Modulation, Double-Sideband Full Carrier) com modulação a 100%. 9 O arquivo gerado possui 64 segundos, por conter oito repetições do sinal de teste (que possui 8 segundos).

Page 17: Avaliação de Sincronismo de Stream de Áudio e Vídeo

12

3.3.2 - AVSyncRead

Esse aplicativo se destina a analisar sinais de teste gravados através de sistemas

a serem avaliados quanto ao sincronismo de áudio e vídeo. Para tanto, o usuário é

solicitado a selecionar o arquivo que contém o sinal de teste a ser avaliado. Esse arquivo

aberto pelo QuickTime, cortado com a duração (9 segundos) um pouco superior à do

sinal de teste (8 segundos) e transformado em uma sequência de imagens e em um

áudio10. O QuickTime é utilizado ainda para descobrir a taxa de quadros por segundo do

arquivo analisado.

Em seguida um roteiro do Scilab recupera o sinal de sincronismo (senóide de 1/8

Hz) do áudio (através de demodulação AM: retificação e filtragem) e da sequência de

imagens (através da sequência de valores de luminância de um pixel arbitrário11

filtrada). A filtragem dos sinais de sincronismo do áudio e da sequência de imagens é

feita selecionando apenas um elemento das suas FFT12s correspondente a exatamente

1/8 Hz. Esses elementos são números complexos, com magnitude e fase. Dividir um

elemento pelo outro, equivale a dividir o módulo e subtrair a fase. Dessa forma a

diferença de fase (de -π a +π) pode ser mapeada no intervalo de diferenças de

sincronismo detectáveis (4 segundos atrasados a 4 segundos adiantados)13. A diferença

de sincronismo calculada é exibida em milissegundos para o usuário.

3.3.3 - AVSyncAdjust

Esse aplicativo se destina a adiantar ou atrasar o áudio em relação ao vídeo com

uma diferença estipulável. Para tanto o usuário é solicitado a selecionar um arquivo para

ajuste, além de informar a direção do ajuste ("adiantar" ou "atrasar" ou áudio em relação

ao vídeo) e o valor (diferença de sincronismo desejada, em milissegundos).

10 Idem à nota 7. 11 É utilizado apenas o pixel da extremidade superior esquerda da imagem. 12 FFT: Transformada Rápida de Fourier (Fast Fourier Transform) 13 (-π, +π] ==> (4 segundos atrasados, 4 segundos adiantados] Utiliza-se o vídeo como referência (portanto "atrasado" e "adiantado" aqui diz respeito ao áudio, em relação ao vídeo). Note-se que a detecção é periódica, portanto, por exemplo, 5 segundos atrasados equivale a 1 segundo adiantado.

Page 18: Avaliação de Sincronismo de Stream de Áudio e Vídeo

13

O QuickTime é utilizado para separar áudio e vídeo14. Em seguida esses

elementos são cortados no início ou no fim do arquivo15 pela diferença desejada e são

novamente reunidos. A diferença efetiva de sincronismo é controlada pelo corte

realizado no início do arquivo (o corte realizado no fim é apenas para não "sobrar"

áudio sem vídeo ou vídeo sem áudio). Quando o elemento cortado no início do arquivo

é o áudio (no caso de "adiantar" o áudio) a diferença cortada poderia ter precisão melhor

que 1 milissegundo, devido à elevada taxa de amostragem do áudio, porém o

QuickTime utiliza uma escala particular de tempo para esse tipo de edição que pode

limitar a precisão à ordem de 1 milissegundo. Quando o elemento cortado no início do

arquivo é o vídeo (no caso de "atrasar" o áudio), este é cortado apenas em quadros

inteiros, portanto a precisão do corte está limitada16 pela duração do quadro (inverso da

taxa de quadros por segundo). De qualquer forma, a diferença efetiva de sincronismo

(em milissegundos) obtida pelo processamento é informada ao usuário ao final da

execução do aplicativo.

14 O áudio e vídeo separados são salvos em uma pasta temporária que é excluída no final da execução do aplicativo. 15 Para adiantar o áudio este é cortado no início do arquivo e o vídeo no final; para atrasar o áudio o vídeo é cortado no início do arquivo e o áudio no final. 16 Uma alternativa, quando se deseja "atrasar" o áudio do sinal de teste com maior precisão é, tirando vantagem da sua periodicidade a cada 8 segundos, adiantá-lo em 8 segundos menos a diferença desejada (e.g. "adiantar" 7 segundos equivale a "atrasar" 1 segundo).

Page 19: Avaliação de Sincronismo de Stream de Áudio e Vídeo

14

Capítulo 4

Resultados Experimentais

4.1 - Teste 1: AVSyncGen + AVSyncRead

Esse teste se destina apenas a verificar que os dois aplicativos (AVSyncGen e

AVSyncRead) estão funcionando corretamente. Um arquivo de teste foi gerado pelo

AVSyncGen e analisado pelo AVSyncRead. A título de demonstração foram utilizadas

duas combinações de taxa de quadros por segundo e resolução da imagem: 15 quadros

por segundo com resolução de 320 x 240 (pixels) e 30 quadros por segundo com

resolução de 640 x 480 (pixels). Em ambos os casos o AVSyncRead relatou que o áudio

está sincronizado com o vídeo.

4.2 - Teste 2: AVSyncGen + AVSyncAdjust + AVSyncRead

Este teste se destina a verificar a acurácia dos três aplicativos (AVSyncGen,

AVSyncRead e AVSyncAdjust). Um arquivo de teste foi gerado pelo AVSyncGen,

processado pelo AVSyncAdjust e analisado pelo AVSyncRead.

Foi gerado pelo AVSyncGen um arquivo a 24 quadros por segundo com

resolução de 320 x 200 (pixels). No AVSyncAdjust foi selecionado adiantar o áudio

713 milissegundos em relação ao vídeo. O aplicativo informou ter adiantado o áudio

exatamente em 713 milissegundos. O AVSyncRead, por sua vez, informou que no

arquivo processado pelo AVSyncAdjust o áudio estava adiantado 714 milissegundos em

relação ao vídeo. A diferença encontrada está dentro do esperado, conforme explicado

no tópico 3.3.3 - .

Page 20: Avaliação de Sincronismo de Stream de Áudio e Vídeo

15

Foi também gerado pelo AVSyncGen um arquivo a 25 quadros por segundo

com resolução de 768 x 576 (pixels). No AVSyncAdjust foi selecionado atrasar o áudio

2064 milissegundos em relação ao vídeo. O aplicativo informou ter atrasado o áudio em

2080 milissegundos. A diferença encontrada está dentro do esperado, conforme

explicado no tópico 3.3.3 - . O AVSyncRead informou que no arquivo processado pelo

AVSyncAdjust o áudio estava atrasado exatamente 2080 milissegundos em relação ao

vídeo.

4.3 - Teste 3: AVSyncGen + QuickTime Player + Screenium +

AVSyncRead

Este teste se destina a verificar a acurácia da combinação do QuickTime Player

com o Screenium e a repetibilidade desse tipo de teste. Um arquivo de teste foi gerado

pelo AVSyncGen, reproduzido pelo QuickTime Player, o vídeo e o áudio do

computador foram capturados pelo Screenium e o resultado analisado pelo

AVSyncRead.

Foi gerado pelo AVSyncGen um arquivo a 15 quadros por segundo com

resolução de 320 x 200 (pixels). O arquivo gerado foi reproduzido pelo QuickTime

Player enquanto era capturado pelo Screenium17. O arquivo de captura do Screenium foi

analisado pelo AVSyncRead, que informou que o áudio estava atrasado 33

milissegundos em relação ao vídeo. Em seguida o mesmo arquivo gerado pelo

AVSyncGen foi reproduzido novamente pelo QuickTime Player e capturado novamente

pelo Screenium. A análise com o AVSyncRead do novo arquivo de captura do

Screenium informou o mesmo resultado: o áudio estava atrasado 33 milissegundos em

relação ao vídeo. Esse atraso, embora indesejável, e embora demonstre que o conjunto

QuickTime Player e Screenium não garante sincronismo perfeito de áudio e vídeo entre

reprodução e/ou captura, ainda está dentro de limites aceitáveis, de acordo com o

critério exposto no tópico 2.2 - .

17 Para as capturas realizadas com o Screenium não é necessário capturar a imagem inteira, já que apenas o pixel da extremidade superior esquerda é utilizado. Nos testes realizados foi capturada uma área de 32 x 32 pixels do centro da imagem. Também não é necessário capturar a duração do arquivo inteiro, basta capturar mais de 9 segundos ao longo da reprodução. É possível utilizar este software no modo de demonstração (gratuito) para esta finalidade, já que a limitação imposta é o limite de tempo de captura em 30 segundos. As condições necessárias para o arquivo a ser analisado estão explicadas no tópico 3.3.2 - .

Page 21: Avaliação de Sincronismo de Stream de Áudio e Vídeo

16

4.4 - Teste 4: AVSyncGen + AVSyncAdjust + QuickTime Player +

Screenium + AVSyncRead

Este teste se destina a reforçar o teste anterior, verificando mais uma vez a

acurácia da combinação do QuickTime Player com o Screenium e a repetibilidade desse

tipo de teste, agora introduzindo diferenças de sincronismo aleatórias.

O mesmo arquivo gerado pelo AVSyncGen para o teste anterior foi processado

pelo AVSyncAdjust gerando duas versões diferenciadas: uma com o áudio adiantado

3000 milissegundos e outra com o áudio atrasado 1000 milissegundos. As duas versões

foram reproduzidas pelo QuickTime Player e capturadas pelo Screenium. Os arquivos

gerados pelo Screenium foram analisados com o AVSyncRead, apresentando como

resultados, respectivamente, áudio adiantado 3038 milissegundos em relação ao vídeo e

áudio atrasado 942 milissegundos em relação ao vídeo. Portanto, em relação ao que

seria a análise dos arquivos gerados diretamente pelo AVSyncAdjust, no primeiro caso

o conjunto QuickTime Player e Screenium resultou em áudio adiantado 38

milissegundos em relação ao vídeo e no segundo em áudio adiantado 58 milissegundos

em relação ao vídeo. Essas diferenças já excedem os limites aceitáveis, de acordo com o

critério exposto no tópico 2.2 - . Além disso, esses resultados demonstram que a

repetibilidade também não pode ser garantida pelo conjunto QuickTime Player e

Screenium.

4.5 - Teste 5: AVSyncGen + Darwin Streaming Server + QuickTime

Player + Screenium + AVSyncRead

Este teste visa verificar a existência de problemas de sincronismo no sistema

Darwin Streaming Server.

Page 22: Avaliação de Sincronismo de Stream de Áudio e Vídeo

17

Foi utilizado o mesmo arquivo gerado pelo AVSyncGen para o Teste 3. Este

arquivo foi transmitido pelo Darwin Streaming Server, reproduzido pelo QuickTime

Player (através do endereço de loopback do mesmo computador) e capturado duas vezes

pelo Screenium. Os arquivos das capturas realizadas foram então analisados pelo

AVSyncRead. O primeiro apresentou como resultado o áudio adiantado 32

milissegundos em relação ao vídeo. O segundo apresentou como resultado o áudio

adiantado 5 milissegundos em relação ao vídeo. O áudio neste teste parece

sistematicamente mais adiantado em relação ao vídeo que no Teste 3. Esses resultados,

porém, estão dentro da variação dos resultados obtidos nos testes com o QuickTime

Player e o Screenium tornando o teste inconclusivo devido à grande incerteza dos testes

envolvendo o QuickTime Player e o Screenium.

4.6 - Teste 6: AVSyncGen + AVSyncAdjust + Darwin Streaming Server

+ QuickTime Player + Screenium + AVSyncRead

Este teste se destina a reforçar o teste anterior, verificando mais uma vez a

existência de problemas de sincronismo no sistema Darwin Streaming Server, agora

introduzindo diferenças de sincronismo aleatórias.

Foram utilizados os mesmos arquivos gerados pelo AVSyncGen e processados

pelo AVSyncAdjust para o Teste 4. Estes arquivos foram transmitidos pelo Darwin

Streaming Server, reproduzidos pelo QuickTime Player (através do endereço de

loopback do mesmo computador) e capturados pelo Screenium. Os arquivos das

capturas realizadas foram então analisados pelo AVSyncRead. O primeiro resultou no

áudio adiantado 3061 milissegundos em relação ao vídeo (61 milissegundos mais

adiantado do que deveria). O segundo resultou no áudio atrasado 955 milissegundos em

relação ao vídeo (45 milissegundos mais adiantado do que deveria). Mais uma vez,

esses resultados estão dentro da variação dos resultados obtidos nos testes com o

QuickTime Player e o Screenium, e além disso, enquanto no primeiro arquivo o áudio

foi mais adiantado neste teste que no Teste 4, no segundo arquivo o áudio foi atrasado

em relação ao Teste 4. Portanto, se existe algum problema de sincronismo com o

Darwin Streaming Server este não é detectável com esta metodologia devido à grande

incerteza dos testes envolvendo o QuickTime Player e o Screenium.

Page 23: Avaliação de Sincronismo de Stream de Áudio e Vídeo

18

Capítulo 5

Conclusão e Trabalhos Futuros

5.1 - Conclusão

É possível avaliar o sincronismo entre áudio e vídeo através de uma metodologia

diferenciada das soluções atualmente disponíveis no mercado. Um sinal de teste

desenvolvido para suportar elevadas taxas de compressão de áudio e vídeo pode se

prestar a essa finalidade, o que abre caminho para a avaliação de sincronismo em

streams de áudio e vídeo. Além disso, embora isso não tenha sido considerado neste

trabalho, esta metodologia pode também ser aplicada em banda base. Os aplicativos

desenvolvidos para geração do sinal de sincronismo, alteração de sincronismo e análise

de sincronismo funcionam com a precisão desejada. Porém a dependência de aplicativos

externos para complementar o sistema de teste completo limitou severamente a precisão

do conjunto.

Page 24: Avaliação de Sincronismo de Stream de Áudio e Vídeo

19

5.2 - Trabalhos Futuros

Do ponto de vista de velocidade de execução, interface com o usuário e suporte

multiplataforma os aplicativos desenvolvidos poderiam ter um ganho substancial se

fossem desenvolvidos sem a utilização de roteiros (scripts) interpretados, através de um

código compilável (por exemplo em C++, e talvez com a biblioteca wxWidgets para

prover uma interface multiplataforma), porém com um custo mais elevado de

desenvolvimento. Além disso, para melhorar o resultado do sistema proposto é

necessário desenvolver uma solução completa e autônoma, com garantia de precisão, o

que eventualmente pode não ser possível utilizando somente software (sobretudo no que

diz respeito à captura do áudio e vídeo do computador). Uma alternativa pode ser usar

uma solução híbrida, com software e hardware (por exemplo capturando uma saída de

vídeo e uma saída de áudio do computador com um hardware externo). Utilizar

hardware pode inclusive permitir a análise em tempo real. Mantendo-se apenas a

solução em software, outra alternativa, caso não seja possível obter precisão na captura

do áudio e vídeo do computador, seria usar um software cliente recebendo o stream que

fosse capaz de gravar o stream recebido para análise. Embora pareça uma solução mais

fácil e mais precisa, essa opção limitaria o suporte a diferentes codecs e mecanismos de

transporte e autenticação, além de não garantir o resultado final do usuário, que na

prática poderia utilizar outros softwares clientes, que também podem interferir no

sincronismo, para assistir a um stream.

Page 25: Avaliação de Sincronismo de Stream de Áudio e Vídeo

20

Bibliografia

[1] ATSC, Relative Timing of Sound and Vision for Broadcast Operations, Doc. IS-191, Washington, 2003. Disponível em: <http://www.atsc.org/standards/is_191.pdf>. Acesso em: 21 nov. 2009.

[2] OMNITEK, Measuring Audio & Video Delays Using OmniGen and OmniView. Disponível em: <http://www.omnitek.tv/images/stories/pdfs/support/avdelay1.pdf>. Acesso em: 21 nov. 2009.

[3] PIXEL, LipTracker Data Sheet 2009. Disponível em: <http://www.pixelinstruments.tv/pdf/Manuals/LipTracker%20Data%20Sheet%202009.pdf>. Acesso em: 21 nov. 2009.

[4] TEKTRONIX, Audio to Video Delay Corrector - AVDC100. Disponível em: <http://www2.tek.com/cmsreplive/psrep/13361/25W_13988_0_2008.05.15.16.22.39_13361_EN.pdf>. Acesso em: 21 nov. 2009.

Page 26: Avaliação de Sincronismo de Stream de Áudio e Vídeo

21

Apêndice 1

Código Fonte

/Applications/AVSyncGen.app/Contents/Resources/Scripts/main.scpt

try # cabeçalho set version to "Beta 30-Nov-2009" display dialog "Versao " & version & " Autor: Luiz Fausto de Souza Brito Pré-Requisitos: Scilab 5.1.1 alpha 1 SIVP 0.5.0 QuickTime Pro" buttons {"OK"} default button {"OK"} with title "AVSyncGen" with icon

POSIX file "/Applications/AVSyncGen.app/Contents/Resources/applet.icns" giving up after 5

# escolhe taxa de quadros por segundo do vídeo set fps to choose from list {60, 50, 30, 25, 24, 15} with title "AVSyncGen" with prompt

"Quantos quadros por segundo do vídeo?" default items {15} if fps = false then error end if # escolhe largura da imagem set w to text returned of (display dialog "Qual a largura da imagem (em pixels)?" default

answer "320" with title "AVSyncGen") as number # escolhe altura da imagem set h to text returned of (display dialog "Qual a altura da imagem (em pixels)?" default

answer "240" with title "AVSyncGen") as number # passa os parâmetros selecionados para o Scilab através da área de transferência set the clipboard to (fps & " " & w & " " & h) as text # executa o script do Scilab que gera imagens e som do shell script "/Applications/scilab-5.1.1-alpha-1.app/Contents/MacOS/bin/scilab -f

/Applications/AVSyncGen.app/Contents/Resources/AVSyncGen.sce" # escolhe onde salvar o sinal de teste set out_dir to POSIX file (POSIX path of (choose folder with prompt "Onde deseja salvar

o sinal de teste?" default location path to the desktop)) # configura os caminhos para pastas e arquivos utilizados set temp_dir to POSIX file ((POSIX path of the (path to the home folder)) & "temp/") set audio_file to POSIX file ((POSIX path of temp_dir) & "audio.wav") set frame_file to POSIX file ((POSIX path of temp_dir) & "frame001.jpg") set out_file to POSIX file ((POSIX path of out_dir) & "AVSync.mov") # remove sinal de teste anterior, caso exista tell application "Finder" if exists out_file then do shell script ("rm " & POSIX path of out_file) end if end tell tell application "QuickTime Player"

Page 27: Avaliação de Sincronismo de Stream de Áudio e Vídeo

22

# abre o QuickTime, caso não esteja aberto activate # fecha janelas eventualmente abertas close every window saving no # abre o arquivo de som, copia e fecha open audio_file tell document 1 select all copy close end tell # abre a sequência de imagens, insere o som, repete, salva e fecha open image sequence frame_file frames per second (fps as number) tell document 1 add repeat 3 times select all copy paste end repeat select all export to out_file as QuickTime movie using settings POSIX file

"/Applications/AVSyncGen.app/Contents/Resources/QTmovie.set"

close saving no end tell # fecha o QuickTime quit end tell # limpa a área de transferência set the clipboard to "" # remove a pasta temporária do shell script ("rm -r " & POSIX path of temp_dir) # exibe mensagem de conclusão display dialog "Geração de sinal de teste concluída com sucesso!" buttons {"OK"} default

button {"OK"} with title "AVSyncGen" with icon POSIX file "/Applications/AVSyncGen.app/Contents/Resources/applet.icns"

on error # exibe mensagem em caso de erro display dialog "Erro de processamento." buttons {"OK"} default button {"OK"} with title

"AVSyncGen" with icon stop end try

Page 28: Avaliação de Sincronismo de Stream de Áudio e Vídeo

23

/Applications/AVSyncGen.app/Contents/Resources/AVSyncGen.sce

//desativa exibicao dos comandos no console e a paginacao, limpa e aloca a memoria mode(-1); lines(0); clear; stacksize ('max'); //desprotege as funcoes primitivas funcprot(0); //carrega biblioteca SIVP exec('/Applications/scilab-5.1.1-alpha-1.app/Contents/MacOS/share/scilab/contrib/sivp-0.5.0/loader.sce'); //cabecalho version = 'Beta 30-Nov-2009'; disp(''); disp(''); disp('AVSyncGen'); disp('Geracao de Imagens e Som do Sinal de Teste de Sincronismo'); disp('Versao ' + version); disp('Autor: Luiz Fausto de Souza Brito'); disp(''); disp(''); //configura pasta temporaria if fileinfo('~/temp')==[] then mkdir '~/temp'; end cd ~/temp; unix('rm *'); //recebe informacoes de taxa de quadros por segundo, largura e altura da imagem v = evstr(clipboard("paste")); //cria som do sinal de teste de sincronismo disp('Criando som...'); d = 8; sr = 8000; t_aud = 0:1/sr:d-(1/sr); carrier = sin(2*%pi*1000*t_aud); sync_aud = 0.5+sin(2*%pi*t_aud/d)/2; audio = carrier.*sync_aud; wavwrite(audio,sr,8,'audio.wav'); disp('Concluido!'); disp(''); //cria imagens do sinal de teste de sincronismo disp('Criando imagens... 0 %'); t_vid = 0:1/v(1):d-(1/v(1)); sync_vid = interpln([t_aud;sync_aud],t_vid); k = 0; for i = 1:v(1)*d, j=100*i/(v(1)*d); if int(j/10)>(k/10) then k = int(j); disp('Criando imagens... '+string(k)+' %'); end im = sync_vid(i)*ones(v(3),v(2));

Page 29: Avaliação de Sincronismo de Stream de Áudio e Vídeo

24

name = sprintf('frame%03d.jpg',i); imwrite(im,name); end disp('Concluido!'); disp(''); //encerra quit;

Page 30: Avaliação de Sincronismo de Stream de Áudio e Vídeo

25

/Applications/AVSyncRead.app/Contents/Resources/Scripts/main.scpt

try # cabeçalho set version to "Beta 30-Nov-2009" display dialog "Versao " & version & " Autor: Luiz Fausto de Souza Brito Pré-Requisitos: Scilab 5.1.1 alpha 1 SIVP 0.5.0 QuickTime Pro" buttons {"OK"} default button {"OK"} with title "AVSyncRead" with icon

POSIX file "/Applications/AVSyncRead.app/Contents/Resources/applet.icns" giving up after 5

# escolhe o sinal de teste para análise set in_file to POSIX file (POSIX path of (choose file with prompt "Qual sinal de teste

deseja analisar?" of type {"MooV"} default location (path to the desktop) without invisibles))

# configura os caminhos para pastas e arquivos utilizados set temp_dir to POSIX file ((POSIX path of the (path to the home folder)) & "temp/") set audio_file to POSIX file ((POSIX path of temp_dir) & "audio.wav") set frame_file to POSIX file ((POSIX path of temp_dir) & "frame") # remove pasta temporária anterior, caso exista, e a (re)cria tell application "Finder" if exists temp_dir then do shell script ("rm -r " & POSIX path of temp_dir) end if make new folder at the (path to the home folder) with properties {name:"temp"} end tell tell application "QuickTime Player" # abre o QuickTime, caso não esteja aberto activate # fecha janelas eventualmente abertas close every window saving no # abre o arquivo de teste para análise, coloca a taxa de quadros por segundo na

área de transferência, reduz o arquivo ao tamanho necessário, exporta imagens e som e fecha

open in_file tell document 1 if (type of track 1) = "vide" then set track_n to 1 else set track_n to 2 end if set the clipboard to (round ((count frames of track track_n) / (duration / time

scale))) as text select at 0 to (9 * time scale) trim export to frame_file as image sequence using settings POSIX file

"/Applications/AVSyncRead.app/Contents/Resources/IMseq.set"

export to audio_file as wave using settings POSIX file "/Applications/AVSyncRead.app/Contents/Resources/wave.set"

close

Page 31: Avaliação de Sincronismo de Stream de Áudio e Vídeo

26

end tell # fecha o QuickTime quit end tell # executa o script do Scilab que analisa o sincronismo entre imagens e som do shell script "/Applications/scilab-5.1.1-alpha-1.app/Contents/MacOS/bin/scilab -f

/Applications/AVSyncRead.app/Contents/Resources/AVSyncRead.sce" # exibe mensagem de conclusão, com resultado recebido do Scilab pela área de

transferência display dialog ("Análise concluída com sucesso! O áudio está " & (the clipboard) & " em relação ao vídeo.") buttons {"OK"} default button

{"OK"} with title "AVSyncRead" with icon POSIX file "/Applications/AVSyncRead.app/Contents/Resources/applet.icns"

# limpa a área de transferência set the clipboard to "" on error # exibe mensagem em caso de erro display dialog "Erro de processamento." buttons {"OK"} default button {"OK"} with title

"AVSyncRead" with icon stop end try

Page 32: Avaliação de Sincronismo de Stream de Áudio e Vídeo

27

/Applications/AVSyncRead.app/Contents/Resources/AVSyncRead.sce

//desativa exibicao dos comandos no console e a paginacao, limpa e aloca a memoria mode(-1); lines(0); clear; stacksize ('max'); //desprotege as funcoes primitivas funcprot(0); //carrega biblioteca SIVP exec('/Applications/scilab-5.1.1-alpha-1.app/Contents/MacOS/share/scilab/contrib/sivp-0.5.0/loader.sce'); //cabecalho version = 'Beta 30-Nov-2009'; disp(''); disp(''); disp('AVSyncRead'); disp('Avaliacao de Sincronismo'); disp('Versao ' + version); disp('Autor: Luiz Fausto de Souza Brito'); disp(''); disp(''); //configura pasta temporaria cd ~/temp; //recebe informacao de taxa de quadros por segundo fps = evstr(clipboard("paste")) //analisa sincronismo do som disp('Analisando sincronismo do som...'); [audio,sr,bits] = wavread('audio.wav'); d = 8; audio = audio(1:sr*8); AUDIO = fft(abs(audio)); SYNC_AUD = AUDIO(2); disp('Concluido!'); disp(''); //analisa sincronismo das imagens disp('Analisando sincronismo das imagens... 0 %'); k = 0; for i = 1:fps*d, j=100*i/(fps*d); if int(j/10)>(k/10) then k = int(j); disp('Analisando sincronismo das imagens... '+string(k)+' %'); end name = sprintf('frame%03d.jpg',i); im = imread(name); sync_vid(i) = double(im(1,1)); end SYNC_VID = fft(sync_vid); SYNC_VID = SYNC_VID(2); disp('Concluido!');

Page 33: Avaliação de Sincronismo de Stream de Áudio e Vídeo

28

disp(''); //calcula a diferenca de sincronismo phi=atan(imag(SYNC_AUD/SYNC_VID),real(SYNC_AUD/SYNC_VID)); delay = round(4000*phi/%pi); if delay==0 then str = "sincronizado"; elseif delay>0 then str = "adiantado "+string(delay)+" ms"; else str = "atrasado "+string(-delay)+" ms"; end clipboard("copy",str); //exclui pasta temporaria cd ../; unix('rm -r ~/temp'); //encerra quit;

Page 34: Avaliação de Sincronismo de Stream de Áudio e Vídeo

29

/Applications/AVSyncAdjust.app/Contents/Resources/Scripts/main.scpt

try # cabeçalho set version to "Beta 30-Nov-2009" display dialog "Versao " & version & " Autor: Luiz Fausto de Souza Brito Pré-Requisitos: QuickTime Pro" buttons {"OK"} default button {"OK"} with title "AVSyncAdjust" with icon

POSIX file "/Applications/AVSyncAdjust.app/Contents/Resources/applet.icns" giving up after 5

# escolhe o arquivo para ajuste set in_file to POSIX file (POSIX path of (choose file with prompt "Qual arquivo deseja

ajustar?" of type {"MooV"} default location (path to the desktop) without invisibles))

# escolhe direção do ajuste set dir to choose from list {"adiantar", "atrasar"} with title "AVSyncAdjust" with prompt

"Deseja adiantar ou atrasar o áudio em relação ao vídeo?" default items {"adiantar"}

if dir = false then error end if # escolhe a diferença a ser ajustada set dif to text returned of (display dialog "Qual a diferença de tempo desejada (em ms)?"

default answer "0" with title "AVSyncAdjust") as number # configura os caminhos para pastas e arquivos utilizados set temp_dir to POSIX file ((POSIX path of the (path to the home folder)) & "temp/") set video_file to POSIX file ((POSIX path of temp_dir) & "video.mov") set audio_file to POSIX file ((POSIX path of temp_dir) & "audio.wav") # remove pasta temporária anterior, caso exista, e a (re)cria tell application "Finder" if exists temp_dir then do shell script ("rm -r " & POSIX path of temp_dir) end if make new folder at the (path to the home folder) with properties {name:"temp"} end tell # move o arquivo de entrada para um arquivo temporário do shell script ("mv " & POSIX path of in_file & " " & POSIX path of video_file) tell application "QuickTime Player" # abre o QuickTime, caso não esteja aberto activate # fecha janelas eventualmente abertas close every window saving no # abre o arquivo de vídeo para ajuste, exclui o som e corta open video_file tell document 1 export to audio_file as wave if (type of track 1) = "vide" then set track_n to 2 else set track_n to 1 end if delete track track_n

Page 35: Avaliação de Sincronismo de Stream de Áudio e Vídeo

30

set dur_vid to (1000 * duration / time scale) if dir = {"adiantar"} then select at 0 to (duration - ((round (dif * time scale / (1000 * (duration of

frame 2 of track 1)))) * (duration of frame 2 of track 1)))

else select at ((round (dif * time scale / (1000 * (duration of frame 2 of track

1)))) * (duration of frame 2 of track 1)) to duration

end if trim set (duration of frame 1 of track 1) to (duration of frame 2 of track 1) set dif_vid to (dur_vid - (1000 * duration / time scale)) end tell # abre o arquivo de som, exclui o vídeo, corta, copia e fecha open audio_file tell document 1 if (type of track 1) = "vide" then set track_n to 1 else set track_n to 2 end if delete track track_n set dur_aud to (1000 * duration / time scale) if dir = {"atrasar"} then select at 0 to (round (duration - (dif * time scale / 1000))) else select at (round (dif * time scale / 1000)) to duration end if trim set dif_aud to (dur_aud - (1000 * duration / time scale)) select all copy close end tell # insere o som no arquivo para ajuste, salva e fecha tell document 1 add select all export to in_file as QuickTime movie using settings POSIX file

"/Applications/AVSyncAdjust.app/Contents/Resources/QTmovie.set"

close end tell # fecha o QuickTime quit end tell if dir = {"adiantar"} then set dif_real to dif_aud else set dif_real to dif_vid end if # limpa a área de transferência set the clipboard to "" # remove pasta temporária do shell script ("rm -r " & POSIX path of temp_dir) # exibe mensagem de conclusão display dialog ("Correção concluída com sucesso! Processamento realizado: " & dir & " áudio em " & (round (dif_real)) & " ms.") buttons

Page 36: Avaliação de Sincronismo de Stream de Áudio e Vídeo

31

{"OK"} default button {"OK"} with title "AVSyncAdjust" with icon POSIX file "/Applications/AVSyncAdjust.app/Contents/Resources/applet.icns"

on error # exibe mensagem em caso de erro display dialog "Erro de processamento." buttons {"OK"} default button {"OK"} with title

"AVSyncAdjust" with icon stop end try