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
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
@ user2650277 verlieren: Natürlich. Passen Sie einfach 'fps' an, sagen Sie 25? – AkselA
Hat 'ffmpeg -i big_buck_bunny_480p_surround-fix.avi -q: v 1 ./vidtest/out%d.jpg' macht nicht das gleiche – user2650277