日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

avi和音频合成 ffmpeg_使用Java和ffmpeg把音频和视频合成视频的操作方法

發布時間:2023/12/10 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 avi和音频合成 ffmpeg_使用Java和ffmpeg把音频和视频合成视频的操作方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FFmpeg是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據你選擇的組件)。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多codec都是從頭開發的。

FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。它包括了目前領先的音/視頻編碼庫libavcodec。 FFmpeg是在Linux下開發出來的,但它可以在包括Windows在內的大多數操作系統中編譯。這個項目是由Fabrice Bellard發起的,現在由Michael Niedermayer主持。可以輕易地實現多種視頻格式之間的相互轉換,例如可以將攝錄下的視頻avi等轉成現在視頻網站所采用的flv格式

主要功能:

1、視頻格式轉換功能

ffmpeg視頻轉換功能。視頻格式轉換,比如可以將多種視頻格式轉換為flv格式,可不是視頻信號轉換? 。

ffmpeg可以輕易地實現多種視頻格式之間的相互轉換(wma,rm,avi,mod等),例如可以將攝錄下的視頻avi等轉成現在視頻網站所采用的flv格式。

2、視頻截圖功能

對于選定的視頻,截取指定時間的縮略圖。視頻抓圖,獲取靜態圖和動態圖,不提倡抓gif文件;因為抓出的gif文件大而播放不流暢

3、給視頻加水印功能

使用ffmpeg 視頻添加水印(logo)。

好了,下面開始今天的正文。

借助第三方工具ffmpeg合成視頻

需求:在小破站上下載了一些視頻,但是放到電腦里面看,我擦,聲音文件和視頻文件是分開的。

正確安裝ffmpeg并配置好環境變量。

Java代碼測試

里面是下載的視頻和音頻

我就上代碼遞歸了,只要用正確的ffmpeg的命令和Java調用ffmpeg.exe的程序,就可以合成啦。

package com.lovely.test;

import java.io.BufferedReader;

import java.io.File;

//import java.io.FileInputStream;

//import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.UUID;

/**

*

* 視頻中獲取音頻文件

*

*/

public class TestFfmpeg {

// FFmpeg全路徑

private static final String FFMPEG_PATH = "D:\\softWare\\tools\\joyTool\\ffmpeg\\bin\\ffmpeg.exe";

public static void main(String[] args) {

String path = "E:\\StudyVedio\\ComputerScience\\US";

try {

getAll(path);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 具體合成視頻函數

* @param videoInputPath

* 原視頻的全路徑

*

* @param audioInputPath

* 音頻的全路徑

*

* @param videoOutPath

* 視頻與音頻結合之后的視頻的路徑

*/

public static void convetor(String videoInputPath, String audioInputPath, String videoOutPath)

throws Exception {

Process process = null;

InputStream errorStream = null;

InputStreamReader inputStreamReader = null;

BufferedReader br = null;

try {

// ffmpeg命令

String command = FFMPEG_PATH + " -i " + videoInputPath + " -i " + audioInputPath

+ " -c:v copy -c:a aac -strict experimental " +

" -map 0:v:0 -map 1:a:0 "

+ " -y " + videoOutPath;

process = Runtime.getRuntime().exec(command);

errorStream = process.getErrorStream();

inputStreamReader = new InputStreamReader(errorStream);

br = new BufferedReader(inputStreamReader);

// 用來收集錯誤信息的

String str = "";

while ((str = br.readLine()) != null) {

System.out.println(str);

}

process.waitFor();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (br != null) {

br.close();

}

if (inputStreamReader != null) {

inputStreamReader.close();

}

if (errorStream != null) {

errorStream.close();

}

}

}

// 遞歸函數

public static void getAll(String path) throws Exception {

String videoInputPath = "";

String audioInputPath = "";

String videoOutPath = "";

File file = new File(path);

if (file.isDirectory()) {

File[] files = file.listFiles();

for (File f : files) {

getAll(f.getPath());

if (f.isFile()) {

if (f.getName().endsWith(".m4s")) {

if (f.getName().endsWith("audio.m4s"))

audioInputPath = file.getPath() + "\\audio.m4s";

if (f.getName().endsWith("video.m4s"))

videoInputPath = file.getPath() + "\\video.m4s";

videoOutPath = file.getPath() + "\\all.mp4";

if (!videoInputPath.equals(""))

convetor(videoInputPath, audioInputPath, videoOutPath);

}

}

}

}

}

}

我最后用了好幾分鐘合成了30個完整的視頻。體會了遞歸的強大。

總結

到此這篇關于使用Java和ffmpeg把音頻和視頻合成視頻的操作方法的文章就介紹到這了,更多相關java ffmpeg音頻合成視頻內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

總結

以上是生活随笔為你收集整理的avi和音频合成 ffmpeg_使用Java和ffmpeg把音频和视频合成视频的操作方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。