行业知识
javacv FFmpeg 剪辑音频文件
2026-11-15 00:17:34
来源:互联网转载
需要对mp3���件进行剪辑,剪掉几秒到几秒,然后生成新的文件。
()目前有两种方法,
方法一、是用脚本+安装FFmpeg执行包,
()方法二、不需要安装FFmpeg,直接调用ffmpeg包解码。
本文介绍的为方法二,不需要下载安装FFmpeg.
1、maven 需要添加2个依赖
javacv 和 ffmpeg-platform 都是org.bytedeco,这两个版本要匹配
org.bytedecojavacv1.5.6org.bytedecoffmpeg-platform4.4-1.5.6
2、写个测试类
public class Mp3Cutter {public static void main(String[] args) {// 输入音频文件和输出音频文件路径String inputFile = "F:\temp\欢乐谷.mp3";String outputFile = "F:\temp\mp3_out.mp3";cutAudio(inputFile, outputFile);}public static void cutAudio(String inputFile, String outputFile) {try {// 创建 FFmpegFrameGrabber 以读取输入音频文件FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);int bitrate=grabber.getAudioBitrate();int sampleRate=grabber.getSampleRate();// 创建 FFmpegFrameRecorder 以写入输出音频文件FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 2);recorder.setAudioCodec(grabber.getAudioCodec());recorder.setAudioQuality(0);recorder.setAudioBitrate(64000);//比特,中等效果recorder.setAudioChannels(2);//grabber.getAudioChannels());recorder.setSampleRate(44100);//grabber.getSampleRate());recorder.setAudioOption("crf", "0"); recorder.start();grabber.start(); //这个顺序要在后面 Frame f; int total=0; //计算音频样本帧的数量 while((f=grabber.grabSamples())!=null) { total++; } //设置要剪辑掉的 18秒--30秒 long startSec=18; long endSec=startSec+12; //计算时长 long durationInSec = grabber.getFormatContext().duration() / 1000000; //设置要剪辑掉的 倒数50秒--60秒 long startSec2=durationInSec-50; if(durationInSec startFrameNum&&i startFrameNum2&&i= durationInSecond) return (int) durationInSecond; double percent = startOrEndAtSecond / (double) durationInSecond; return (int) Math.round(totalFrame * percent);}} 运行测试。上面的代码可以直接跑。