Projeto Caixa Preta • Intercalando vídeos

Precisava construir um vídeo alternando entre duas gravações produzidas por percursos completamente diferentes. De um lado, uma Axis P1354 gravando diretamente em H.264, a 1280×720 e 30 fps, registando o que acontecia sobre a mesa da instalação. Do outro, o sinal de vídeo proveniente de um DVD Player, manipulado sobre essa mesma mesa, capturado por um Doctor Video e gravado em 720×480. Mais do que juntar duas resoluções diferentes, interessava-me colocar em diálogo dois pontos de vista sobre o mesmo acontecimento: um mostrando os gestos, os dispositivos e o espaço da instalação; o outro mostrando a imagem que circulava entre esses dispositivos.

O primeiro passo foi preparar os dois ficheiros, recortando apenas os trechos que seriam utilizados na montagem.

ffmpeg -ss 00:00:30 -t 120 -i axis.mkv \
-c copy axis_trim.mkv
ffmpeg -ss 00:00:55 -t 120 -i doctor.mp4 \
-c copy doctor_trim.mp4

Em seguida, normalizei os parâmetros para que ambos pudessem ser utilizados no mesmo projeto. O Doctor Video gravava em 720×480 e apresentava uma taxa de quadros algo irregular, por isso optei por convertê-lo para 30 fps e inseri-lo num quadro de 1280×720 através de um pad, preservando a resolução original da imagem em vez de a ampliar artificialmente.

ffmpeg -i doctor_trim.mp4 \
-vf "fps=30,pad=1280:720:(ow-iw)/2:(oh-ih)/2:black" \
-c:v libx264 -crf 20 -preset slow \
-c:a aac -b:a 192k \
doctor_720p30.mp4

Embora a gravação da Axis já estivesse em 1280×720 e 30 fps, também a recodifiquei para que os dois ficheiros partilhassem os mesmos parâmetros de vídeo e áudio.

ffmpeg -i axis_trim.mkv \
-vf "scale=1280:720,fps=30" \
-c:v libx264 -crf 20 -preset slow \
-c:a aac -b:a 192k \
axis_720p30.mp4

A montagem foi feita alternando segmentos de cinco segundos de cada vídeo. Em vez de criar dezenas de pequenos ficheiros intermédios, utilizei o filtro trim para selecionar cada trecho e o filtro concat para reuni-los numa única sequência.

À medida que a descrição da montagem crescia, tornou-se evidente que já não fazia sentido mantê-la diretamente na linha de comandos. Foi então que descobri a opção -filter_complex_script, que permite guardar toda a lógica do filtro num ficheiro de texto separado. O ficheiro alterna.flt passou a conter toda a sequência de cortes e concatenações.

Um pequeno trecho desse ficheiro tem este aspeto:

[0:v]trim=start=0:end=5,setpts=PTS-STARTPTS[v0];
[0:a]atrim=start=0:end=5,asetpts=PTS-STARTPTS[a0];
[1:v]trim=start=0:end=5,setpts=PTS-STARTPTS[v1];
[1:a]atrim=start=0:end=5,asetpts=PTS-STARTPTS[a1];
...
[v0][a0][v1][a1]...[v23][a23]
concat=n=24:v=1:a=1[v][a]

Com isso, a execução da montagem reduziu-se a um comando bastante simples:

ffmpeg \
-i axis_720p30.mp4 \
-i doctor_720p30.mp4 \
-filter_complex_script alterna.flt \
-map "[v]" \
-map "[a]" \
-c:v libx264 \
-crf 20 \
-c:a aac \
alternado.mp4

O resultado é um vídeo em que a imagem alterna ritmicamente entre dois fluxos distintos. A gravação da Axis documenta o que acontece sobre a mesa da instalação, enquanto o Doctor Video preserva o próprio conteúdo do circuito de vídeo manipulado durante a performance. A montagem permite que o espectador oscile continuamente entre observar o dispositivo em funcionamento e observar a imagem produzida por esse mesmo dispositivo.

Mais uma vez, chamou-me a atenção como o FFmpeg acaba por ocupar um lugar improvável no meu processo artístico. Embora seja visto sobretudo como uma ferramenta de conversão e transcodificação, revela-se igualmente útil como instrumento de montagem, experimentação e composição.

Projeto Caixa Preta • Testes de câmaras

Para realizar um teste de gravação de vídeo da câmera Axis 210, inicialmente foi necessário descobrir qual endereço IP ela estava utilizando na rede local. Para isso, foi utilizada o arp-scan em um computador com Linux MX, executando uma varredura na rede local para identificar os dispositivos conectados. Entre os dispositivos encontrados, foi possível localizar a câmera Axis.

Após acessar a interface web da câmera através do navegador, foram consultadas as configurações de vídeo e streaming numa página que dá exemplos de HTML para fazer o embed do vídeo numa página da web.

A partir dessas informações, foi possível identificar o endereço RTSP utilizado pela câmera para disponibilizar o fluxo de vídeo. Nesta versão da Axis 210, o fluxo é disponibilizado através do endereço:

rtsp://192.168.1.65:554/mpeg4/media.amp

Com o endereço RTSP identificado, foi utilizado o FFmpeg para capturar e gravar o fluxo de vídeo diretamente em um arquivo MP4. O comando executado foi:

ffmpeg -i rtsp://user:password@192.168.1.65:554/mpeg4/media.amp -c copy recording.mp4

Nesse comando, o parâmetro especifica a fonte de vídeo RTSP, enquanto instrui o FFmpeg a copiar o fluxo de vídeo recebido sem recodificação, reduzindo o uso de processamento e preservando a qualidade original do stream. Usei Ctrl +C no terminal para interromper a gravação 24 segundos depois. O resultado foi a criação do arquivo, contendo a gravação do vídeo capturado pela câmera através da rede local, esse arquivo foi enviado ao Youtube e está disponível aqui:

São apenas 20 quadros por segundo e resolução 640×480 pixels, mas o flicker do LED vermelho ficou lindo!!!

Vou usar essa câmara para gravar o que vai ocorrer em uma escultura que estou criando, a idéia é usar algo bem simples e leve, que possa estar em qualquer computador, o ffmpeg me veio a mente porque é meu software preferido!