2019년 12월 8일

동영상에서 썸네일 이미지 추출하기 (Extract image from a video using java)

JCodec 를 이용하면 아주 편리하게 동영상의 특정 프레임으로부터 이미지를 추출할 수 있다. pom.xml 파일에 아래와 같이 라이브러리를 추가하여 이미지 추출을 위한 AWT(BufferedImage)와 함께 사용이 가능하다.

1
2
3
4
5
6
7
8
9
10
<dependency>
    <groupid>org.jcodec</groupid>
    <artifactid>jcodec</artifactid>
    <version>0.2.3</version>
</dependency>
<dependency>
    <groupid>org.jcodec</groupid>
    <artifactid>jcodec-javase</artifactid>
    <version>0.2.3</version>
</dependency>
동영상의 특정 프레임에서 이미지를 추출하는 것은 아주 간단하다. 여기에서는 0 번째 프레임에서 이미지를 추출하여 썸네일로 사용하도록 했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package tests;
 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
import org.jcodec.api.FrameGrab;
import org.jcodec.api.JCodecException;
import org.jcodec.common.model.Picture;
import org.jcodec.scale.AWTUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
public class Mp4Test {
 
 private Logger log = LoggerFactory.getLogger(getClass().getName());
 private static final String IMAGE_PNG_FORMAT = "png";
 
 /**
  *
  *
  * @param source mp4 file.
  * @param thumbnail
  * @return
  * @throws IOException
  * @throws JCodecException
  */
 public File getThumbnail(File source, File thumbnail) throws IOException, JCodecException {
 
  log.debug("extracting thumbnail from video");
  int frameNumber = 0;
    
  Picture picture = FrameGrab.getFrameFromFile(source, frameNumber);
 
  BufferedImage bufferedImage = AWTUtil.toBufferedImage(picture);
  ImageIO.write(bufferedImage, IMAGE_PNG_FORMAT, thumbnail);
  return thumbnail;
 }
}


참고자료

jcodec - a pure java implementation of video/audio codecs.

댓글 없음:

댓글 쓰기