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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| import com.google.common.collect.Lists; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.bytedeco.javacpp.avcodec; import org.bytedeco.javacpp.opencv_core; import org.bytedeco.javacpp.opencv_imgcodecs; import org.bytedeco.javacv.*;
import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.util.Collections; import java.util.List;
public class OpenCVUtils { public static void main(String[] args) throws Exception { List<BufferedImage> images = grab(new File("/data/opencv/test.mp4")); int i = 1; for (BufferedImage image : images) { ImageIO.write(image, "jpg", new File("/data/opencv/frame/" + i + ".jpg")); i++; }
List<File> files = Lists.newArrayList(FileUtils.listFiles(new File("/data/opencv/frame/"), new String[]{"jpg"}, false)); Collections.sort(files, (o1, o2) -> { int i1 = NumberUtils.toInt(StringUtils.substringBefore(o1.getName(), ".")); int i2 = NumberUtils.toInt(StringUtils.substringBefore(o2.getName(), ".")); return Integer.compare(i1, i2); }); record("/data/opencv/out.mp4", files, new File("/data/opencv/test.aac"), 544, 960); }
public static void record(String output, List<File> images, File audioFile, int width, int height) throws Exception { try (FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(output, width, height); FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(audioFile)) { recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); recorder.setFormat("mp4"); recorder.setFrameRate(30); recorder.setAudioBitrate(192000); recorder.setAudioQuality(0); recorder.setSampleRate(44100); recorder.setAudioChannels(2); recorder.start();
OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage(); for (File file : images) { opencv_core.IplImage image = opencv_imgcodecs.cvLoadImage(file.getPath()); recorder.record(converter.convert(image)); opencv_core.cvReleaseImage(image); }
grabber.start(); Frame frame; while ((frame = grabber.grabSamples()) != null) { recorder.setTimestamp(frame.timestamp); recorder.recordSamples(frame.sampleRate, frame.audioChannels, frame.samples); } } }
public static List<BufferedImage> grab(File video) throws Exception { try (FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(video.getPath())) { grabber.start();
List<BufferedImage> images = Lists.newArrayList(); Frame frame; while ((frame = grabber.grabImage()) != null) { images.add(Java2DFrameUtils.toBufferedImage(frame)); } return images; } }
public static void grabAudioFromVideo(File video, File outputAudio) throws Exception { try (FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(video); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputAudio, 1)) { grabber.start(); recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); recorder.start();
Frame frame; while ((frame = grabber.grab()) != null) { if (frame.audioChannels == 1) { recorder.recordSamples(frame.sampleRate, frame.audioChannels, frame.samples); } } } }
}
|