2012-12-11 148 views
6

我有很多不同大小的圖像(即1024x768和900x942)和30秒的音頻文件(audio.mp3),我需要從它們創建視頻。將圖像和音頻加入結果視頻

我現在試圖將其與:結果%d.png(1〜4)和audio.mp3

ffmpeg -y -i result%d.png -i audio.mp3 -r 30 -b 2500k -vframes 900 
-acodec libvo_aacenc -ab 160k video.mp4 

視頻video.mp4擁有30秒,但所述3的第一圖像被顯示當最後一個圖像保持到音頻結束時,非常快。

每個圖像需要以相同的時間顯示,直到音頻結束。任何人都知道如何做到這一點?

圖像的數量有時會有所不同。

+0

嗨,我也在尋求一種方式相結合的音頻文件和圖像,以創建一個視頻。我想出了這個命令:ffmpeg -i allmapeople.mp3 -i Penguins.jpg video_finale.mpg 我嘗試了很多2個使用ffmpeg生成.so文件的教程。但我仍然無法找到將音頻和圖像結合起來的方法。請幫幫我!!! – TharakaNirmana

回答

0

這應有助於:http://ffmpeg.org/trac/ffmpeg/wiki/Create%20a%20video%20slideshow%20from%20images

使用-r,你可以設置你希望每個圖像顯示的秒數。

+0

嗨,我也在搜索一種方式來創建一個視頻通過結合一個音頻文件和一個圖像。我想出了這個命令:ffmpeg -i allmapeople.mp3 -i Penguins.jpg video_finale.mpg 我嘗試了很多2個使用ffmpeg生成.so文件的教程。但我仍然無法找到將音頻和圖像結合起來的方法。請幫幫我!!! – TharakaNirmana

1

有關創建視頻= N無圖片+音頻的

步驟1)

您將創建這些圖像的視頻,

Process proc = Runtime.getRuntime().exec(ffmpeg + " -y -r "+duration +" -i " + imagePath + " -c:v libx264 -r 15 -pix_fmt yuv420p -vf fps=90 " + imageVideoPath); 
      InputStream stderr = proc.getErrorStream(); 
      InputStreamReader isr = new InputStreamReader(stderr); 
      BufferedReader br = new BufferedReader(isr); 
      String line = null; 
      while ((line = br.readLine()) != null) 
      {  
       //System.out.println(line); 
      } 
      int exitVal = proc.waitFor(); 
      proc.destroy();  

其中持續時間=圖片數量/音頻持續時間即1秒內你想要多少圖片

步驟2)

Process proc4VideoAudio = Runtime.getRuntime().exec(ffmpeg +" -i " + imageVideoPath + " -i "+ audioPath + " -map 0:0 -map 1:0 " + videoPath); 
       InputStream stderr1 = proc4VideoAudio.getErrorStream(); 
       InputStreamReader isr1 = new InputStreamReader(stderr1); 
       BufferedReader br1 = new BufferedReader(isr1); 
       String line1 = null; 
       while ((line1 = br1.readLine()) != null) 
       {  
        //System.out.println(line1); 
       } 
       int exitVal1 = proc4VideoAudio.waitFor();  
       proc4VideoAudio.destroy(); 

步驟1和步驟2都可以按順序運行。如果你想手動執行,那麼只有run Runtime.getTime.exec(..)

它下面的代碼是使它同步。

**還要注意FFMPEG聲明從圖像和音頻一步創建視頻,給出了與您所提到的相同的問題,如果不是這樣,解決方案對於給定音頻文件的固定數量的圖像將是靜態的。

這些ImagePath的,將videoPath,audioPath都是String

3

FFMPEG版本:3.2.1-1

UBUNTU 16.04.1

試想一下,你有一個名爲MP3音頻文件wow.mp3在在這種情況下,以下命令將以秒爲單位獲取mp3的持續時間。

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 wow.mp3 

一旦你的持續時間以秒爲單位(想象我得到了11.36秒)。現在,因爲我有3張圖片,我要運行(11.36/3 = 3.79),每幅圖像,那麼請使用以下命令:

ffmpeg -y -framerate 1/3.79 -start_number 1 -i ./swissGenevaLake_%d.jpg -i ./akib.mp3 -c:v libx264 -r 25 -pix_fmt yuv420p -c:a aac -strict experimental -shortest output.mp4 

此處提供的圖片./swissGenevaLake_1.jpg,./swissGenevaLake_2.jpg ,和./swissGenevaLake_3.jpg。

-framerate 1/3.784表示每個圖像運行3.784秒。 v libx264:

-start_number 1裝置,具有圖像數之一,這意味着./swissGenevaLake_1.jpg

-c開始視頻編解碼器H.264

-r 25:輸出視頻幀率25

-pix_fmt yuv420p:輸出視頻像素格式。

-c:一個AAC:使用AAC

-shortest編碼音頻:只要音頻完成結束視頻。

output.mp4:輸出文件名

免責聲明:我沒有測試過合併多種尺寸的圖像。

參考文獻:

https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images

https://trac.ffmpeg.org/wiki/Encode/AAC

http://trac.ffmpeg.org/wiki/FFprobeTips