Existem muitas opções de softwares para gravação de vídeos da tela e que servem para a criação de um tutorial.
O CamStudio é um conhecido software livre destinado a este propósito.
Usando ffmpeg para gravar a tela
ffmpeg -f x11grab -s 1920x1080 -r 30 -i :0.0 -q:v 2 meuVideo.avi
Você pode mudar algumas coisas aí. A resolução (1920×1080) a qualidade do vídeo (2 a 31, sendo 2 a melhor) ou o formato do vídeo, bastando alterar a extensão. Aqui não funcionou bem com mp4, que eu preferiria. Há também inúmeras outras opções do ffmpeg que podem ser usadas. Esse comando não grava o áudio, pra isso em geral eu uso o Audacity separadamente, mas também é possível gravar o áudio direto.
Usando audacity ou o próprio ffmpeg para o áudio
Outros softwares para captura da tela:
Usando esses scripts é possível já colocar legenda na tela pra gravação ao vivo.
É necessário configurar um atalho de teclado que ainda não esteja sendo usado pelo seu gerenciador de janelas (Window Manager). No meu caso, por exemplo, usei o XFCE e configurei o atalho Ctrl+Shift+U para chamar o primeiro script. Ele vai passar a informação ao segundo script para que seja mostrada a próxima legenda.
É necessário instalar a ferramenta “osd_cat”. No meu linux aqui ela vem com o pacote xosd-bin.
Primeiro script (a ser associado ao atalho de teclado do WM):
#!/bin/sh # Script que atua junto com o "mostra_legendas.sh" # Deve ser mapeado junto a um atalho de teclado do gerenciador de janelas. # Por exemplo, no XFCE va na configuracao de teclado e associe um atalho # a este comando. Toda vez que o atalho for acionado a proxima legenda aparece. echo > /tmp/mostra_legenda_pipe
Segundo script, a ser executado chamando o arquivo txt com as legendas em até 2 idiomas:
#!/bin/bash # 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. # EN: Takes a text file, optionally with 2 languages, and shows each in one # 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. # A Fazer: # - opcao de legenda titulo pra inicio e fim no meio da tela # - testar mais idiomas: pt, en, fr, es # - 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 # - sair apos tocar ultima legenda # - aguardar primeiro comando pra tocar primeira legenda # - tratar interrupcao bruta #------------------------ # Requisitos | Requisites # # - ffmpeg # - osd_cat # - 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 # tamanho da borda da legenda | subtitle border size b=2 # cor da legenda (em ingles, teste ao mudar) | font color c="yellow" # cor da borda da legenda (em ingles, teste ao mudar) | font border color r="black" # saida da legenda para tela (screen) ou arquivo (file) | defines output to "s"creen or "f"ile o="file" # Obtendo valores personalizados | Getting customized settings while getopts "b:d:f:t:c:r:s:o:" opt; do 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 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 "Uso: $0 [-b <borda>] [-d tempo] -f <arquivo_legendas>" echo echo "Separacao de idiomas com $s" echo "Uma legenda (varios idiomas) por linha" echo exit fi readarray arq < $f tam=$(wc -l $f | cut -d\ -f 1) # calculando posicao da linha de baixo | calculating bottom subtitle position offset=$(expr 5 \* $t) i=0 rm -f /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 # pega texto(s) t1="$(echo ${arq[$i]} | awk -F"$s" '{printf"%s",$1}')" t2="$(echo ${arq[$i]} | awk -F"$s" '{printf"%s",$2}')" # coloca na tela ou no arquivo | draws onscreen or write to file if [ "$o" = "screen" ]; then (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 $r 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++ )) # o "if" eh para pular a ultima espera depois de mostrar a ultima linha if [ $i -lt $tam ]; then cat /tmp/mostra_legenda_pipe > /dev/null fi done kill -2 $pid 2> /dev/null rm -f /tmp/mostra_legenda_pipe
Instruções completas tomando como exemplo um Linux com XFCE:
Veja o tutorial de uso dos scripts em vídeo feito usando ele e os passos descritos acima!
https://www.youtube.com/watch?v=EdJYHQw-VW0
E aqui um tutorial feito com ele. Neste eu coloquei outro atalho de teclado para colocar um fundo preto na tela com o gthumb, fazendo títulos de entrada e saída do vídeo.