Você pode usar o AviSynth .
É um script de comando incrivelmente poderoso para processamento in-line de vídeos, e é grátis. Se o seu vídeo ainda não estiver no formato .avi, você pode usar a função DirectShowSource ("myOriginalVideo.xyz") do AviSynth, caso contrário use AviSource ("myOriginalVideo.avi").
Como funciona:
O AviSynth é uma linguagem de script. Você escreve seus comandos em um arquivo de texto simples que tem um tipo de arquivo .avs (por exemplo, "myNewVideo.avs"), e o próprio script se torna um (novo) playable .avi.
Como a saída do arquivo .avs é totalmente descompactada (vídeo e áudio), você precisará alimentar "myNewVidwo.avs" em qualquer codificador de vídeo que desejar; recompressá-lo. O VirtualDub é muito eficaz e direto para a etapa de recodificação (o VirtualDub é gratuito).
Aqui está um script AviSynth que fará o trabalho. Ele coloca H: MM: SS.nnn no canto superior esquerdo da tela.
#BEGIN-------------------------------------------------------------------------
global xPos = 10
global yPos = 10
global subsize = 20
global subfont = "Arial Narrow"
#------------------------------------------------------------------------------
function SubtitleTime( obj )
{
obj = ScriptClip( obj, "Subtitle(
\ String( chr(32) )
\ + String( RightStr( String( ((int(current_frame/Framerate)/60)/60) ), 2 ) )
\ + String( chr(58) )
\ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate)/60)-(((int(current_frame/Framerate)/60)/60)*60) ) ), 2 ) )
\ + String( chr(58) )
\ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate))-(((int(current_frame/Framerate))/60)*60) ) ), 2 ) )
\ + MidStr( String( (current_frame/Framerate) - (int(current_frame/Framerate)) ), 2, 4 )
\ , font=subfont, size=subsize, x=xPos, y=yPos)
\ ")
return obj
}
#------------------------------------------------------------------------------
DirectshowSource("myOriginalVideo.avi").SubtitleTime
#END---------------------------------------------------------------------------