2017-04-08 5 views
0

Ich versuche, ein Video extrahieren die Frames und die audio.Then ich etwas Kompression auf die Bilder und dann möchte ich die Bilderrahmen mit dem Audio kombinieren, um die zu erstellen Video.Kombinieren einer Bildsequenz mit Audio und ein Video

1.Erstellen Rahmen von Video basierend auf fps (lossless)

ffmpeg -i big_buck_bunny_480p_surround-fix.avi -q:v 1 ./vidtest/out%d.jpg 

Das Problem hierbei ist, dass die Qualität des Bildes ist 94 basierend auf graphicsmagick, wie kann ich den Rahmen in Original-Qualität extrahieren.

2.Getting das Audio

ffmpeg -i big_buck_bunny_480p_surround-fix.avi -vn -acodec copy big_buck_bunny_480p_surround-fix.ac3 

3.How i kombinieren Sie scheint das Audio mit den Bildsequenzen

Antwort

1

Es ist wie Sie bereits wissen, wie der Audio-Stream von einem Video zu extrahieren, so dass wir überspringe diesen Schritt.

Nehmen wir an, Sie haben eine Videodatei mit dem Namen video.mp4 und eine Audiodatei mit dem Namen audio.mp3. Sie möchten Standbilder aus dem Video aufnehmen und eine Diashow mit audio.mp3 als Audiospur erstellen.

Zuerst werden wir die Stills extrahieren. fps=1/10 bedeutet, dass Frames jede zehnte Sekunde extrahiert werden. -ss 00:00:5 bedeutet, dass wir fünf Sekunden nach dem Start beginnen. Das erste Bit eines Videos ist oft ein Fade-In, das hauptsächlich Schwarz enthält. Daher könnte es wünschenswert sein, das zu überspringen.

Als nächstes werden wir zählen, wie viele Bilder resultierten. Dies wird nützlich sein, wenn wir die Bildrate der Diashow festlegen.

imgcount=$(find . -maxdepth 1 -name "image*" | wc -l) 

echo $imgcount 

Die Dauer der Audiospur wäre auch nett zu wissen. Bei MP3 und ähnlichen Formaten, insbesondere wenn sie mit einer variablen Bitrate codiert sind, kann eine Schätzung der Dauer schwierig sein. Um dies zu umgehen, kann die Audiodatei zB in eine WAV-Datei konvertiert werden und dann die geschätzte Dauer.

adur=$(ffprobe -v error -select_streams a:0 -show_entries stream=duration \ 
    -of default=noprint_wrappers=1:nokey=1 audio.mp3) 

echo $adur 

Jetzt werden wir die Bilder in eine Diashow zusammenfügen. $imgcount/$adur gibt die Anzeigefrequenz der Standbilder an, sodass die Dauer der Audiodatei einigermaßen gut entspricht. -r 25 gibt die tatsächliche Bildrate des Videos an. Nicht alle Formate und Videoplayer akzeptieren ungewöhnliche Bildraten.

ffmpeg -framerate $imgcount/$adur -i image%03d.png -c:v libx264 -r 25 \ 
    -pix_fmt yuv422p slideshow.mp4 

Dies wird die Audiodatei und die Diashow-Datei muxen und auf die Dauer des kürzesten der beiden schneiden. Dies funktioniert, wenn das Containerformat den Codec der Audiodatei unterstützt, wenn die Audiodatei nicht erneut konvertiert werden muss oder ein anderes Containerformat gewählt wurde. Ich finde Matroska (.mkv) sehr nützlich. Im Fall von .avi und .ac3 oder .mp4 und .mp3 sollte es kein Problem geben.

ffmpeg -i slideshow.mp4 -i audio.mp3 -codec copy -shortest slideshow-sound.mp4 
+0

I extrahierte bereits den Rahmen auf der Grundlage der ursprünglichen Framerate des Videos vom ersten command.If i wählen Rahmen zu extrahieren alle 10 Sekunden i werden Daten (Frames) – user2650277

+0

@ user2650277 verlieren: Natürlich. Passen Sie einfach 'fps' an, sagen Sie 25? – AkselA

+0

Hat 'ffmpeg -i big_buck_bunny_480p_surround-fix.avi -q: v 1 ./vidtest/out%d.jpg' macht nicht das gleiche – user2650277

Verwandte Themen