ATUALIZAÇÃO (junho de 2014) : o pacote bag_tools ROS inclui um nó chamado make_video.py que converte imagens dentro de um arquivo bag em um vídeo, semelhante ao fluxo de trabalho manual descrito neste artigo.
Pré requisitos
Os métodos descritos abaixo foram testados usando ROS Fuerte em uma máquina Ubuntu 12.04 de 64 bits. No entanto, deve funcionar bem em ROS Electric e / ou outras distros Linux.
- Um arquivo rosbag com um tópico de imagem dentro dele
- Ferramentas MJPEG [Ubuntu:
sudo apt-get install mjpegtools
] - ffmpeg [Ubuntu:
sudo apt-get install ffmpeg
] ou - mencoder [Ubuntu:
sudo apt-get install mencoder
] preferido
Extraia as imagens
- Crie uma pasta para as imagens extraídas e
cd
nela. - Executar
rosrun image_view extract_images _sec_per_frame:=0.01 image:=<IMAGETOPICINBAGFILE>
- Na outra janela do terminal, execute
rosbag play <BAGFILE>
- Uma sequência de imagens será criada.
Você pode verificar se o número de quadros criados é igual ao número de mensagens no arquivo .bag usando o rosbag info
comando. Se o número for menor, diminua o _sec_per_frame
valor.
Nota: As imagens foram nomeadas usando este padrão de estilo printf: frame%04d.jpg
Fazendo o arquivo de vídeo (Mencoder)
Determine o fps do arquivo rosbag. Use
rosbag info
e divida o número de mensagens para o tópico da imagem pela duração (em segundos). Este passo é muito importante.Use este
mencoder
comando na pasta em que você armazenou as imagens:
mencoder -nosound mf://*.jpg -mf w=<WIDTH>:h=<HEIGHT>:type=jpg:fps=<FPS> -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=<BITRATE> :mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o <OUTPUT>.avi
Para a <FPS>
utilização do número obtido no passo 1, para o <BITRATE>
check a seção de Notas abaixo.
Fazendo o arquivo de vídeo (FFMPEG)
Determine o FPS do arquivo rosbag. Use
rosbag info
e divida o número de mensagens para o tópico da imagem pela duração (em segundos). Este passo é muito importante.Use este comando de
ffmpeg
comando na pasta em que você armazenou as imagens:
ffmpeg -r <FPS> -b <BITRATE> -i frame%04d.jpg <OUTPUT>.avi
Para a <FPS>
utilização do número obtido no passo 1, para o <BITRATE>
check a seção de Notas abaixo.
Notas
O BITRATE determina a qualidade. Para ffmpeg use KiloBytes / Sec, para mencoder use KiloBits / Sec (por exemplo, 2400 Kbps vs 300 KBps). Números maiores que 1800 KBits geralmente funcionam bem.
O arquivo de vídeo resultante será um arquivo AVI codificado em MPEG4.