一、FFmpeg简介
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这边小编主要介绍JAVAFFmpeg的应用。
二、功能介绍
功能一:上传视频:需要合成的视频
功能二:上传语音:需要合成的语音
功能三:输出文件夹:指定合成完毕后文件输出地方
功能四:开始合成文件:执行合成文件开始
三、上传视频
点击上传视频后会弹出文件选择器,支持多文件上传。
pane.setLayout(new FlowLayout(FlowLayout.LEFT));
button = new JButton(\"1、上传视频\");
button.setFont(new Font(\"宋体\", Font.BOLD, 18));
button.setPreferredSize(new Dimension(250, 50));
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
addVideo(button);//E点击按钮后触发的事件
}
});\npane.add(button);
public static void addVideo(JButton button) {
JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(true);
chooser.setDialogTitle(\"选择合成视频\");
/** 过滤文件类型 * */
FileNameExtensionFilter filter = new FileNameExtensionFilter(\"mp4,mkv\", \"mp4\",\"mkv\");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(button);
if (returnVal == JFileChooser.APPROVE_OPTION) {
/** 得到选择的文件* */
File[] arrfiles = chooser.getSelectedFiles();
if (arrfiles == null || arrfiles.length == 0) {
return;
}
String joinVideo=\"\";
for(int i=0;i<arrfiles.length;i++){
File file=arrfiles[i];
String fileA=file.getAbsolutePath();
System.out.println(\"fileA:\"+fileA);
joinVideo=joinVideo.equals(\"\")?file.getName():joinVideo+\",\"+file.getName();
joinVideoPath=joinVideoPath.equals(\"\")?file.getAbsolutePath():joinVideoPath+\",\"+file.getAbsolutePath();
}
JLabelVideo.setText(\"视频文件:\"+joinVideo);
上传语音
上传需要合成的语音文件,支持多语音上传,格式控制为mp3和wav
button = new JButton(\"2、上传音频\");
button.setFont(new Font(\"宋体\", Font.BOLD, 18));
button.setPreferredSize(new Dimension(250, 50));
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
addMusic(button);//点击按钮触发事件
}
});
pane.add(button);
public static void addMusic(JButton button) {
JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(true);
chooser.setDialogTitle(\"选择合成音频\");
/** 过滤文件类型 * */
FileNameExtensionFilter filter = new FileNameExtensionFilter(\"mp3,wav\", \"mp3\",\"wav\");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(button);
if (returnVal == JFileChooser.APPROVE_OPTION) {
/** 得到选择的文件* */
File[] arrfiles = chooser.getSelectedFiles();
if (arrfiles == null || arrfiles.length == 0) {
return;
}
String joinMusic=\"\";
for(int i=0;i<arrfiles.length;i++){
File file=arrfiles[i];
String fileA=file.getAbsolutePath();
System.out.println(\"fileA:\"+fileA);
joinMusic=joinMusic.equals(\"\")?file.getName():joinMusic+\",\"+file.getName();
joinMusicPath=joinMusicPath.equals(\"\")?file.getAbsolutePath():joinMusicPath+\",\"+file.getAbsolutePath();
}
JLabelMusic.setText(\"音频文件:\"+joinMusic);
输出文件夹
选择要输出合成文件的路径,限制为只能选择文件夹
pane.add(button);
button = new JButton(\"3、输出文件夹\");
button.setFont(new Font(\"宋体\", Font.BOLD, 18));
button.setPreferredSize(new Dimension(250, 50));
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
addOut(button);
}
});
pane.add(button);
public static void addOut(JButton button) {
JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setDialogTitle(\"选择输出文件夹\");
int returnVal = chooser.showOpenDialog(button);
if (returnVal == JFileChooser.APPROVE_OPTION) {
/** 得到选择的文件* */
File arrfiles = chooser.getSelectedFile();
joinOutPath=arrfiles.getAbsolutePath();
JLabelOut.setText(\"输出路径:\"+arrfiles.getAbsolutePath());
try {
JOptionPane.showMessageDialog(null, \"上传成功!\", \"提示\",
JOptionPane.INFORMATION_MESSAGE);
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, \"上传失败!\", \"提示\",
JOptionPane.ERROR_MESSAGE);
e1.printStackTrace();
}
开始合成文件
将选择的视频文件和音频文件进行混合拼接,支持多文件名相同文件进行匹配合成。
button = new JButton(\"4、开始合成文件\");
button.setFont(new Font(\"宋体\", Font.BOLD, 25));
button.setPreferredSize(new Dimension(allWidth-40, 80));
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
fit();
}
});
pane.add(button);
public static void fit() {
try {
SwingDemo demo = new SwingDemo(ffmegPath);
if (StrUtil.isEmpty(joinVideoPath)) {
JOptionPane.showMessageDialog(null, \"视频文件未上传!\", \"提示\",
JOptionPane.INFORMATION_MESSAGE);
return;
}
if (StrUtil.isEmpty(joinMusicPath)) {
JOptionPane.showMessageDialog(null, \"音频文件未上传!\", \"提示\",
JOptionPane.INFORMATION_MESSAGE);
return;
}
if (StrUtil.isEmpty(joinOutPath)) {
JOptionPane.showMessageDialog(null, \"输出文件夹未上传!\", \"提示\",
JOptionPane.INFORMATION_MESSAGE);
return;
}
String[] videos = joinVideoPath.split(\",\");
String[] musics = joinMusicPath.split(\",\");
if(videos.length!=musics.length){
JOptionPane.showMessageDialog(null, \"视频数量必须和音频数量相等!\", \"提示\",
JOptionPane.INFORMATION_MESSAGE);
return;
}
for (int i = 0; i < videos.length; i++) {
demo.createMp4(videos[i], musics[i], joinOutPath);
}
JOptionPane.showMessageDialog(null, \"全部合成完毕!\", \"提示\",
JOptionPane.INFORMATION_MESSAGE);
如有需要完整例子或工具,可以在下方留言。
0