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

相关推荐
凡人叶枫34 分钟前
Effective C++ 条款10:令 operator= 返回一个 reference to *this
java·linux·服务器·开发语言·c++·effective c++
摇滚侠37 分钟前
JavaSE 和 JavaEE 是什么意思
java·java-ee
想带你从多云到转晴39 分钟前
03、JAVAEE---多线程(三)
java
满怀冰雪1 小时前
第04篇-双指针算法-从有序数组到回文判断的高频解法
java·算法
matlabgoodboy1 小时前
计算机java程序代写python代码编写c/c++代做qt设计php开发matlab
java·c语言·python
视觉小萌新1 小时前
C++利用libmicrohttpd制作交互网页端——C1
java·c++·交互
Gauss松鼠会1 小时前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
格发许可优化管理系统1 小时前
Mentor许可证使用规定全解析
java·大数据·c语言·开发语言·c++
JAVA面经实录9171 小时前
Redis 知识体系(完整版)
java·redis·nosql数据库·nosql
武子康1 小时前
Java-21 深入浅出 MyBatis 手写ORM框架2 手写Resources、MappedStatment、XMLBuilder等
java·后端