Estamos usando a API do xuggle para criar um arquivo MP4 com duração variável entre as imagens. A seguir está o código de amostra
final com.xuggle.mediatool.IMediaWriter writer = com.xuggle.mediatool.ToolFactory.makeWriter("C:\\Media\\img\\output.mp4");
writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_MPEG4, 3840, 2060);
String[] imgFiles = FileUtil.getFiles("chapter1");// List of image filenames
long nextFrameTime = 0;
for(int i=0;i<imgFiles.length();i++)
{
String fileName = imgFiles[i];
long delay = ImgUtil.getDelay(fileName);
nextFrameTime += (delay * 1000);
videoImage = ImageIO.read(new File("C:\\Media\\img\\img\\"+fileName));
writer.encodeVideo(0, videoImage,nextFrameTime, TimeUnit.MICROSECONDS);
}
writer.close();
O vídeo gerado é reproduzido sem problemas e os atrasos entre cada imagem são esperados, no entanto, quando pausamos o vídeo, ele aparece em pausa, mas passa para a próxima imagem.
Por exemplo, quando pausamos o vídeo em 2 minutos, ele passa para o próximo slide após alguns segundos e não pausará permanentemente.
Existe alguma maneira eu posso re-codificar o vídeo usando o ffmpeg para corrigir esse problema?
A seguir está a informação do ffprobe:
> ffprobe output.mp4 -show_entries frame=key_frame,pkt_pts_time -select_streams v -of compact=p=0
key_frame=1|pkt_pts_time=0.000000
key_frame=0|pkt_pts_time=30.039994
key_frame=0|pkt_pts_time=122.095995
key_frame=0|pkt_pts_time=215.875990
key_frame=0|pkt_pts_time=298.108995
key_frame=0|pkt_pts_time=377.050996
key_frame=0|pkt_pts_time=457.769986
key_frame=0|pkt_pts_time=549.354986
key_frame=0|pkt_pts_time=632.162997
key_frame=0|pkt_pts_time=711.653986
key_frame=0|pkt_pts_time=800.103990
key_frame=0|pkt_pts_time=882.286000
key_frame=1|pkt_pts_time=963.317998
key_frame=0|pkt_pts_time=1051.639994
key_frame=0|pkt_pts_time=1134.159991
key_frame=0|pkt_pts_time=1217.589990
key_frame=0|pkt_pts_time=1302.699992
key_frame=0|pkt_pts_time=1382.899992
key_frame=0|pkt_pts_time=1471.059998
key_frame=0|pkt_pts_time=1556.299992
key_frame=0|pkt_pts_time=1635.629999
key_frame=0|pkt_pts_time=1720.739986
key_frame=0|pkt_pts_time=1817.729992
key_frame=0|pkt_pts_time=1902.109987
key_frame=1|pkt_pts_time=1993.459998
key_frame=0|pkt_pts_time=2090.628992
key_frame=0|pkt_pts_time=2174.539986
key_frame=0|pkt_pts_time=2269.279988
key_frame=0|pkt_pts_time=2357.029999
key_frame=0|pkt_pts_time=2452.429999
key_frame=0|pkt_pts_time=2532.179995
key_frame=0|pkt_pts_time=2614.539986
key_frame=0|pkt_pts_time=2690.719997
key_frame=0|pkt_pts_time=2777.419989
key_frame=0|pkt_pts_time=2868.429999
key_frame=0|pkt_pts_time=2961.759991
key_frame=1|pkt_pts_time=3044.649989
key_frame=0|pkt_pts_time=3134.589990
key_frame=0|pkt_pts_time=3220.479988
key_frame=0|pkt_pts_time=3300.079988
key_frame=0|pkt_pts_time=3379.829999
key_frame=0|pkt_pts_time=3457.699992
key_frame=0|pkt_pts_time=3542.619989
key_frame=0|pkt_pts_time=3623.209995
key_frame=0|pkt_pts_time=3720.569986
key_frame=0|pkt_pts_time=3798.439994
key_frame=0|pkt_pts_time=3878.949996
key_frame=0|pkt_pts_time=3968.969986
key_frame=1|pkt_pts_time=4064.179995