话不多说,上代码
Scanner scanner = new Scanner(System.in);
System.out.println("请输入被提取音频的视频:");
String sourceVideolUrl = scanner.nextLine();
// 处理视频的名称
File videoFile = new File(sourceVideolUrl);
String videoName = videoFile.getName();
int index = videoName.lastIndexOf(".");
String fileName = videoName.substring(0, index);
System.out.println("提取音频");
String audioUrl = videoFile.getParent() + "\\" + fileName + ".mp3";
// 提取音频
Util.extractVoice(sourceVideolUrl,audioUrl);
/**
* 提取音频
* @param sourceFileName 视频文件(mp4)
* @param audioUrl 转音频后存放文件目录, 文件名为 原文件名+ .mp3
* @return void
*/
public static void extractVoice(String sourceFileName, String audioUrl) throws FFmpegFrameGrabber.Exception, FFmpegFrameRecorder.Exception {
//抓取资源
FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(sourceFileName);
Frame frame = null;
FFmpegFrameRecorder recorder = null;
frameGrabber.start();
//转录为单轨, 16K采样率, wav格式
recorder = new FFmpegFrameRecorder(audioUrl, frameGrabber.getAudioChannels());//frameGrabber.getAudioChannels()
// recorder.setFormat("mp3");
recorder.setFormat(frameGrabber.getFormat());
recorder.setSampleRate(frameGrabber.getSampleRate());//frameGrabber.getSampleRate()
//recorder.setAudioBitrate(128000);// 音频比特率
recorder.setTimestamp(frameGrabber.getTimestamp());
recorder.start();
int index = 0;
while (true) {
frame = frameGrabber.grabSamples();
if (frame == null) break;
if (frame.samples != null) {
recorder.recordSamples(frame.sampleRate, frame.audioChannels, frame.samples);
recorder.setTimestamp(frameGrabber.getTimestamp());
}
index++;
}
recorder.stop();
recorder.release();
frameGrabber.stop();
frameGrabber.release();
}
资源下载
Java提取视频中的音频
懒得下载或网络不好的,直接可去下方下载maven依赖包,放到本地的maven仓库即可
下载maven