Pessoal, estou desenvolvendo um projeto em que criarei um video 3D side by Side a partir de uma sequencia de imagens capturadas de uma camera firewire. Nenhum processamento precisa ser feito em real time. Eu preciso pegar essa sequencia de imagens e montar um video com elas. Minha necessidade é trabalhar com imagens no formato mais cru possível (bmp, tiff, pgm, etc).
Queria montar um video com 30 frames por segundo. Alguém sabe como fazer??? Se possivel num formato de saida sem compressão.
Desde já mto obrigado.
É sim zerocall! o código abaixo faz isso, lembrando que você deve utilizar o conversor ffmpeg.exe, o código abaixo recebe imagens no formato “image1.png, image2.png…” e transforma em um vídeo .flv com uma taxa de frames de 30fps
package converter;
import java.io.File;
public class ConverterImagensEmVideo {
public static void main(String[] args) {
// recebe imagens no formato "image1.png, image2.png..." e transforma em um vídeo .flv com uma taxa de frames de 30fps
String command = "ffmpeg -f image2 -i midia/image%d.png -r 30 video.flv";
System.out.println("Conversor.main() " + command);
Process p = null;
try {
System.out.println(command);
p = Runtime.getRuntime().exec(command);
} catch (Exception e) {
System.out.println("Conversor.main() erro " + p);
System.out.println(e);
}
//System.out.println("Conversor.main() terminei " + i);
}
}
Como eu consigo executar o ffmpeg antes de emitir o comando?
E Como gerencio as pastas que onde devem ser criados e lidos os arquivos?
Vlw
Dica: em vez de usar um programa Java para iniciar o ffmpeg, é melhor você aprender a usar os parâmetros do ffmpeg e criar uma batch ou script para fazer as coisas exatamente do jeito que você quer. A parte de gerenciamento de pastas, por exemplo, é um dos parâmetros do ffmpeg.
Ache a documentação dos parâmetros de linha de comando na Internet.
Além disso, se aprender a usar direitinho o ffmpeg, pode usar um outro formato que não flv (por exemplo, pode gerar um mp4).
Mais esse script eu iria desenvolver em que?
Eu quero executar as funções de conversão e gerenciamento destes arquivos em um servidor web.Tem como desenvolver um script para executar essas bibliotecas que rode em um servidor?
Eu estou vendo algumas funções na documentação e percebi que realmente é só passar os parametros para o ffmpeg que ele executa o que queremos.
Você acha mais viável criar um script ou um bath?
Outra coisa entanglement, quando a imagem não sofrer nenhuma alteração significativa em um tempo x será enviado uma unica imagem com um log.txt informando o tempo que a imagem devera permanecer sendo exibida, tem como ler e trabalhar com log através de scripts ou bath?
Você sabe como eu consigo o código em C da função que recebe estes paramentro
ffmpeg -f image2 -i midia/image%d.png -r 30 video.flv
???
String command = "ffmpeg.exe -f image2 -i image%d.jpg video.flv";
System.out.println("Conversor.main() " + command);
Process p = null;
try {
System.out.println(command);
p = Runtime.getRuntime().exec("D:\\Convert\\"+command);
} catch (Exception e) {
System.out.println("Conversor.main() erro " + p);
System.out.println(e);
}
Quando executo este código ele não está criando o arquivo .flv porém se eu copio o mesmo comando para o cmd no diretório D:\Convert\ ele funciona normalmente. Alguma dica do que pode ser?
p = Runtime.getRuntime().exec(" cmd D:\\Convert\\"+command);
Tenta assim.
Executou mais não ta dando certo não.
Vou tentar utilizar o framework OpenCV esse ffmpeg não ta rolando a integração
Eu estou executando o código abaixo e não funciona mais também não da erro.
public class ConvertImageToVideo {
public static void main(String[] args) {
// recebe imagens no formato "image1.png, image2.png..." e transforma em um vídeo .flv
String dir = "c:\\Convert\\";
String comando = "ffmpeg.exe -f image2 -i image%d.jpg videoCriadoComJar.flv";
Process p = null;
try {
System.out.println("Comando executado:"+comando);
p = Runtime.getRuntime().exec(dir+comando);
JOptionPane.showMessageDialog(null, "Conversão realizada com Sucesso.\n Verifique o diretório C:/Convert");
} catch (Exception e) {
System.out.println("Conversor.main() erro " + p);
System.out.println(e);
}
Porém se eu executo o mesmo código no CMD funciona. Alguma idéia porque???
d:\Convert>ffmpeg.exe -f image2 -i image%d.jpg videoCriadoComJar.flv
ffmpeg version N-47062-g26c531c Copyright (c) 2000-2012 the FFmpeg developers
built on Nov 25 2012 12:23:20 with gcc 4.7.2 (GCC)
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 9.100 / 52. 9.100
libavcodec 54. 77.100 / 54. 77.100
libavformat 54. 37.100 / 54. 37.100
libavdevice 54. 3.100 / 54. 3.100
libavfilter 3. 23.102 / 3. 23.102
libswscale 2. 1.102 / 2. 1.102
libswresample 0. 17.101 / 0. 17.101
libpostproc 52. 2.100 / 52. 2.100
Input #0, image2, from 'image%d.jpg':
Duration: 00:00:02.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p, 320x240 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc
Output #0, flv, to 'videoCriadoComJar.flv':
Metadata:
encoder : Lavf54.37.100
Stream #0:0: Video: flv1 ([2][0][0][0] / 0x0002), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 1k tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> flv)
Press [q] to stop, [?] for help
frame= 50 fps=0.0 q=2.1 Lsize= 109kB time=00:00:02.00 bitrate= 445.4kbits/s
video:108kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.917149%
d:\Convert>