java对视频的处理_Java利用Javacv对视频进行淡入淡出处理

本文介绍了如何使用Java和Javacv库通过FFmpeg的fade filter对视频进行淡入淡出处理。通过设置fade filter参数,如淡入淡出的开始时间和帧数,然后利用FFmpegFrameFilter对视频帧进行处理,最终生成带有淡入淡出效果的新视频。详细代码示例展示了实现这一功能的完整步骤。
摘要由CSDN通过智能技术生成

该文转自 烂代码网:

https://trashcode.cn/post/d/b340ddfb-6aeb-467c-8cd2-e868a2ac731a

我们通过Javacv中FFmpeg音视频处理包,对视频进行淡入淡出处理。

其中用到了FFmpeg中的处理视频淡入淡出的fade filter

该filter命令如下:

在开始30秒淡入:

fade=in:0:30

该命令等同于:

fade=t=in:s=0:n=30

在总帧数为200帧的视频中,从第155帧开始,淡出最后的45帧

fade=out:155:45

fade=type=out:start_frame=155:nb_frames=45

更多该命令的定义,可以参见文档

https://ffmpeg.org/ffmpeg-filters.html#fade

所以,在Javacv中,我们可以用把包裹了FFmpeg filter的FFmpegFrameFilter类直接对视频进行淡入淡出处理

处理流程为:

1.从样例中获取视频帧

2.将视频帧放入filter中进行淡入淡出处理

3.从filter中将处理好的帧放入recorder中生成淡入淡出视频

代码如下:

//fadeFilter为FFmpeg提供的淡出淡出命令,比如"fade=in:0:150:color=red,fade=out:850:150"

public voidfadeVideo(String fadeFilter)

{//样例视频文件

String audioOne = ="bjdoggy.mp4";//生成的淡入淡出效果的文件

String fadeAudio="fadeVideo.mp4";try{//加载样例视频

FFmpegFrameGrabber grabberOne =FFmpegFrameGrabber.createDefault(audioOne);

grabberOne.start();//创建记录淡入淡出视频的recorder

FFmpegFrameRecorder recorder = newFFmpegFrameRecorder(fadeAudio,grabberOne.getImageWidth(),

grabberOne.getImageHeight());

recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);

recorder.setFormat("mp4");

recorder.setFrameRate(grabberOne.getFrameRate());

recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);//开始记录

recorder.start();//创建淡入淡出的filter

FFmpegFrameFilter filter=newFFmpegFrameFilter(fadeFilter,grabberOne.getImageWidth(),

grabberOne.getImageHeight());

filter.setFrameRate(grabberOne.getFrameRate());

filter.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);

filter.start();

Frame fOne,recordF;while(true)

{//获取样例视频帧

fOne=grabberOne.grabFrame();if(fOne==null)break;if (fOne != null) {//放入filter

filter.push(0, fOne);

}

}//从filter中取出处理好的帧,并放入recorder中

while((recordF=filter.pull())!=null)

{

recorder.record(recordF);

}

grabberOne.stop();

filter.close();

recorder.close();

LOGGER.info(fadeAudio);

}catch(Exception e)

{

LOGGER.error("",e);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值