最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java使用FFmpeg合成視頻和音頻并獲取視頻中的音頻等操作(實(shí)例代碼詳解)

 更新時(shí)間:2020年02月29日 21:25:25   作者:shshjj  
這篇文章主要介紹了java使用FFmpeg合成視頻和音頻并獲取視頻中的音頻等操作,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。

ffmpeg命令參數(shù)如下:

通用選項(xiàng)

-L license
-h 幫助
-fromats 顯示可用的格式,編解碼的,協(xié)議的。。。
-f fmt 強(qiáng)迫采用格式fmt
-I filename 輸入文件
-y 覆蓋輸出文件
-t duration 設(shè)置紀(jì)錄時(shí)間 hh:mm:ss[.xxx]格式的記錄時(shí)間也支持
-ss position 搜索到指定的時(shí)間 [-]hh:mm:ss[.xxx]的格式也支持
-title string 設(shè)置標(biāo)題
-author string 設(shè)置作者
-copyright string 設(shè)置版權(quán)
-comment string 設(shè)置評(píng)論
-target type 設(shè)置目標(biāo)文件類型(vcd,svcd,dvd) 所有的格式選項(xiàng)(比特率,編解碼以及緩沖區(qū)大?。┳詣?dòng)設(shè)置 ,只需要輸入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高質(zhì)量設(shè)置
-itsoffset offset 設(shè)置以秒為基準(zhǔn)的時(shí)間偏移,該選項(xiàng)影響所有后面的輸入文件。該偏移被加到輸入文件的時(shí)戳,定義一個(gè)正偏移意味著相應(yīng)的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

視頻選項(xiàng)

-b bitrate 設(shè)置比特率,缺省200kb/s
-r fps 設(shè)置幀頻 缺省25
-s size 設(shè)置幀大小 格式為WXH 缺省160X128.下面的簡(jiǎn)寫也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 設(shè)置橫縱比 4:3 16:9 或 1.3333 1.7777
-croptop size 設(shè)置頂部切除帶大小 像素單位
-cropbottom size –cropleft size –cropright size
-padtop size 設(shè)置頂部補(bǔ)齊的大小 像素單位
-padbottom size –padleft size –padright size –padcolor color 設(shè)置補(bǔ)齊條顏色(hex,6個(gè)16進(jìn)制的數(shù),紅:綠:蘭排列,比如 000000代表黑色)
-vn 不做視頻記錄
-bt tolerance 設(shè)置視頻碼率容忍度kbit/s
-maxrate bitrate設(shè)置最大視頻碼率容忍度
-minrate bitreate 設(shè)置最小視頻碼率容忍度
-bufsize size 設(shè)置碼率控制緩沖區(qū)大小
-vcodec codec 強(qiáng)制使用codec編解碼方式。 如果用copy表示原始編解碼數(shù)據(jù)必須被拷貝。
-sameq 使用同樣視頻質(zhì)量作為源(VBR)
-pass n 選擇處理遍數(shù)(1或者2)。兩遍編碼非常有用。第一遍生成統(tǒng)計(jì)信息,第二遍生成精確的請(qǐng)求的碼率
-passlogfile file 選擇兩遍的紀(jì)錄文件名為file

高級(jí)選項(xiàng)

-g gop_size 設(shè)置圖像組大小
-intra 僅適用幀內(nèi)編碼
-qscale q 使用固定的視頻量化標(biāo)度(VBR)
-qmin q 最小視頻量化標(biāo)度(VBR)
-qmax q 最大視頻量化標(biāo)度(VBR)
-qdiff q 量化標(biāo)度間最大偏差 (VBR)
-qblur blur 視頻量化標(biāo)度柔化(VBR)
-qcomp compression 視頻量化標(biāo)度壓縮(VBR)
-rc_init_cplx complexity 一遍編碼的初始復(fù)雜度
-b_qfactor factor 在p和b幀間的qp因子
-i_qfactor factor 在p和i幀間的qp因子
-b_qoffset offset 在p和b幀間的qp偏差
-i_qoffset offset 在p和i幀間的qp偏差
-rc_eq equation 設(shè)置碼率控制方程 默認(rèn)tex^qComp
-rc_override override 特定間隔下的速率控制重載
-me method 設(shè)置運(yùn)動(dòng)估計(jì)的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 設(shè)置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC
-idct_algo algo 設(shè)置idct算法??捎玫挠?0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM
-er n 設(shè)置錯(cuò)誤殘留為n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 設(shè)置錯(cuò)誤掩蔽為bit_mask,該值為如下值的位掩碼 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用frames B 幀,支持mpeg1,mpeg2,mpeg4
-mbd mode 宏塊決策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用4個(gè)運(yùn)動(dòng)矢量 僅用于mpeg4
-part 使用數(shù)據(jù)劃分 僅用于mpeg4
-bug param 繞過(guò)沒(méi)有被自動(dòng)監(jiān)測(cè)到編碼器的問(wèn)題
-strict strictness 跟標(biāo)準(zhǔn)的嚴(yán)格性
-aic 使能高級(jí)幀內(nèi)編碼 h263+
-umv 使能無(wú)限運(yùn)動(dòng)矢量 h263+
-deinterlace 不采用交織方法
-interlace 強(qiáng)迫交織法編碼 僅對(duì)mpeg2和mpeg4有效。當(dāng)你的輸入是交織的并且你想要保持交織以最小圖像損失的時(shí)候采用該選項(xiàng)??蛇x的方法是不交織,但是損失更大
-psnr 計(jì)算壓縮幀的psnr
-vstats 輸出視頻編碼統(tǒng)計(jì)到vstats_hhmmss.log
-vhook module 插入視頻處理模塊 module 包括了模塊名和參數(shù),用空格分開

音頻選項(xiàng)

-ab bitrate 設(shè)置音頻碼率
-ar freq 設(shè)置音頻采樣率
-ac channels 設(shè)置通道 缺省為1
-an 不使能音頻紀(jì)錄
-acodec codec 使用codec編解碼

音視頻捕獲選項(xiàng)

-vd device 設(shè)置視頻捕獲設(shè)備。比如/dev/video0
-vc channel 設(shè)置視頻捕獲通道 DV1394專用
-tvstd standard 設(shè)置電視標(biāo)準(zhǔn) NTSC PAL(SECAM)
-dv1394 設(shè)置DV1394捕獲
-av device 設(shè)置音頻設(shè)備 比如/dev/dsp

高級(jí)選項(xiàng)

-map file:stream 設(shè)置輸入流映射
-debug 打印特定調(diào)試信息
-benchmark 為基準(zhǔn)測(cè)試加入時(shí)間
-hex 傾倒每一個(gè)輸入包
-bitexact 僅使用位精確算法 用于編解碼測(cè)試
-ps size 設(shè)置包大小,以bits為單位
-re 以本地幀頻讀數(shù)據(jù),主要用于模擬捕獲設(shè)備
-loop 循環(huán)輸入流。只工作于圖像流,用于ffserver測(cè)試

橫向合并視頻

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi hstack output.mp4

上面的命令雖然可以合并視頻,兩個(gè)視頻可以正常播放,但是只保留了前面一個(gè)的音頻。

下面會(huì)介紹怎么避開這個(gè)坑。

注意這時(shí)候input1和input2必須同樣的高度,如果不一樣的高度可以使用-shortest參數(shù)來(lái)保證同樣的高度。

如果希望合并多個(gè)視頻,可以使用下面命令行。

ffmpeg -i input1.mp4 -i input2.mp4 -i input3.mp4 -lavfi hstack=inputs=3 output.mp4

其中input=3表示希望合并的視頻的個(gè)數(shù)

縱向合并視頻

ffmpeg -i input1.mp4 -i input2.mp4 -lavfi vstack output.mp4

網(wǎng)格合并視頻

當(dāng)多個(gè)視頻時(shí),還可以合并成網(wǎng)格狀,比如2x2,3x3這種。但是視頻個(gè)數(shù)不一定需要是偶數(shù),如果是奇數(shù),可以用黑色圖片來(lái)占位。

ffmpeg -f lavfi -i color=c=black:s=1280x720 -vframes 1 black.png

該命令將創(chuàng)建一張1280*720的圖片

然后就可以使用下面這個(gè)命令來(lái)合并成網(wǎng)格視頻了,如果只有三個(gè)視頻,可以選擇上面創(chuàng)建的黑色圖片替代。

ffmpeg -i top_left.mp4 -i top_right.mp4 -i bottom_left.mp4 -i bottom_right.mp4 \
-lavfi "[0:v][1:v]hstack[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack"
-shortest 2by2grid.mp4

上面創(chuàng)建的是正規(guī)的2x2網(wǎng)格視頻。想象一下,現(xiàn)在只有三個(gè)視頻,我想把第一個(gè)視頻擺放在第一行的中間,然后把第二、三個(gè)視頻擺放在第二行。那么就可以使用下面兩個(gè)命令了。

ffmpeg -f lavfi -i color=c=black:s=640x720 -vframes 1 black.png

ffmpeg -i black.png -i top_center.mp4 -i bottom_left.mp4 -i bottom_right.mp4
-lavfi "[0:v][1:v][0:v]hstack=inputs=3[top];[2:v][3:v]hstack[bottom];[top][bottom]vstack"
-shortest 3_videos_2x2_grid.mp4

合并音頻和視頻

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4

如果視頻中已經(jīng)包含了音頻,這個(gè)時(shí)候還可以替換視頻中的音頻,使用下面命令行。

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental
-map 0:v:0 -map 1:a:0 output.mp4

合并兩個(gè)音頻

ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 output.mp3

獲取視頻中的音頻

ffmpeg -i input.mp4 -vn -y -acodec copy output.m4a

去掉視頻中的音頻

ffmpeg -i input.mp4 -an output.mp4

現(xiàn)在介紹,怎么合并兩個(gè)視頻并保留兩個(gè)視頻中的音頻。也就是抖音中的合拍功能。
1.合并兩個(gè)視頻,但是發(fā)現(xiàn)只有一個(gè)聲音。無(wú)所謂。
2.抽取兩個(gè)視頻中的音頻,然后合并成一個(gè)音頻。
3.將這個(gè)音頻替換到之前的合并視頻中。
4.ok了。
5.可以使用ffplay播放了。

附上java代碼,可直接使用。使用前需要先將FFmpeg的bin目錄配置在環(huán)境變量中。配置完成后,在cmd中拼 ffmpeg -version

如果能ping通說(shuō)明配置成功,然后直接使用以下代碼即可成功。

package com.util;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
 
/**
 * 視頻中獲取音頻文件
 */
public class VideoUtils {
 //FFmpeg全路徑
 private static final String FFMPEG_PATH = "D:\\666\\ffmpeg-20190730-a0c1970-win64-static\\bin\\ffmpeg.exe";
 //音頻保存路徑
 private static final String TMP_PATH = "D:\\666";
 
 /**
  * 從視頻中提取音頻信息
  * @param videoUrl
  * @return
  */
 public static String videoToAudio(String videoUrl){
  String aacFile = "";
  try {
   aacFile = TMP_PATH + "/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
     + UUID.randomUUID().toString().replaceAll("-", "") + ".mp3";
   String command = FFMPEG_PATH + " -i "+ videoUrl + " -vn -acodec copy "+ aacFile;
   System.out.println("video to audio command : " + command);
   Process process = Runtime.getRuntime().exec(command);
   process.waitFor();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return "";
 }
 
 public static void main(String[] args){
 try {
// videoToAudio("D:\\laji\\2.mp4");
 String videoInputPath = "D:\\laji\\aa.mp4";
 String audioInputPath = "D:\\laji\\a.mp3";
 String videoOutPath = "D:\\laji\\bb1.avi";
 convetor(videoInputPath,audioInputPath,videoOutPath);
 } catch (Exception e) {
 e.printStackTrace();
 }
 System.out.println("---------獲取音頻文件成功!-----------");
 
 }
 /**
  * @param videoInputPath 原視頻的全路徑
  * @param audioInputPath 音頻的全路徑
  * @param videoOutPath 視頻與音頻結(jié)合之后的視頻的路徑
  * @throws Exception
  */
 public static void convetor(String videoInputPath, String audioInputPath, String videoOutPath)
   throws Exception {
  Process process = null;
  try {
   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);
   process.waitFor();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  // 使用這種方式會(huì)在瞬間大量消耗CPU和內(nèi)存等系統(tǒng)資源,所以這里我們需要對(duì)流進(jìn)行處理
  InputStream errorStream = process.getErrorStream();
  InputStreamReader inputStreamReader = new InputStreamReader(errorStream);
  BufferedReader br = new BufferedReader(inputStreamReader);
 
  String line = "";
  while ((line = br.readLine()) != null) {
  }
  if (br != null) {
   br.close();
  }
  if (inputStreamReader != null) {
   inputStreamReader.close();
  }
  if (errorStream != null) {
   errorStream.close();
  }
 
 }
 
}

總結(jié)

到此這篇關(guān)于java使用FFmpeg合成視頻和音頻并獲取視頻中的音頻等操作(實(shí)例代碼詳解)的文章就介紹到這了,更多相關(guān)java使用FFmpeg合成視頻和音頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java鎖之阻塞鎖介紹和代碼實(shí)例

    Java鎖之阻塞鎖介紹和代碼實(shí)例

    這篇文章主要介紹了Java鎖之阻塞鎖介紹和代碼實(shí)例,阻塞鎖與自旋鎖不同,它改變了線程的運(yùn)行狀態(tài),需要的朋友可以參考下
    2014-09-09
  • 智能手表開發(fā)API接口

    智能手表開發(fā)API接口

    這篇文章主要介紹了智能手表開發(fā)API接口,使用圖靈機(jī)器人平臺(tái)接口實(shí)現(xiàn)天氣預(yù)報(bào),非常簡(jiǎn)單實(shí)用,這里推薦給大家。
    2015-03-03
  • Java中的Static class詳解及實(shí)例代碼

    Java中的Static class詳解及實(shí)例代碼

    這篇文章主要介紹了 Java中的Static class詳解及實(shí)例代碼的相關(guān)資料,在Java中我們可以有靜態(tài)實(shí)例變量、靜態(tài)方法、靜態(tài)塊。類也可以是靜態(tài)的,需要的朋友可以參考下
    2017-03-03
  • idea注解參數(shù)換行時(shí)間日期格式設(shè)置方法

    idea注解參數(shù)換行時(shí)間日期格式設(shè)置方法

    這篇文章主要介紹了idea注解參數(shù)換行時(shí)間日期格式設(shè)置方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java讀寫ini文件代碼示例

    Java讀寫ini文件代碼示例

    這篇文章主要介紹了Java讀寫ini文件代碼示例,分享了相關(guān)代碼示例及相關(guān)注釋,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java使用DateTimeFormatter實(shí)現(xiàn)格式化時(shí)間

    Java使用DateTimeFormatter實(shí)現(xiàn)格式化時(shí)間

    這篇文章主要介紹了Java使用DateTimeFormatter實(shí)現(xiàn)格式化時(shí)間,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Spring Boot+Jpa多數(shù)據(jù)源配置的完整步驟

    Spring Boot+Jpa多數(shù)據(jù)源配置的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring Boot+Jpa多數(shù)據(jù)源配置的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 淺談Java中的Filter過(guò)濾器

    淺談Java中的Filter過(guò)濾器

    本篇文章主要介紹了淺談Java中的Filter過(guò)濾器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Java操作PDF文件實(shí)現(xiàn)簽訂電子合同詳細(xì)教程

    Java操作PDF文件實(shí)現(xiàn)簽訂電子合同詳細(xì)教程

    這篇文章主要介紹了如何在PDF中加入電子簽章與電子簽名的過(guò)程,包括編寫Word文件、生成PDF、為PDF格式做表單、為表單賦值、生成文檔以及上傳到OBS中的步驟,需要的朋友可以參考下
    2025-01-01
  • Java分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)

    Java分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇Java分頁(yè)查詢--分頁(yè)顯示(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08

最新評(píng)論

通许县| 广州市| 高邑县| 藁城市| 宜川县| 祥云县| 永川市| 绥滨县| 子长县| 丹阳市| 志丹县| 南汇区| 禄丰县| 山阴县| 赤壁市| 依兰县| 连平县| 奈曼旗| 泗水县| 屯昌县| 叶城县| 库伦旗| 苍南县| 宜宾县| 宜兰市| 乌兰察布市| 确山县| 昭通市| 天津市| 阜南县| 商丘市| 宁强县| 金阳县| 金堂县| 老河口市| 朝阳县| 德安县| 成武县| 莆田市| 嘉荫县| 吕梁市|