xuggler를 사용하여 BufferedImages 목록에서 비디오를 만들려고합니다. 나는 튜토리얼 this을 따라 갔고 코드는 완벽하게 작동합니다.xuggler를 사용하여 BufferedImages를 비디오에 결합
java.lang.RuntimeException가 : 패킷을 쓰지 못했습니다 : 내 코드 예제에서 작업 코드를 통합 할 때
그러나, 나는 RuntimeException을 얻을 [email protected]을 [완료 : true, dts : 67915, pts : 67915, 크기 : 24201, 키 : false, 플래그 : 0, 스트림 인덱스 : 0, 지속 시간 : 1, 위치 : -1, 시간 기준 : 1/65535] at com .xuggle.mediatool.MediaWriter.writePacket (MediaWriter.java:1215) at com.xuggle.mediatool.MediaWriter.encodeVideo (MediaWriter.java:767) at com.xuggle.mediatool.MediaWriter.encodeVideo (MediaWriter.java:810)) at s3.S3CompositeUtil.generateVideo (S3Composite s3.S3CompositeUtil.main에서 Util.java:247) (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가) 나는 OUTPUT_MOVIE_FPS 1 일 필요 라인
writer.encodeVideo(0, currFrameImg, frameTimeInVideo, TimeUnit.NANOSECONDS);
하지만 이상한 것은 그것이 5 때, 비디오가 예외없이 만든 것입니다, 2 인 경우 "비디오"는 첫 번째 프레임 (다른 프레임 없음)이고 1 일 때이 예외가 발생합니다.
의견이 있으십니까? 내가 얻을 수있는 모든 도움에 정말로 감사 할 것입니다!
답변 해 주셔서 감사합니다. 내가 2 FPS를했을 때, 총 12 프레임이 있긴하지만 처음 프레임의 "비디오"만 얻었습니다. 따라서 약 6 초 동안 그 이미지를 거의 보여주었습니다. 그 일이 당신이나 당신의 학생들에게 일어 났습니까? 그렇다면 어떻게 그 문제를 해결 했습니까? – labananala
안녕하세요, 그래, 우리는 비슷한 효과를 경험했지만 지금은 언제 어떻게 어떻게 발생했는지 기억하기가 어렵습니다. 그럼에도 불구하고 지금은 10fps에서 25fps의 프레임 속도로 단일 스틸 이미지 인코딩을 시도하고 그 결과를 제 대답에 추가했습니다. 아마도 이것은 프레임 속도를 올리도록 설득 할 수 있습니다. –
알았어, 조언 주셔서 감사합니다! 결국 프레임 속도를 5로 올린 다음 각 프레임을 여러 번 추가하여 비디오의 프레임 속도가 1로 표시되도록했습니다. – labananala