Curso Raspberry Pi – #11 – Filmes, Slowmotion, Timelapse

Anteriormente fizemos os primeiros exercícios de tirar fotos e enviar imagens pela rede. Claro, a câmara conectada ao Raspberry Pi tem muito mais possibilidades. Desta vez, vamos verificar como o Raspberry lida com a gravação de filmes: lapso de tempo e câmara lenta.

Gravando filmes no Raspberry Pi com raspivid

Usamos o programa raspistill para tirar fotos. O Raspivid será útil para filmes. Primeiro, vamos emitir um comando que irá gravar um filme com um tamanho padrão de 5 segundos:

raspivid -n -w 1920 -h 1080 -cd MJPEG -o test.mpg

Indo da esquerda para a esquerda:  -n desligou a pré-visualização. A resolução da imagem é definida usando as opções -w e -h. O arquivo de saída é dado após -o. Um novo recurso é a opção -cd, que permite definir o método de compactação de imagem. Nós escolhemos o MJPEG para este teste. Se precisar, a imagem pode ser rodada usando o parâmetro -rot.

Nesse caso, também há uma alteração importante na operação do parâmetro -t. No raspivid, ele determina depois que a foto será tirada. Agora define o tamanho do filme (em milissegundos). O valor padrão é 5000 ms ou 5 segundos.

Como antes, o arquivo final foi salvo no diretório em que lançamos o programa:

Reproduzindo filmes gravados no Raspberry Pi

Se tivermos um monitor conectado ao Raspberry ou se conectar através do VNC, podemos reproduzir o filme no omxplayer do programa padrão ou no popular mplayer (ele deve estar pré-instalado).

Se nos conectarmos remotamente via SSH , então como antes, o filme pode ser feito download num PC via WinSCP. No entanto, há uma grande probabilidade de que os filmes salvos em mpg/mjepg não sejam reproduzidos corretamente. Normalmente, um quadro será exibido em todo o comprimento do material (uma foto). Para poder reproduzir esses arquivos corretamente num PC com Windows, deve instalar os codecs.

Depois de instalar o codec, o filme será iniciado corretamente no Windows. Filme de exemplo:

Alterando o codec para h.264

Se não definirmos o parâmetro correspondente ao método de compactação, os materiais serão gravados por padrão usando o codec h.264, que é muito mais eficiente:

raspivid -n -w 640 -h 480 -o test_2.h264

Depois de fazer download num PC, o filme deve definitivamente ocupar espaço, e a sua qualidade será tão boa quanto antes:

Filmes em câmera lenta (slowmotion)

Também vale lembrar o parâmetro -fps, que permite alterar o número de frames com os quais os vídeos são gravados. Na resolução VGA, podemos gravar 90 FPS, o que permite obter vídeos mais lentos (câmara lenta).

raspivid -n -w 640 -h 480 -o test.h264 -fps 90

Um exemplo:

Esta resolução a 90 FPS pode ser útil em muitos projetos!

Como gravar um filme com lapso de tempo no Raspberry Pi?

Ao usar o raspivid anteriormente conhecido, pode criar facilmente filmes com lapso de tempo (timelaps). O princípio é muito simples. Nós tiramos fotos a cada certo tempo (por exemplo, 5 segundos) e depois as combinamos num filme. Dobrando centenas/milhares de fotos num filme, obtemos um material impressionante que mostra como as nuvens se movem no céu ou como um objeto é criado numa impressora 3D.

Começamos por criar um novo diretório, por exemplo, timelapse:

mkdir timelapse

Criamos uma pasta porque a gravação de filmes com lapso de tempo requer centenas e, muitas vezes, milhares de fotos, é melhor não mexer na sua pasta pessoal. Vá para a nova pasta e execute o raspistill com os seguintes parâmetros:

cd timelapse/
raspistill -t 300000 -tl 2000 -o image%04d.jpg -w 1280 -h 720 -rot 180

Indo da esquerda. O parâmetro -t especifica por quanto tempo queremos tirar fotos, aqui 300.000 ms ou 300 segundos, o que dá exatamente 5 minutos. O próximo parâmetro -tl especifica o intervalo (quanto tempo queremos tirar uma nova foto), aqui 2000 ms, ou seja, uma nova foto será tirada a cada 2 segundos. O próximo parâmetro -o é, obviamente, o nome do arquivo com a data adicionada.

avconv -i image%04d.jpg -r 10 -vcodec libx264 -vf scale=1280:720 timelapse.mp4

Indo da esquerda. Com o parâmetro -i, selecionamos o material de entrada (as nossas fotos). Use -r para especificar o número de frames por segundo. Neste exemplo, inserimos 10, o que significa que, por um segundo de nosso filme, haverá 10 fotos tiradas anteriormente. Os próximos parâmetros definem o codec, a resolução e o nome do vídeo criado. A geração de material pode demorar muito tempo:

Abaixo pode ver um filme com lapso de tempo, que levou algumas horas para ser gravado:

O comprimento do material resultante pode ser estimado com base em relacionamentos simples:

número de fotos tiradas=comprimento/intervalo
duração do filme=número de fotos tiradas/filme FPS

Tirando fotos com lapso de tempo “no fundo”

Este método de tirar fotos para filmes em time-lapse foi bloqueado por Raspberry Pi. Felizmente, também podemos realizar operações em segundo plano. Para este propósito, usaremos o operador &, que permite executar comandos em segundo plano. Basta adicionar o caractere & precedido por um espaço no final:

raspistill -t 300000 -tl 2000 -o image%04d.jpg -w 1280 -h 720 -rot 180 &

Podemos visualizar a atividade em segundo plano, emitindo o comando jobs. Por sua vez, o retorno a esta tarefa será possível usando fg. Então, se necessário, será capaz de completar a tarefa usando CTRL + C.