javaCV音频剪切

java 复制代码
			// 设置 FFmpeg 日志回调,以便打印详细的 FFmpeg 日志
            FFmpegLogCallback.set();
            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);
            grabber.start();
            
            int audioChannels = grabber.getAudioChannels();
            int audioSampleRate = grabber.getSampleRate();
            int audioBitrate = grabber.getAudioBitrate();
            //视频质量,0最高,50最低
            double audioQuality = 0;
            //直接获取的音频format不能使用,这里指定
            String audioFormat = "mp3";
            FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, audioChannels);
            //这里有一个对应关系,代码九不列出了,具体编码在 org.bytedeco.ffmpeg.global.avcodec 类中,如 avcodec.AV_CODEC_ID_MP3
            int audioCodec = Util.audioCodecMatch(audioFormat);

            // 设置音频
            recorder.setSampleRate(audioSampleRate);
            recorder.setAudioBitrate(audioBitrate);
            if (audioCodec != -1) {
                recorder.setAudioCodec(audioCodec);
            }
            recorder.setFormat(audioFormat);
            recorder.setAudioQuality(audioQuality);
            recorder.start();
            Frame frame;

			//这里指定裁剪的时间区间
            long start = TimeUnit.MICROSECONDS.convert(startMs, TimeUnit.MILLISECONDS);
            long end = TimeUnit.MICROSECONDS.convert(endMs, TimeUnit.MILLISECONDS);
            while ((frame = grabber.grabSamples()) != null) {
                //grabber.getTimestamp() 返回的是微秒(us)
                long frameNumber = grabber.getTimestamp();
                if (frameNumber >= start * 1000 && frameNumber <= end * 1000) {
                    recorder.record(frame);
                }
                if (frameNumber > end) {
                    break;
                }
            }

            recorder.stop();
            grabber.stop();

这段代码不影响使用,但是根据打印的日志,总会有几帧没有处理,可能和设置的buffer有关,了解怎么解决的麻烦在评论区写一下,大家一起进步。

相关推荐
sibylyue21 小时前
IDEA AI Agent
java·ide·intellij-idea
芒途之士21 小时前
okHttp 解决文件上传中文名错误 Unexpected char
java
她说人狗殊途21 小时前
Spring IoC容器加载过程 vs Bean生命周期对应关系图
java·开发语言·rpc
std787921 小时前
超越编辑器:IntelliJ IDEA,如何成为Java开发的智慧引擎
java·编辑器·intellij-idea
Zz_waiting.21 小时前
Spring 统一功能处理 - 拦截器与适配器
java·spring·拦截器·适配器·dispatcher
yinke小琪1 天前
凌晨2点,我删光了所有“精通多线程”的代码
java·后端·面试
XLP新龙鹏科技1 天前
视频拼接类产品介绍
经验分享·音视频·视频拼接·产品方案·拼接类
珹洺1 天前
Java-Spring入门指南(十一)代理模式与Spring AOP实战
java·spring·代理模式
JAVA学习通1 天前
微服务项目->在线oj系统(Java-Spring)--增删改
java·开发语言·spring
道可到1 天前
字节面试 Java 面试通关笔记 03| java 如何实现的动态加载(面试可复述版)
java·后端·面试