【发布时间】:2014-10-13 16:56:45
【问题描述】:
我正在尝试使用 xuggler 从 BufferedImages 列表中制作视频。我按照this教程,代码运行良好。
但是,当我将示例中的工作代码合并到我的代码中时,我得到了一个 RuntimeException:
java.lang.RuntimeException: 无法写入数据包:com.xuggle.xuggler.IPacket@46575264[complete:true;dts:67915;pts:67915;size:24201;key:false;flags:0;stream index :0;持续时间:1;位置:-1;时基:1/65535;] 在 com.xuggle.mediatool.MediaWriter.writePacket(MediaWriter.java:1215) 在 com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:767) 在 com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:810) 在 s3.S3CompositeUtil.generateVideo(S3CompositeUtil.java:247) 在 s3.S3CompositeUtil.main(S3CompositeUtil.java:349)
Xuggler 文档提到: 调用者必须确保 IMediaData.getTimeStamp()(如果指定)始终单调递增,否则将引发 RuntimeException。
但我认为我在生成视频时所花费的时间在任何时候都不会减少。
private void generateVideo() {
System.out.println("Creating video...");
String outputMoviePath = "";
IMediaWriter writer = null;
if (allLabels) {
outputMoviePath = TEMP_DIR_PATH + "/" + clipName + "/" + clipName + "_" + "all_labels" + ".avi";
}
else {
outputMoviePath = TEMP_DIR_PATH + "/" + clipName + "/" + clipName + "_" + labels[desiredLabelIdx] + ".avi";
}
writer = ToolFactory.makeWriter(outputMoviePath);
// add one video stream, with position 0 and ID 0, and a frame rate of OUTPUT_MOVIE_FPS
writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_MPEG4, vidWidth, vidHeight);
long startTime = System.nanoTime();
for (int idxF = 0; idxF < numFrames; idxF++) {
BufferedImage currFrameImg = convertToType(videoBIHolder.get(idxF), BufferedImage.TYPE_3BYTE_BGR);
// BufferedImage currFrameImg = videoBIHolder.get(idxF);
System.out.println("currFrameImg type is " + currFrameImg.getType()); // debug
// encode video to stream at 0
long frameTimeInVideo = System.nanoTime() - startTime;
System.out.println("Time: " + frameTimeInVideo);
writer.encodeVideo(0, currFrameImg, frameTimeInVideo, TimeUnit.NANOSECONDS);
// sleep for millisec. amount of time of the frame rate
try {
Thread.sleep((long) (1000/OUTPUT_MOVIE_FPS)); //OUTPUT_MOVIE_FPS
}
catch (InterruptedException e) {
System.err.println();
}
}
(S3CompositeUtil.java:247) 是行
writer.encodeVideo(0, currFrameImg, frameTimeInVideo, TimeUnit.NANOSECONDS);
我需要 OUTPUT_MOVIE_FPS 为 1,但奇怪的是,当它为 5 时,视频创建时没有例外,当它为 2 时,“视频”只是第一帧(没有其他帧),而当它是 1,我得到了这个异常。
有什么想法吗?我非常感谢我能得到的所有帮助!
【问题讨论】: