public boolean generateVideoBySequenceImages4Jcoder
(String videoFilename, List<String> filelist, int FPS) throws Exception {
boolean result = false;
SeekableByteChannel out = null;
try {
out = NIOUtils.writableFileChannel(videoFilename);
// for Android use: AndroidSequenceEncoder
AWTSequenceEncoder encoder = new AWTSequenceEncoder(out, Rational.R(FPS, 1));
for (String fnpath : filelist) {
LOGGER.info(fnpath);
File img = new File(fnpath);
BufferedImage image = ImageIO.read(img);
encoder.encodeImage(image);
}
// Finalize the encoding, i.e. clear the buffers, write the header, etc.
encoder.finish();
result = true;
} catch (Exception e) {
// LOGGER.info("generateVideoBySequenceImages Exception: " + e);
e.printStackTrace();
} finally {
NIOUtils.closeQuietly(out);
}
return result;
}
----
...사용시
String filefullNm = tempPath + fileName + format1.format(time)+ "_jcodec.avi";
if ( generateVideoBySequenceImages4Jcoder(filefullNm, filelist, Integer.valueOf(videofps)) ){
LOGGER.info("동영상저장 끝:" + filefullNm);
result = "true";
mv.addObject("filePath", filefullNm);
}
jcodec 사용하여 순서 이미지들로 동영상 파일 제작
(sequence images to video)
그런데 문제가 발생한다.
계속 발생하는게 아니라 특정 조건에 아래와 같이 발생한다.
Component 1 width should be a multiple of 2 for colorspace: YUV420J
찾아 보면 이미지의 넓이와 크기가 짝수여야 한다는 것이다.
그래서 원천 이미지를 만들어 내는 곳에 소스를 변경해야 만 처리가 편한다.
사용은 아래와 같이
...
BufferedImage bufImg = ImageIO.read(new ByteArrayInputStream(imageBytes));
int width = bufImg.getWidth() ;
int height = bufImg.getHeight();
if ( (width %2) != 0 ) width++;
if ( (height %2) != 0 ) height++;
BufferedImage resizedImage = resizeImg(bufImg, width, height);
ImageIO.write(resizedImage, "png", new File(filefullNm));
...
// 크기 재생산
public BufferedImage resizeImg(BufferedImage inputImage, int width, int height)
throws IOException {
//https://icarus8050.tistory.com/32
BufferedImage outputImage =
new BufferedImage(width, height, inputImage.getType());
Graphics2D graphics2D = outputImage.createGraphics();
graphics2D.drawImage(inputImage, 0, 0, width, height, null);
graphics2D.dispose();
return outputImage;
}
이와 같이 하면 문제가 없어 질 것이다. 두둥탁~
참
pom
<!-- jcodec #######################################################################################-->
<dependency>
<groupId>org.jcodec</groupId>
<artifactId>jcodec</artifactId>
<version>0.2.5</version>
</dependency>
<dependency>
<groupId>org.jcodec</groupId>
<artifactId>jcodec-javase</artifactId>
<version>0.2.5</version>
</dependency>
메이븐도 필수~
'개발하기 > 웹개발도움' 카테고리의 다른 글
전자정부프레임워크4.0 Log4JdbcCustomFormatter 적용 (0) | 2022.07.26 |
---|---|
echart canvas to image external download - 이미지 다운로드 (0) | 2022.01.19 |
네이버 지도 API 사용시 거리뷰 기능 오류 (0) | 2020.06.10 |
RabbitMQ 설치 간단 매뉴얼 - CentsOS 7.x (0) | 2020.02.26 |
지도 테스트 -1 (0) | 2020.01.30 |