2012-12-11 1 views
6

Ich habe viele Bilder mit verschiedenen Größen (d. H. 1024x768 und 900x942) und eine Audio-Datei (audio.mp3) von 30 Sekunden und ich muss ein Video von ihnen erstellen.Verbinden Sie Bilder und Audio zum Ergebnis Video

Ich versuche es jetzt mit: Ergebnis% d.png (1 bis 4) und Audio.mp3

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

Das Video video.mp4 30 Sekunden hat, aber die drei ersten Bilder zeigten sich sehr schnell, wenn das letzte Bild bis zum Ende des Audios bleibt.

Jedes Bild muss in einer gleichen Zeit bis zum Ende des Audio gezeigt werden. Weiß jemand wie?

Die Anzahl der Bilder variiert manchmal.

+0

Hallo, ich bin auf der Suche auch die Möglichkeit, ein Video durch Kombinieren einer Audio-Datei und ein Bild zu erzeugen. Ich habe den Befehl dafür herausgefunden: ffmpeg -i allmapeople.mp3 -i Penguins.jpg video_finale.mpg Ich habe viele 2 Tutorials mit ffmpeg ausprobiert, die die .so-Datei erzeugt. Aber ich konnte immer noch keine Möglichkeit finden, ein Audio und ein Bild zu kombinieren. Bitte hilf mir!!! – TharakaNirmana

Antwort

0

sollten Diese helfen: -rhttp://ffmpeg.org/trac/ffmpeg/wiki/Create%20a%20video%20slideshow%20from%20images

verwenden, können Sie die Anzahl von Sekunden können Sie jedes Bild angezeigt werden soll.

+0

Hallo, ich suche auch eine Möglichkeit, ein Video zu erstellen, indem Sie eine Audiodatei und ein Bild kombinieren. Ich habe den Befehl dafür herausgefunden: ffmpeg -i allmapeople.mp3 -i Penguins.jpg video_finale.mpg Ich habe viele 2 Tutorials mit ffmpeg ausprobiert, die die .so-Datei erzeugt. Aber ich konnte immer noch keine Möglichkeit finden, ein Audio und ein Bild zu kombinieren. Bitte hilf mir!!! – TharakaNirmana

1

Für Video-Erstellung = n nicht von Image + Audio

Schritt 1) ​​

Sie Video dieser Bilder erstellen wird, wie

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();  

Wo Dauer =/Anzahl der Bilder Dauer des Audiomaterials dh in 1 Sek. Möchten Sie, wie viele Bilder

Schritt 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(); 

Schritt 1 und Schritt 2 können jetzt nacheinander ausgeführt werden. Wenn Sie es manuell tun möchten, dann nur run Runtime.getTime.exec(..)

Der Code darunter ist es synchronisiert zu machen.

** Beachten Sie auch die Anweisung von FFMPEG zum Erstellen von Video in einem Schritt von Bildern und Audio, gibt Ihnen das gleiche Problem wie von Ihnen erwähnt, und wenn nicht die Lösung statisch für die Anzahl der Bilder für bestimmte Audiodatei.

Diese imagePath, videoPath, audioPath sind alle Strings

3

FFMPEG Version: 3.2.1-1

UBUNTU 16.04.1

Stellen Sie sich vor, Sie haben einen MP3-Audiodatei mit dem Namen wow.mp3 In In diesem Fall wird der folgende Befehl die Dauer des MP3 in Sekunden erhalten.

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

Sobald Sie die Dauer in Sekunden haben (man stelle ich 11,36 Sekunden vor). Nun, da ich 3 Bilder haben, möchte ich jedes Bild laufen (11.36/3 = 3,79), dann benutzen Sie bitte folgendes:

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 

Hier sind die Bilder ./swissGenevaLake_1.jpg, ./swissGenevaLake_2.jpg und ./swissGenevaLake_3.jpg.

-framerate 1/3.784 bedeutet, jedes Bild läuft für 3.784 Sekunden.

-start_number 1 bedeutet, beginnt mit dem Bild Nummer eins, was bedeutet, ./swissGenevaLake_1.jpg

-c: v libx264: Video-Codec H.264

-R 25: Ausgang 25 Videoframerate

-pix_fmt yuv420p: Ausgabe-Video-Pixel-Format.

-c: a aac: kodieren die Audio aac mit

-shortest: das Video beenden, sobald der Ton erfolgt.

output.mp4: Name der Ausgabedatei

Haftungsausschluss: habe ich nicht getestet Bilder von mehreren Größen zu verschmelzen.

Referenzen:

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

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

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