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有关,了解怎么解决的麻烦在评论区写一下,大家一起进步。

相关推荐
是小果果蛋儿啊4 小时前
2024 CyberHost 语音+图像-视频
人工智能·深度学习·音视频
不会玩技术的技术girl4 小时前
使用Java爬虫获取京东商品评论API接口(JD.item_review)数据
java·开发语言·爬虫
计算机毕设指导65 小时前
基于Spring Boot的医院挂号就诊系统【免费送】
java·服务器·开发语言·spring boot·后端·spring·maven
Yolowuwu5 小时前
算法跟练第十一弹——二叉树
java·算法·leetcode
m0_748238925 小时前
Java面试题--设计模式
java·开发语言·设计模式
青云交5 小时前
Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)
java·大数据·区块链·智能合约·共识机制·数据可信·价值流转
汇匠源6 小时前
如何开发一个基于Java的商城小程序?
java·小程序
115432031q6 小时前
基于SpringBoot养老院平台系统功能实现十七
java·前端·后端
众智创新团队6 小时前
Android的Activity生命周期知识点总结,详情
android·java·开发语言
&岁月不待人&6 小时前
Android 常用设计模式和实例
java·开发语言·设计模式