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 分钟前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
唐青枫1 小时前
Java Spring Security 实战详解:从登录认证到 JWT 权限控制
java
曹牧1 小时前
文档格式:OFD
java
豆角焖肉1 小时前
Maven进阶与搭建私服
java·maven
大不点wow1 小时前
Java序列化与反序列化:让对象走出JVM
java·开发语言·jvm
噢,我明白了2 小时前
Java中日期和字符串的处理
java·开发语言·日期
dkbnull2 小时前
Spring Boot请求处理组件对比详解
java·spring boot
jun_bai2 小时前
Orthanc服务器使用java上传dicom影像文件
java·运维·服务器
顺风尿一寸2 小时前
记一次 Spring AOP 与定时任务引发的死锁排查
java
音视频牛哥2 小时前
SmartMediaKit 推拉流MP4录像实践:实时传输与本地留存一体化
音视频·rtmp推流录像·rtmp播放端录像·rtsp播放端录像·rtsp流录制·rtmp流录制·rtsp服务器录像