Professional Documents
Culture Documents
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.
AGRADECIMENTO
A Deus, verdadeira fonte de toda sabedoria. minha esposa, por todo suporte que me concede. Aos meus pais, pela educao que me deram. TV Globo, por financiar esse curso, em particular pelos meus gestores que me confiaram essa oportunidade. UFRJ pelo comprometimento com a educao, 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 orientao desse trabalho. Ao Ricardo Fontenelle, pesquisador da TV Globo, pela sua disponibilidade e capacidade tcnica para discutir solues para os problemas tecnolgicos 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 contribuio na minha educao. A todos que, de alguma forma, me ajudaram a chegar at aqui, o meu muito obrigado.
ii
RESUMO
Falta de sincronismo entre udio e vdeo um problema com muitas causas e poucas solues disponveis, particularmente para a avaliao de sistemas de transmisso por streaming. Uma metodologia simples, utilizando um sinal de teste resistente s perdas provocadas por diferentes tipos de compresso, pode ser uma soluo efetiva para esse tipo de avaliao objetiva, como demonstrado neste trabalho. Palavras-Chave: Sincronismo, udio, Vdeo, Streaming.
iii
Sumrio
Captulo 1
Introduo ................................................................................................. 1 1.1 -
1.2 -
1.3 -
1.4 -
1.5 -
1.6 -
Tema .................................................................................................................. 1
Delimitao ....................................................................................................... 1
Justificativa........................................................................................................ 2
Objetivos ........................................................................................................... 2
Metodologia....................................................................................................... 2
Descrio ........................................................................................................... 3
Captulo 2 Medio de Sincronismo em Banda Base ............................................... 4 2.1 - 2.2 - 2.3 - 2.4 - 2.5 - 2.6 - 2.7 - 2.8 - 2.9 - Fontes de problemas .......................................................................................... 4 Tolerncia de Sincronismo ................................................................................ 5 Avaliao Subjetiva........................................................................................... 5 Medio usando contadores .............................................................................. 6 Medio usando transies rpidas ................................................................... 6 Medio usando contadores e transies rpidas .............................................. 6 Medio usando "marca d'gua" ....................................................................... 7 Medio usando movimento labial.................................................................... 7 Dificuldades da aplicao a diferentes tipos de compresso............................. 7
Captulo 3 Medio de Sincronismo em Streams ..................................................... 8 3.1 - Suportando diferentes compresses .................................................................. 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 Captulo 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 Captulo 5 Concluso e Trabalhos Futuros............................................................. 18 5.1 - Concluso ........................................................................................................ 18 5.2 - Trabalhos Futuros............................................................................................ 19 iv
Bibliografia .................................................................................................................... 20 Apndice 1 Cdigo 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
Captulo 1 Introduo
1.1 - Tema
O presente trabalho prope uma metodologia para avaliar o sincronismo entre udio e vdeo em um stream. A justificativa do problema envolve um pouco de teoria de processamento e streaming de udio e vdeo, e a soluo proposta ser desenvolvida em software.
1.2 - Delimitao
Este trabalho contempla a avaliao de sincronismo relativo (latncia) entre udio e vdeo em um stream atravs da transmisso de um sinal teste. No atende avaliao de sincronismo entre udio e vdeo de um sinal qualquer sendo transmitido. No garante, portanto, que outro sinal audiovisual transmitido tenha a mesma relao de sincronismo, pois esta pode variar na fonte do sinal. Em diferentes sistemas de reproduo tambm podero existir diferenas decorrentes, por exemplo, de algum eventual processamento anterior exibio. A correo das eventuais diferenas de sincronismo medidas tambm no considerada neste trabalho.
1.3 - Justificativa
Por diversas razes udio e vdeo podem perder sincronismo em uma transmisso, seja por processamentos com latncias diferenciadas seja por diferenas nas respectivas cadeias de distribuio. Na transmisso convencional de televiso este um problema que pode causar muito incmodo ao espectador, porm existem algumas solues comerciais para avaliao objetiva de eventuais problemas. Na transmisso pela internet, pela multiplicidade de opes e sistemas utilizados, no existem ferramentas disponveis para essa avaliao objetiva e a avaliao subjetiva dificultada pela qualidade em geral inferior do vdeo. Alm disso, existem mais variveis envolvidas no sistema que podem gerar problemas de sincronismo, como o processo de codificao, o transporte pela rede e o processo de decodificao. Embora se considere que o espectador desse tipo de mdia mais tolerante a problemas de qualidade em geral, essa uma situao que est sendo modificada pela crescente disponibilidade de banda de internet para o usurio final no ambiente domstico.
1.4 - Objetivos
Pretende-se neste trabalho desenvolver uma ferramenta, capaz de avaliar eventuais diferenas de sincronismo entre udio e vdeo, que se aplique a sistemas de distribuio pela internet, independente das caractersticas particulares do sistema escolhido, tais como protocolos, codecs, hardwares e softwares.
1.5 - Metodologia
Por analogia aos sistemas de avaliao equivalentes disponveis para udio e vdeo em banda base, prope-se uma variao aplicvel a sistemas com diferentes tipos de compresso e interface diferenciada, no caso um computador. Sero ainda apresentados os resultados de testes prticos realizados utilizando a ferramenta desenvolvida.
1.6 - Descrio
No captulo 2 apresentada uma breve explicao sobre os problemas de sincronismo e alguns sistemas de avaliao disponveis para udio e vdeo em banda base, alm da dificuldade de aplic-los a sistemas de distribuio pela internet com diferentes tipos de compresso. O captulo 3 apresenta o desenvolvimento de ferramentas, baseadas em uma nova proposta metodolgica de avaliao de sincronismo, que se adequem s caractersticas dos sistemas de interesse, no caso sistemas de streaming. Os resultados de testes prticos realizados com as ferramentas desenvolvidas so apresentados no captulo 4. No captulo 5 so apresentadas as concluses e propostas de trabalhos futuros.
ATSC: Comit de Sistemas Avanados de Televiso (Advanced Television Systems Committee), grupo que estabeleceu os padres de Televiso Digital dos Estados Unidos da Amrica.
Dois sistemas experimentais utilizando essa tcnica foram desenvolvidos pelo Departamento de Manuteno 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 proprietrio (pelo Pesquisador Ricardo Fontenelle). 3 Dois sistemas testados pelo Departamento de Manuteno da TV Globo Rio utilizavam essa tcnica: o Pro-Bel HD Valid8 utiliza color-bars com tom, piscando um quadro em black sncrono 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 vdeo e mute no udio, piscando um quadro de vdeo qualquer sncrono com um tom no udio.
A compresso de um sinal de vdeo pode ser feita em dois domnios: espacial e temporal. Quanto ao domnio espacial o sinal mais simples para ser codificado aquele que possui todos os pixels iguais. Isso tambm simplifica a anlise do vdeo, j que bastaria analisar um nico pixel qualquer, e j o reduz de bidimensional a unidimensional. Ainda melhor, para a representao codificada, se o sinal de vdeo no contiver cores, j que em geral so alocados mais bits para a codificao de luminncia do que para a crominncia. Quanto ao domnio temporal, um sinal com transies lentas (acompanhando uma senide de baixa frequncia) mais simples de codificar que um vdeo com transies rpidas. Mesmo com uma taxa de quadros por segundo muito baixa (e.g. 10 quadros por segundo), como o que pode acontecer nos vdeos para internet, essa amostragem ainda estar muito acima do dobro da frequncia da frequncia da senide (e.g. 1/8 Hz), portanto o sinal de teste estar sempre suficientemente amostrado para sua perfeita recuperao. O sinal de vdeo, pode ser portanto, uma variao senoidal da luminncia (com um offset constante, j que no existe luminncia negativa). A compresso de udio pode envolver filtros passa-altas e passa-baixas. Na pior das hipteses, pode-se supor uma filtragem equivalente telefnica (aproximadamente de 300 Hz a 3 kHz). Alm disso, devido filtragem psicoacstica do mascaramento, requantizao do sinal no domnio da frequncia, e s distores de amplitude e fase dos filtros, sinais multifrequenciais complexos e de amplo espectro podem no ser adequadamente codificados. necessrio, portanto, mapear o sinal de sincronismo para a faixa mais linear possvel da resposta em frequncia (em torno de 1 kHz) com espectro mais simples e estreito possvel. Pode-se utilizar para isso uma modulao AM4 com portadora em 1 kHz. Como o sinal de sincronismo deve possuir frequncia muito baixa (e.g. 1/8 Hz) o espectro resultante ser muito estreito, alm de simples. Adicionalmente a demodulao AM tambm simples de ser implementada, o que facilita a recuperao do sinal de sincronismo do udio.
4
AVSyncAdjust. O primeiro (AVSyncGen) responsvel pela gerao do sinal de teste utilizado. O segundo (AVSyncRead) responsvel pela anlise dos sinais audiovisuais capturados. O terceiro (AVSyncAdjust) realiza modificaes de sincronismo, adiantando ou atrasando o udio em relao ao vdeo. Todos utilizam para codificao do udio o formato PCM5 linear mono a 8 kHz / 8 bits e para codificao 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 atravs de um servidor de streaming (e.g. Darwin Streaming Server) 3. Receber o stream atravs de um software cliente (e.g. QuickTime Player)
5 6
PCM: Modulao por Cdigo de Pulsos (Pulse-Code Modulation). JPEG: Grupo de Especialistas Fogrficos Reunidos (Joint Photographic Experts Group), em referncia ao grupo que criou este formato.
10
4. Gravar um pedao da janela de exibio do software cliente utilizando um software capaz de capturar em vdeo a tela do computador juntamente com o udio do sistema (e.g. Screenium) 5. Analisar a gravao 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 latncia de um sistema de streaming. A seguir ser apresentada uma descrio mais detalhada do funcionamento dos trs aplicativos desenvolvidos. 3.3.1 - AVSyncGen Este aplicativo se destina a gerar sinais de teste compatveis com diferentes sistemas de streaming. Para tanto, o usurio solicitado a selecionar a taxa de quadros por segundo e as dimenses da imagem em pixels. A partir dessas informaes, um roteiro do Scilab gera uma sequncia de imagens e um udio7, de acordo com o descrito no tpico 3.1 - : gerado um sinal senoidal de sincronismo de 1/8 Hz, a partir do qual gerado o udio (atravs de modulao AM8 com uma portadora em 1 kHz) e a sequncia de imagens (com a luminncia determinada pelo sinal de sincronismo com um offset constante). Em seguida o usurio solicitado a informar onde deseja salvar o sinal de teste a ser gerado. A sequncia de imagens e o udio gerados pelo Scilab so unidos pelo QuickTime e salvos em um arquivo de vdeo, com o sinal de teste repetido algumas vezes9.
7
A sequncia de imagens e o udio so gerados em uma pasta temporria que excluda no final da execuo do aplicativo. 8 Utiliza-se modulao AM DSB-FC (Amplitude Modulation, Double-Sideband Full Carrier) com modulao a 100%. 9 O arquivo gerado possui 64 segundos, por conter oito repeties do sinal de teste (que possui 8 segundos).
11
3.3.2 - AVSyncRead Esse aplicativo se destina a analisar sinais de teste gravados atravs de sistemas a serem avaliados quanto ao sincronismo de udio e vdeo. Para tanto, o usurio solicitado a selecionar o arquivo que contm o sinal de teste a ser avaliado. Esse arquivo aberto pelo QuickTime, cortado com a durao (9 segundos) um pouco superior do sinal de teste (8 segundos) e transformado em uma sequncia 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 (senide de 1/8 Hz) do udio (atravs de demodulao AM: retificao e filtragem) e da sequncia de imagens (atravs da sequncia de valores de luminncia de um pixel arbitrrio11 filtrada). A filtragem dos sinais de sincronismo do udio e da sequncia de imagens feita selecionando apenas um elemento das suas FFT12s correspondente a exatamente 1/8 Hz. Esses elementos so nmeros complexos, com magnitude e fase. Dividir um elemento pelo outro, equivale a dividir o mdulo e subtrair a fase. Dessa forma a diferena de fase (de - a +) pode ser mapeada no intervalo de diferenas de sincronismo detectveis (4 segundos atrasados a 4 segundos adiantados)13. A diferena de sincronismo calculada exibida em milissegundos para o usurio. 3.3.3 - AVSyncAdjust Esse aplicativo se destina a adiantar ou atrasar o udio em relao ao vdeo com uma diferena estipulvel. Para tanto o usurio solicitado a selecionar um arquivo para ajuste, alm de informar a direo do ajuste ("adiantar" ou "atrasar" ou udio em relao ao vdeo) e o valor (diferena de sincronismo desejada, em milissegundos).
10 11
Idem nota 7. utilizado apenas o pixel da extremidade superior esquerda da imagem. 12 FFT: Transformada Rpida de Fourier (Fast Fourier Transform) 13 (-, +] ==> (4 segundos atrasados, 4 segundos adiantados] Utiliza-se o vdeo como referncia (portanto "atrasado" e "adiantado" aqui diz respeito ao udio, em relao ao vdeo). Note-se que a deteco peridica, portanto, por exemplo, 5 segundos atrasados equivale a 1 segundo adiantado.
12
O QuickTime utilizado para separar udio e vdeo14. Em seguida esses elementos so cortados no incio ou no fim do arquivo15 pela diferena desejada e so novamente reunidos. A diferena efetiva de sincronismo controlada pelo corte realizado no incio do arquivo (o corte realizado no fim apenas para no "sobrar" udio sem vdeo ou vdeo sem udio). Quando o elemento cortado no incio do arquivo o udio (no caso de "adiantar" o udio) a diferena cortada poderia ter preciso melhor que 1 milissegundo, devido elevada taxa de amostragem do udio, porm o QuickTime utiliza uma escala particular de tempo para esse tipo de edio que pode limitar a preciso ordem de 1 milissegundo. Quando o elemento cortado no incio do arquivo o vdeo (no caso de "atrasar" o udio), este cortado apenas em quadros inteiros, portanto a preciso do corte est limitada16 pela durao do quadro (inverso da taxa de quadros por segundo). De qualquer forma, a diferena efetiva de sincronismo (em milissegundos) obtida pelo processamento informada ao usurio ao final da execuo do aplicativo.
14
O udio e vdeo separados so salvos em uma pasta temporria que excluda no final da execuo do aplicativo. 15 Para adiantar o udio este cortado no incio do arquivo e o vdeo no final; para atrasar o udio o vdeo cortado no incio do arquivo e o udio no final. 16 Uma alternativa, quando se deseja "atrasar" o udio do sinal de teste com maior preciso , tirando vantagem da sua periodicidade a cada 8 segundos, adiant-lo em 8 segundos menos a diferena desejada (e.g. "adiantar" 7 segundos equivale a "atrasar" 1 segundo).
13
14
Foi tambm gerado pelo AVSyncGen um arquivo a 25 quadros por segundo com resoluo de 768 x 576 (pixels). No AVSyncAdjust foi selecionado atrasar o udio 2064 milissegundos em relao ao vdeo. O aplicativo informou ter atrasado o udio em 2080 milissegundos. A diferena encontrada est dentro do esperado, conforme explicado no tpico 3.3.3 - . O AVSyncRead informou que no arquivo processado pelo AVSyncAdjust o udio estava atrasado exatamente 2080 milissegundos em relao ao vdeo.
Para as capturas realizadas com o Screenium no necessrio 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. Tambm no necessrio capturar a durao do arquivo inteiro, basta capturar mais de 9 segundos ao longo da reproduo. possvel utilizar este software no modo de demonstrao (gratuito) para esta finalidade, j que a limitao imposta o limite de tempo de captura em 30 segundos. As condies necessrias para o arquivo a ser analisado esto explicadas no tpico 3.3.2 - .
15
4.5 - Teste 5: AVSyncGen + Darwin Streaming Server + QuickTime Player + Screenium + AVSyncRead
Este teste visa verificar a existncia de problemas de sincronismo no sistema Darwin Streaming Server.
16
Foi utilizado o mesmo arquivo gerado pelo AVSyncGen para o Teste 3. Este arquivo foi transmitido pelo Darwin Streaming Server, reproduzido pelo QuickTime Player (atravs do endereo de loopback do mesmo computador) e capturado duas vezes pelo Screenium. Os arquivos das capturas realizadas foram ento analisados pelo AVSyncRead. O primeiro apresentou como resultado o udio adiantado 32 milissegundos em relao ao vdeo. O segundo apresentou como resultado o udio adiantado 5 milissegundos em relao ao vdeo. O udio neste teste parece sistematicamente mais adiantado em relao ao vdeo que no Teste 3. Esses resultados, porm, esto dentro da variao 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 reforar o teste anterior, verificando mais uma vez a existncia de problemas de sincronismo no sistema Darwin Streaming Server, agora introduzindo diferenas de sincronismo aleatrias. 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 (atravs do endereo de loopback do mesmo computador) e capturados pelo Screenium. Os arquivos das capturas realizadas foram ento analisados pelo AVSyncRead. O primeiro resultou no udio adiantado 3061 milissegundos em relao ao vdeo (61 milissegundos mais adiantado do que deveria). O segundo resultou no udio atrasado 955 milissegundos em relao ao vdeo (45 milissegundos mais adiantado do que deveria). Mais uma vez, esses resultados esto dentro da variao dos resultados obtidos nos testes com o QuickTime Player e o Screenium, e alm disso, enquanto no primeiro arquivo o udio foi mais adiantado neste teste que no Teste 4, no segundo arquivo o udio foi atrasado em relao ao Teste 4. Portanto, se existe algum problema de sincronismo com o Darwin Streaming Server este no detectvel com esta metodologia devido grande incerteza dos testes envolvendo o QuickTime Player e o Screenium.
17
18
19
Bibliografia
[1] ATSC, Relative Timing of Sound and Vision for Broadcast Operations, Doc. IS191, Washington, 2003. Disponvel em: <http://www.atsc.org/standards/is_191.pdf>. Acesso em: 21 nov. 2009. [2] OMNITEK, Measuring Audio & Video Delays Using OmniGen and OmniView. Disponvel em: <http://www.omnitek.tv/images/stories/pdfs/support/avdelay1.pdf>. Acesso em: 21 nov. 2009. [3] PIXEL, LipTracker Data Sheet 2009. Disponvel em: <http://www.pixelinstruments.tv/pdf/Manuals/LipTracker%20Data%20Sheet%202 009.pdf>. Acesso em: 21 nov. 2009. [4] TEKTRONIX, Audio to Video Delay Corrector - AVDC100. Disponvel em: <http://www2.tek.com/cmsreplive/psrep/13361/25W_13988_0_2008.05.15.16.22.3 9_13361_EN.pdf>. Acesso em: 21 nov. 2009.
20
21
# abre o QuickTime, caso no 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 sequncia 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/QTm ovie.set" close saving no end tell # fecha o QuickTime quit end tell # limpa a rea de transferncia set the clipboard to "" # remove a pasta temporria do shell script ("rm -r " & POSIX path of temp_dir) # exibe mensagem de concluso display dialog "Gerao de sinal de teste concluda 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
22
/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/sivp0.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));
23
24
/Applications/AVSyncRead.app/Contents/Resources/Scripts/main.scpt
try # cabealho 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 anlise 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 temporria 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 no esteja aberto activate # fecha janelas eventualmente abertas close every window saving no # abre o arquivo de teste para anlise, coloca a taxa de quadros por segundo na rea de transferncia, reduz o arquivo ao tamanho necessrio, 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/IMs eq.set" export to audio_file as wave using settings POSIX file "/Applications/AVSyncRead.app/Contents/Resources/wav e.set" close
25
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 concluso, com resultado recebido do Scilab pela rea de transferncia display dialog ("Anlise concluda com sucesso! O udio est " & (the clipboard) & " em relao ao vdeo.") buttons {"OK"} default button {"OK"} with title "AVSyncRead" with icon POSIX file "/Applications/AVSyncRead.app/Contents/Resources/applet.icns" # limpa a rea de transferncia 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
26
/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/sivp0.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!');
27
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;
28
/Applications/AVSyncAdjust.app/Contents/Resources/Scripts/main.scpt
try # cabealho 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 direo do ajuste set dir to choose from list {"adiantar", "atrasar"} with title "AVSyncAdjust" with prompt "Deseja adiantar ou atrasar o udio em relao ao vdeo?" default items {"adiantar"} if dir = false then error end if # escolhe a diferena a ser ajustada set dif to text returned of (display dialog "Qual a diferena 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 temporria 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 temporrio do shell script ("mv " & POSIX path of in_file & " " & POSIX path of video_file) tell application "QuickTime Player" # abre o QuickTime, caso no esteja aberto activate # fecha janelas eventualmente abertas close every window saving no # abre o arquivo de vdeo 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
29
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 vdeo, 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/QT movie.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 transferncia set the clipboard to "" # remove pasta temporria do shell script ("rm -r " & POSIX path of temp_dir) # exibe mensagem de concluso display dialog ("Correo concluda com sucesso! Processamento realizado: " & dir & " udio em " & (round (dif_real)) & " ms.") buttons
30
{"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
31