狠人话不多,直接上代码
package com.bitar.javavideo.test;import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Java2DFrameConverter;import javax.imageio.ImageIO;
import java.io.File;/*** 把图片转换为MP4视频 ,* dir:D:\desktop\test\test01* 1个图1秒*/
public class Test01 {public static void main(String[] args) throws Exception {String outPutFile = "D:\\desktop\\test\\test01\\01-result.mp4";int imgWidth = 512;int imgHeight = 512;// FFmpegFrameRecorder:处理视频帧//视频宽高最好是按照常见的视频的宽高 16:9 或者 9:16FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outPutFile, imgWidth, imgHeight);//设置视频编码层模式recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);//1-代表1帧/sDouble FrameRate = 25.0D;recorder.setFrameRate(FrameRate);/** videoBitRate这个参数很重要,当然越大,越清晰,但最终的生成的视频也越大。* 查看一个资料,说均衡考虑建议设为videoWidth*videoHeight*frameRate*0.07*运动因子,运动因子则与视频中画面活动频繁程度有关,如果很频繁就设为4,不频繁则设为1*/int motionFactory = 1;recorder.setVideoBitrate((int) ((imgWidth * imgHeight * FrameRate) * motionFactory * 0.07));//设置视频图像数据格式int pixelFormat = avutil.AV_PIX_FMT_YUV420P;recorder.setPixelFormat(pixelFormat);String format = "mp4";recorder.setFormat(format);// 双通道(立体声)// recorder.setAudioChannels(grabber.getAudioChannels());recorder.setAudioChannels(2);recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);recorder.start();// 录制视频Java2DFrameConverter converter = new Java2DFrameConverter();//URL imgUrl = new URL("D:\\desktop\\test\\img1.png");//根据每秒的帧数 记录多少次图片,for (int i = 0; i < 25; i++) {recorder.record(converter.getFrame(ImageIO.read(new File("D:\\desktop\\test\\test01\\512x512-1.png"))));}for (int i = 0; i < 25; i++) {recorder.record(converter.getFrame(ImageIO.read(new File("D:\\desktop\\test\\test01\\512x512-2.png"))));}for (int i = 0; i < 25; i++) {recorder.record(converter.getFrame(ImageIO.read(new File("D:\\desktop\\test\\test01\\512x512-3.png"))));}recorder.close();}
}
补充:
FFmpegFrameRecorder 可以当成录像机,往录像中加入一张张图片,最后就是视频。
FFmpegFrameRecorder 记录的是frame(视频帧),所以需要将图片转换为Frame需要借助Java2DFrameConverter 。可以将本地图片、字节、网络图片等作为录像机的图片来源。
注意:最终视频是一个固定宽高的视频,所以图片最好是相同尺寸,关于图片的编辑、音频编辑后续会讲到,欢迎关注下哈