Utilitário para acertar legendas de filmes baixados
Enviado: 14 Nov 2014 17:30
Como tenho certeza de que muitos dos colegas baixam filmes pela internet e algumas vezes, como eu, não encontram as legendas em português para o filme baixado.
Algumas legendas demoram para serem disponibilizadas e outras nunca aparecem no OpenSubtitles (melhor site de legendas).
O que fazer então ?
a) baixar a legenda em inglês (essa sempre existe)
b) incumbir o Google Tradutor de vertê-la para o português (não sai aquela maravilha de tradução, mas quebra o galho)
c) aí vem a pior parte: o tradutor bagunça a linha de sincronismo onde está a hora, minuto, segundo e milésimo de segundo que a legenda inicia e também onde ela termina
Assim, desenvolvi o pequeno utilitário que funciona tanto em Clipper como em Xharbour, para sanar a tediosa tarefa de corrigir as centenas de linhas que possam estar erradas, pois se
estiverem, o filme não utiliza a legenda pois descobre o erro e não a carrega.
O fonte é auto-explicativo, mas se houver dúvidas, é só "gritar", ...
Algumas legendas demoram para serem disponibilizadas e outras nunca aparecem no OpenSubtitles (melhor site de legendas).
O que fazer então ?
a) baixar a legenda em inglês (essa sempre existe)
b) incumbir o Google Tradutor de vertê-la para o português (não sai aquela maravilha de tradução, mas quebra o galho)
c) aí vem a pior parte: o tradutor bagunça a linha de sincronismo onde está a hora, minuto, segundo e milésimo de segundo que a legenda inicia e também onde ela termina
Assim, desenvolvi o pequeno utilitário que funciona tanto em Clipper como em Xharbour, para sanar a tediosa tarefa de corrigir as centenas de linhas que possam estar erradas, pois se
estiverem, o filme não utiliza a legenda pois descobre o erro e não a carrega.
O fonte é auto-explicativo, mas se houver dúvidas, é só "gritar", ...
Código: Selecionar todos
#include "inkey.ch"
****************************************************************************
* Finalidade: acertar a linha de sincronismo que nos arquivos de legenda *
* (SRT) tem de ter o seguinte formato: *
* HH:MM:SS,LLL --> HH:MM:SS,LLL onde: *
* HH = hora, MM = minuto, SS = segundo e LLL = milesimos seg *
* *
* Obs: se houver algum erro nessas linhas, a legenda pode nao ser carrega-*
* da junto com o arquivo de video (AVI, MKV, MP4, etc.) *
* Arquivo a ser utilizado = LEGENDAS.DBF com somente 1 campo alfa de nome *
* CAMPO1 com 150 bytes *
****************************************************************************
local telin := savescreen()
local xentrada := xsaida := space(40)
local saida, aa := chr(13) + chr(10)
local lenc, xtempo, xcampo, xcampo2, pos_seta
local inicio_hora, inicio_minu, inicio_segu, inicio_mile
local finali_hora, finali_minu, finali_segu, finali_mile
setcolor("w+/b,g+/n,,,bg+/b")
clear
do while .t.
@ 08,15 say "Acertar arquivos de legenda - Linha de sincronismo"
@ 10,5 say "Arquivo - Entrada: " get xentrada valid ! empty(xentrada)
read
if lastkey() == K_ESC
restscreen(,,,,telin)
return
endif
if ! file(xentrada)
@ 24,0 say " Arquivo de entrada nÆo existe. "
loop
endif
@ 11,5 say "Arquivo - Sa¡da..: " get xsaida valid ! empty(xsaida) .and. ;
alltrim(xsaida) <> alltrim(xentrada)
read
exit
enddo
xentrada := alltrim(xentrada)
xsaida := alltrim(xsaida)
saida := fcreate(xsaida)
@ 24,0
if (saida != -1)
@ 24,0 say "Aguarde! Gerando o Arquivo Remessa "
inkey(2)
@ 24,0
else
@ 24,0 say "Erro ao abrir o arquivo de remessa. Tecle <ENTER>"
inkey(0)
restscreen(,,,,telin)
return
endif
select 0
use legendas alias leg exclusive
if lastrec() > 0
zap
endif
append from &xentrada. sdf
go top
do while ! eof()
lenc := len(alltrim(campo1))
if lenc < 28 // n£mero da linha
fwrite(saida,(alltrim(campo1) + aa ))
dbskip()
loop
endif
pos_seta := at("->",campo1)
if pos_seta == 0 // linha do texto
fwrite(saida,(alltrim(campo1) + aa ))
dbskip()
loop
endif
if len(alltrim(campo1)) > 30 // nÆo ‚ linha de texto
fwrite(saida,(alltrim(campo1) + aa ))
dbskip()
loop
endif
xtempo := substr(campo1,1,30) // linha do sincronismo
xcampo := ""
for nx := 1 to 30
if substr(xtempo,nx,1) $ "1234567890"
xcampo += substr(xtempo,nx,1)
endif
next
inicio_hora := substr(xcampo, 1,2)
inicio_minu := substr(xcampo, 3,2)
inicio_segu := substr(xcampo, 5,2)
inicio_mile := substr(xcampo, 7,3)
finali_hora := substr(xcampo,10,2)
finali_minu := substr(xcampo,12,2)
finali_segu := substr(xcampo,14,2)
finali_mile := substr(xcampo,16,3)
xcampo2 := inicio_hora + ":" + inicio_minu + ":" + inicio_segu + "," + inicio_mile
xcampo2 += " --> "
xcampo2 += finali_hora + ":" + finali_minu + ":" + finali_segu + "," + finali_mile
fwrite(saida,(alltrim(xcampo2) + aa ))
dbskip()
enddo
fwrite(saida,chr(26))
close leg
fclose(saida)
clear
restscreen(,,,,telin)
return