Ferramentas do usuário

Ferramentas do site


gravando_um_video_tutorial

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
gravando_um_video_tutorial [2016/04/06 14:00]
cartola
gravando_um_video_tutorial [2016/12/05 08:31] (atual)
cartola /* Legendas direto na tela */
Linha 48: Linha 48:
   #!/bin/bash   #!/bin/bash
      
-  # Script pra apresentar legendas na tela durante gravacao de video+  # EN: Script to show subtitles on screen while recording or presenting or 
 +  #     generate subtitle files. 
 +  # PT_BR: Script pra apresentar legendas na tela durante gravacao de video ou 
 +  #        gerar arquivos com legendas.
      
-  # Pega um arquivo texto, opcionalmente com 2 idiomas, e mostra cada um +  # EN: Takes a text file, optionally with 2 languages, and shows each in one 
-  # num canto da tela.+  #     screen edge (top/bottom) or writes subtitle files 
 +  # PT_BR: Pega um arquivo texto, opcionalmente com 2 idiomas, e mostra cada um 
 +  #        num canto da tela ou gera os arquivos de legendas.
      
-  # todo:+  # A Fazer: 
 +  #       - opcao de legenda titulo pra inicio e fim no meio da tela
   #       - testar mais idiomas: pt, en, fr, es   #       - testar mais idiomas: pt, en, fr, es
   #       - tratar tamanho para passar pra proxima linha   #       - tratar tamanho para passar pra proxima linha
 +  #       - publicar (github, sf, ...)
 +  #       - melhorar o inicio/fim de gravacao (expect?)
 +  #       - tirar dependencias externas: video_tela.sh
 +  #       - entender e tratar os n idiomas de entrada. Hoje ta hardcoded pra 2. Pode vir na primeira linha do arquivo, inclusive os nomes dos arq de saida
 +  # Feito:
   #       - mapear atalho de teclado pra passar pra proxima   #       - mapear atalho de teclado pra passar pra proxima
 +  #       - sair apos tocar ultima legenda
 +  #       - aguardar primeiro comando pra tocar primeira legenda
 +  #       - tratar interrupcao bruta
      
-  # Configuracoes +  #------------------------ 
-  # separador de idiomas +  # Requisitos | Requisites 
-  s="xxx+  # 
-  # tempo que as legendas ficam na tela (em segundos) +  # - ffmpeg 
-  d=4 +  # - osd_cat 
-  # tamanho da fonte a ser usada (achei 80 bom para fullHD)+  #       - Para gerar legendas direto no video. Se for gerar apenas arquivos srt nao eh preciso. 
 +  #       - To generate onscreen subtitles to be directly recorded. To generate srt files it's not necessary. 
 +  # - proxima_legenda.sh 
 +  #       - ter o programa 
 +  #       - configurar atalho de teclado no Window Manager (ex: xfce, Kde, Gnome, ...) para rodar proxima_legenda.sh 
 +   
 +  #------------------------------- 
 +  # Configuracoes | Configurations 
 +  #------------------------------- 
 +   
 +  # Valores padrao | Default values 
 +  # separador de idiomas | language separator 
 +  s="|
 +  # tempo que as legendas ficam na tela (em segundos) | subtitles time on screen 
 +  d=5 
 +  # tamanho da fonte a ser usada (achei 80 bom para Full HD) | font size (I found 80 good with Full HD)
   t=80   t=80
-  # tamanho da borda da legenda +  # tamanho da borda da legenda | subtitle border size 
-  b=3 +  b=2 
-  # cor da legenda (em ingles, teste ao mudar)+  # cor da legenda (em ingles, teste ao mudar) | font color
   c="yellow"   c="yellow"
-  # cor da borda da legenda (em ingles, teste ao mudar) +  # cor da borda da legenda (em ingles, teste ao mudar) | font border color 
-  cb="black"+  r="black
 +  # saida da legenda para tela (screen) ou arquivo (file) | defines output to "s"creen or "f"ile 
 +  o="file"
      
-  trap "rm -/tmp/mostra_legenda_pipe exit0 1 2 3 15+  # Obtendo valores personalizados | Getting customized settings 
 +  while getopts "b:d:f:t:c:r:s:o:" optdo 
 +    case $opt in 
 +      d) # altera o tempo da legenda na tela | change subtitle screen time 
 +        d="$OPTARG" ;; 
 +      b) # espessura da borda da legenda | sibtitle border thickness 
 +        b="$OPTARG" ;; 
 +      f) # nome do arquivo de legendas | subtitles file name 
 +        f="$OPTARG" ;; 
 +      t) # tamanho da borda | border size 
 +        t="$OPTARG" ;; 
 +      c) # cor da fonte | font color 
 +        c="$OPTARG" ;; 
 +      r) # cor da borda | border color 
 +        r="$OPTARG" ;; 
 +      s) # separador | separador 
 +        s="$OPTARG" ;; 
 +      o) # define saida na tela "screen" ou arquivo "file" | defines output to screen or file 
 +        o="$OPTARG" ;; 
 +    esac 
 +  done
      
-  if [ "$1" = "" ]; then+  trap "rm -f /tmp/mostra_legenda_pipe ; kill -2 $pid 2> /dev/null ; exit" 0 1 2 3 15 
 +   
 +  #---------------------------------- 
 +  # Programa principal | Main program 
 +  #---------------------------------- 
 +   
 +  if [ "$f" = "" ]; then
     echo     echo
-    echo "Uso: $0 <arquivo_legendas>"+    echo "Uso: $0 [-b <borda>] [-d tempo] -f <arquivo_legendas>"
     echo     echo
     echo "Separacao de idiomas com $s"     echo "Separacao de idiomas com $s"
Linha 84: Linha 141:
   fi   fi
      
-  readarray arq < $1 +  readarray arq < $f 
-  tam=$(wc -l $| cut -d\  -f 1)+  tam=$(wc -l $| cut -d\  -f 1)
      
-  # calculando posicao da linha de baixo+  # calculando posicao da linha de baixo | calculating bottom subtitle position
   offset=$(expr 5 \* $t)   offset=$(expr 5 \* $t)
      
Linha 93: Linha 150:
   rm -f /tmp/mostra_legenda_pipe   rm -f /tmp/mostra_legenda_pipe
   mkfifo /tmp/mostra_legenda_pipe   mkfifo /tmp/mostra_legenda_pipe
 +  
 +  # Aguarda o primeiro comando de disparo de legendas
 +  # Wait first subtitle command shot
 +  cat /tmp/mostra_legenda_pipe > /dev/null
 +  
 +  # inicia a gravacao | starts recording
 +  teste="$(\ls meuVideo-*avi 2> /dev/null | tail -1 | sed -e 's/meuVideo-//' -e 's/\.avi//')"
 +  if [ "$teste" = "" ]; then
 +    num=01
 +  else
 +    num=`expr $teste + 1 | awk '{printf"%02d",$1}'`
 +  fi
 +  ffmpeg -f x11grab -s 1920x1080 -r 12000/1001 -i :0.0 -q:v 2 meuVideo-$num.avi > /dev/null 2>&1 &
 +  pid="$!"
 +  
 +  if [ "$o" = "file" ]; then
 +    # guardando momento inicial para calcular tempos | saving initial moment to calculate times
 +    inicio="$( expr $(date +%s) )"
 +  fi
 +  
   while [ $i -lt $tam ]; do   while [ $i -lt $tam ]; do
     # pega texto(s)     # pega texto(s)
     t1="$(echo ${arq[$i]} | awk -F"$s" '{printf"%s",$1}')"     t1="$(echo ${arq[$i]} | awk -F"$s" '{printf"%s",$1}')"
     t2="$(echo ${arq[$i]} | awk -F"$s" '{printf"%s",$2}')"     t2="$(echo ${arq[$i]} | awk -F"$s" '{printf"%s",$2}')"
-    # coloca na tela +    # coloca na tela ou no arquivo | draws onscreen or write to file 
-    (echo "$t2" | osd_cat -A center -d $d -o 10 -f -bitstream-*-*-*-*-*-$t-*-*-*-*-*-iso8859-* -c $c -O $b -u $cb) & +    if [ "$o" = "screen" ]; then 
-    echo "$t1" | osd_cat -A center -p bottom -d $d -o -$offset -f -bitstream-*-*-*-*-*-$t-*-*-*-*-*-iso8859-* -c $c -O $b -u $cb+      (echo "$t2" | osd_cat -A center -d $d -o 10 -f -bitstream-*-*-*-*-*-$t-*-*-*-*-*-iso8859-* -c $c -O $b -u $r) & 
 +      echo "$t1" | osd_cat -A center -p bottom -d $d -o -$offset -f -bitstream-*-*-*-*-*-$t-*-*-*-*-*-iso8859-* -c $c -O $b -u $
 +    elif [ "$o" = "file" ]; then 
 +      agora="$(expr $(date +%s) - $inicio )" 
 +      echo $(date +%H:%M:%S,000 --date="@$(expr $agora - 75600)"
 +      (echo; echo $i; echo "$(date +%H:%M:%S,000 --date="@$(expr $agora - 75600)") --> $(date +%H:%M:%S,000 --date="@$(echo $agora + $d - 75600 | bc)")") | tee -a subtitle1.srt >> subtitle2.srt 
 +      echo "$t1" | tee -a subtitle1.srt 
 +      echo "$t2" >> subtitle2.srt 
 +      sleep $d; echo OK PARA PROXIMA 
 +    fi
     (( i++ ))     (( i++ ))
     # o "if" eh para pular a ultima espera depois de mostrar a ultima linha     # o "if" eh para pular a ultima espera depois de mostrar a ultima linha
Linha 106: Linha 192:
     fi     fi
   done   done
 +  
 +  kill -2 $pid 2> /dev/null
      
   rm -f /tmp/mostra_legenda_pipe   rm -f /tmp/mostra_legenda_pipe
gravando_um_video_tutorial.txt · Última modificação: 2016/12/05 08:31 por cartola