package com.laoli.grocery.util;
import com.alibaba.fastjson.JSON;
import org.jboss.logging.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class FFMpegMusicUtil {
private static final Logger logger = Logger.getLogger(FFMpegMusicUtil.class);
private static String FFMPEG_PATH="F:\\job\\utils\\ffmpeg-20180714-c5329d6-win64-static\\bin\\";//ffMpeg解压的bin地址
/**
* videoUrl 视频路径 "F:\\MP4\\"
* videoName 音频名称
* tmpPath 转为音频后 存放的地址 "F:\\MP3\\"
* 视频转音频 返回上传的音频地址
*
*/
public static void videoToAudio(String videoUrl,String videoName,String tmpPath){
try {
String aacFile = tmpPath + videoName + ".aac";
String command = FFMPEG_PATH + "ffmpeg -i "+ videoUrl + " -y -f ac3 -vn "+ aacFile;
logger.info("video to audio command : " + command);
Process process = Runtime.getRuntime().exec(command);
process.waitFor();
} catch (Exception e) {
logger.error("音频提取失败,视频地址:"+videoUrl, e);
}
}
/**
* 读取文件夹下所有文件名 : "F:\\MP4\\"
* @param url
* @return
*/
public static List<String> rdFileName(String url){
List<String> list=new ArrayList<>();
File folder = new File(url);
File[] files = folder.listFiles();
for (File file : files) {
if (file.isFile()) {
list.add(file.getName());
}
}
return list;
}
/**
* 读取文件夹下所有文件名并且去除掉文件后缀 : "F:\\MP3\\"
* @param url
* @return
*/
public static List<String> rdFileName2(String url){
List<String> list=new ArrayList<>();
File folder = new File(url);
File[] files = folder.listFiles();
for (File file : files) {
if (file.isFile()) {
String name=file.getName();
if (name.contains(".")){
int index = name.indexOf(".");
String tmpName = name.substring(0, index);//去除后缀
list.add(tmpName);
}else {
list.add(name);
}
}
}
return list;
}
/**
* 批量读取文件夹下所有视频转音频
* @param vopath 视频存放路径
* @param tmpPath 音频存放地址
* @return tmpPath 音频存放地址
*/
public static String mp4ToAacList(String vopath,String tmpPath){
List<String> nameList= rdFileName(vopath);//视频存放路径下的所有文件名称
List<String> tmpFileName=rdFileName2(tmpPath);//音频存放路径下的所有文件名称
if (nameList!=null){
for (String name: nameList) {
int index = name.indexOf(".");
String tmpName = name.substring(0, index);//去除.mp4
if (tmpFileName.contains(tmpName)){
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyMMddhhmmss");
tmpName=tmpName+"复件"+dateFormat.format(date);
}
videoToAudio(vopath+name,tmpName,tmpPath);
}
}
return tmpPath;
}
public static void main(String[] args) {
// videoToAudio("F:\\MP4\\V1.mp4","v1");
// List<String> list=rdFileName("F:\\MP4\\");
// System.out.println(JSON.toJSONString(list));
System.out.println(mp4ToAacList("F:\\MP4\\","F:\\MP3\\"));
}
}
FFmpeg
链接:https://pan.baidu.com/s/15k2UGdtv4C4Vk6H0OUb7qQ
提取码:1lcd