1 votes

La vidéo MPEG ne se met pas en pause à l'heure précise

Nous utilisons l'API de xuggle pour créer un fichier MP4 avec une durée variable entre les images. Voici l'exemple de code

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();

La vidéo générée est lue sans problème et les délais entre chaque image sont conformes aux attentes. Cependant, lorsque nous mettons la vidéo en pause, il semble qu'elle soit en pause mais qu'elle passe à l'image suivante.

Par exemple, lorsque nous mettons la vidéo en pause à la deuxième minute, elle passe à la diapositive suivante après quelques secondes et ne s'arrête pas définitivement.

Y a-t-il un moyen de ré-encoder la vidéo en utilisant ffmpeg pour résoudre ce problème ?

Voici les informations de 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

1voto

ram4sof Points 21

Mon problème est résolu, j'ai ré-encodé avec l'outil avcon (j'ai perdu beaucoup de temps à essayer avec ffmpeg). Le seul problème est que l'encodage prend environ 40 minutes pour une vidéo de 1,50 minutes.

avconv -i output.mp4 -vcodec libx264 -crf 27 -preset veryfast -c:a copy -s 3840x2060 fixed_keyframe_output.mp4

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X