Suporte Broadcast - Verificando Legenda Encodada em Arquivos de Vídeo com AppleScript

De acordo com as leis de acessibilidade, os canais de comunicação audiovisual devem exibir uma quantidade mínima de conteúdo com closed caption (legenda). Geralmente, empresas de comunicação deste tipo possuem setores responsáveis por produzir e encodar essa legenda no material audiovisual que será exibido.

O objetivo deste projeto foi desenvolver um programa, que ao ser associado a um determinado diretório, verifica se o arquivo de vídeo que é enviado para este, possui legenda encodada. Caso um não possua um e-mail pode ser enviado para quem o enviou, ou para a equipe de acessibilidade.

O programa foi feito inicialmente para gerar um log em um arquivo txt ao invés de enviar um e-mail. Isso para poder demonstrar o seu objetivo e testar seu desempenho.

Abaixo segue o código desenvolvido.

on adding folder items to theAttachedFolder after receiving theNewItems
-- Get the name of the attached folder
tell application "Finder"
set theName to name of theAttachedFolder
-- Count the new items
set theCount to length of theNewItems
-- Display an alert indicating that the new items were received
activate
-- Test the Dropped Action
--display alert "Attention!" message (theCount & " new items were detected in folder " & (quoted form of theName) & "." as string)
repeat with anItem in theNewItems
 set fileName to anItem's name -- Getting the File Name
--display alert fileName -- Test the File Name
set source to "Users/administrator/Desktop/teste_alex/" & (fileName as string)
-- Replace the Empty Character to Call the Shell Script Correctly
set AppleScript's text item delimiters to the " " -- Search String
set the item_list to every text item of source
set AppleScript's text item delimiters to the "\\ " -- Replacement String
set source to the item_list as string
set AppleScript's text item delimiters to ""
try
set myList to (do shell script "mdls " & source)
on error
display alert (fileName as string)
end try
if myList contains "Closed Caption" then
try
-- Convert the File to a String
set theFile to (((path to desktop folder) as string) & "ccLog.txt") as string
-- Open the File for Writing
set theOpenedFile to open for access file theFile with write permission
-- Clear the File if Content Should be Overwritten
set overwriteExistingContent to false
if overwriteExistingContent is true then set eof of theOpenedFile to 0
-- Write the New Content to the File
set theText to ((current date) as string) & space & (fileName as string) & space & " - Contain CC" & return
write theText to theOpenedFile starting at eof
-- Close the File
close access theOpenedFile
on error
-- Close the file
try
close access file theFile
end try
end try
else
try
-- Convert the File to a String
set theFile to (((path to desktop folder) as string) & "ccLog.txt") as string
-- Open the File for Writing
set theOpenedFile to open for access file theFile with write permission
-- Clear the File if Content Should be Overwritten
set overwriteExistingContent to false
if overwriteExistingContent is true then set eof of theOpenedFile to 0
-- Write the New Content to the File
set theText to ((current date) as string) & space & (fileName as string) & space & " - Not Contain CC" & return
write theText to theOpenedFile starting at eof
-- Close the File
close access theOpenedFile
on error
-- Close the file
try
close access file theFile
end try
end try
end if
end repeat
end tell
end adding folder items to

Uma vez criado o programa, basta salvá-lo na pasta "Folder Action Scripts" que fica em "Library/Scripts". Depois clicar com o botão direito do mouse na pasta que deseja monitorar e em seguida na opção "Configuração das Ações de Pasta...".


Agora basta selecionar o script que foi salvo.


Com isso, associou-se o script criado a uma determinada ação da pasta, que no caso é a ação de se adicionar itens a esta. No meu exemplo o programa criado foi o watch_folder.scpt.

Agora vou explicar como funciona o programa. 

Quando itens são enviados para a pasta ao qual ele está associado, ele faz uma lista desses itens para depois verificar um a um. 

Em cada item ele executa no shell o comando mdls, pega a resposta do shell e verifica se possui a informação "Closed Caption". 

O comando mdls, serve para verificar informações mais detalhadas sobre os arquivos. Observe os exemplos abaixo:

 


Nos exemplos, foram executados o comando mdls sobre dois arquivos de vídeo, um com legenda e outro sem. Observe que a informação sobre "Closed Caption" em Codecs. É justamente essa informação que o programa verifica.

Se 30 arquivos forem enviados para o diretório, o programa irá executar esse comando em um por um e informar qual possui e qual não possui legenda. 


O programa não irá detectar legendas inseridas incorretamente, mas ao detectar o simples fato de possuir o não legenda pode auxiliar muito o trabalho logístico na programação, além de ajudar a propagar mais conteúdo com acessibilidade.

O programa fica ocioso até que a pasta ao qual está vinculado seja usada, não consumindo memória ou processamento. Testes de desempenho, no Mac que usei, mostrou que ele pode consumir até 7% do processador por um intervalo de tempo irrisório, visto que ele processa apenas texto. Isso o torna uma ferramenta viável para monitorar diretórios nos exibidores da programação.

Comentários