Deze regel werkte prima, maar ik wil een videobestand maken van afbeeldingen in een andere map.
De namen van afbeeldingen in mijn map zijn:
img001.jpg
img002.jpg
img003.jpg
...
Hoe kan ik afbeeldingsbestanden uit een andere map invoeren? Voorbeeld: C:\mypics
Ik heb deze opdracht geprobeerd, maar ffmpeg
genereerde een video met alleen de eerste afbeelding (img001.jpg).
ffmpeg -r 1/5 -start_number 0 -i C:\myimages\img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Antwoord 1, autoriteit 100%
Bekijk de Maak een videodiavoorstelling van afbeeldingen – FFmpeg
Als je video de frames niet correct weergeeftAls je problemen ondervindt, zoals het eerste beeld dat wordt overgeslagen of slechts voor één frame wordt weergegeven, gebruik dan het fps-videofilterin plaats van -rvoor de output framerate
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
Als alternatief kan het formaat videofilter worden toegevoegd aan de filterketen om -pix_fmt yuv420pzoals “fps=25,format=yuv420p”te vervangen. Het voordeel van deze methode is dat u kunt bepalen welk filter als eerste wordt gebruikt
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4
Ik heb onderstaande parameters getest, het werkte voor mij
"e:\ffmpeg\ffmpeg.exe" -r 1/5 -start_number 0 -i "E:\images\01\padlock%3d.png" -c:v libx264 -vf "fps=25,format=yuv420p" e:\out.mp4
onderstaande parameters werkten ook, maar de eerste afbeelding wordt altijd overgeslagen
"e:\ffmpeg\ffmpeg.exe" -r 1/5 -start_number 0 -i "E:\images\01\padlock%3d.png" -c:v libx264 -r 30 -pix_fmt yuv420p e:\out.mp4
een video maken van afbeeldingen die in verschillende mappen zijn geplaatst
Voeg eerst afbeeldingspaden toe aan imagepaths.txtzoals hieronder.
# this is a comment details https://trac.ffmpeg.org/wiki/Concatenate
file 'E:\images\png\images__%3d.jpg'
file 'E:\images\jpg\images__%3d.jpg'
Voorbeeld van gebruik als volgt;
"h:\ffmpeg\ffmpeg.exe" -y -r 1/5 -f concat -safe 0 -i "E:\images\imagepaths.txt" -c:v libx264 -vf "fps=25,format=yuv420p" "e:\out.mp4"
-safe 0parameter voorkomt fout Onveilige bestandsnaam
Verwante links
FFmpeg maakt een video van afbeeldingen die in verschillende mappen zijn geplaatst
FFMPEG An Intermediate Guide/image sequence
Antwoord 2, autoriteit 86%
-pattern_type glob
Deze geweldige optie maakt het in veel gevallen gemakkelijker om de afbeeldingen te selecteren.
Diashowvideo met één afbeelding per seconde
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Voeg er wat muziek aan toe, cutoff wanneer de vermoedelijk langere audio wanneer de afbeeldingen eindigen:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Hier zijn twee demo’s op YouTube:
Wees een hippie en gebruik het door Theora gepatenteerde videoformaat:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
Uw afbeeldingen moeten natuurlijk alfabetisch worden gesorteerd, meestal als:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
en ga zo maar door.
Ik zou er ook eerst voor zorgen dat alle te gebruiken afbeeldingen dezelfde beeldverhouding hebben, mogelijk door ze bij te snijden met imagemagick
of nomacsvooraf, zodat ffmpeg geen moeilijke beslissingen hoeft te nemen. Vooral de breedte moet deelbaar zijn door 2, anders mislukt de conversie met: “breedte niet deelbaar door 2”.
Video met normale snelheid met één afbeelding per frame bij 30 FPS
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
Zo ziet het eruit:
GIF gegenereerd met: https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Voeg er wat audio aan toe:
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
Resultaat: https://www.youtube.com/watch?v=HG7c7lldhM4
Dit zijn de testmedia die ik heb gebruikt:a
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
Afbeeldingen gegenereerd met: Hoe om GLUT/OpenGL te gebruiken om naar een bestand te renderen?
Het is cool om te zien hoeveel de video de beeldreeks veel beter comprimeert dan ZIP, omdat het in staat is om frames te comprimeren met gespecialiseerde algoritmen:
opengl-rotating-triangle.mp4
: 340Kopengl-rotating-triangle.zip
: 7,3 miljoen
Een muziekbestand converteren naar een video met een vaste afbeelding voor YouTube-upload
Beantwoord op: https:// superuser.com/questions/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
Stap voor stap een volledig realistische case study-configuratie voor diavoorstellingen
Het maken van diavoorstellingen houdt iets meer in dan het uitvoeren van een enkele ffmpeg-opdracht, dus hier volgt een interessanter gedetailleerd voorbeeld geïnspireerd door deze tijdlijn.
De invoermedia ophalen:
mkdir -p orig
cd orig
wget -O 1.png https://upload.wikimedia.org/wikipedia/commons/2/22/Australopithecus_afarensis.png
wget -O 2.jpg https://upload.wikimedia.org/wikipedia/commons/6/61/Homo_habilis-2.JPG
wget -O 3.jpg https://upload.wikimedia.org/wikipedia/commons/c/cb/Homo_erectus_new.JPG
wget -O 4.png https://upload.wikimedia.org/wikipedia/commons/1/1f/Homo_heidelbergensis_-_forensic_facial_reconstruction-crop.png
wget -O 5.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Sabaa_Nissan_Militiaman.jpg/450px-Sabaa_Nissan_Militiaman.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
cd ..
# Convert all to PNG for consistency.
# https://unix.stackexchange.com/questions/29869/converting-multiple-image-files-from-jpeg-to-pdf-format
# Hardlink the ones that are already PNG.
mkdir -p png
mogrify -format png -path png orig/*.jpg
ln -P orig/*.png png
Nu kijken we snel naar alle afbeeldingsformaten om de uiteindelijke beeldverhouding te bepalen:
identify png/*
die uitvoer:
png/1.png PNG 557x495 557x495+0+0 8-bit sRGB 653KB 0.000u 0:00.000
png/2.png PNG 664x800 664x800+0+0 8-bit sRGB 853KB 0.000u 0:00.000
png/3.png PNG 544x680 544x680+0+0 8-bit sRGB 442KB 0.000u 0:00.000
png/4.png PNG 207x238 207x238+0+0 8-bit sRGB 76.8KB 0.000u 0:00.000
png/5.png PNG 450x600 450x600+0+0 8-bit sRGB 627KB 0.000u 0:00.000
dus de klassieke beeldverhouding van 480p (640×480 == 4/3) lijkt geschikt.
Voer één conversie uit met minimaal formaat om de breedten gelijk te maken (TODO
automatiseren voor elke breedte, hier heb ik handmatig naar identify
-uitvoer gekeken en breedte en hoogte met één verminderd):
mkdir -p raw
convert png/1.png -resize 556x494 raw/1.png
ln -P png/2.png png/3.png png/4.png png/5.png raw
ffmpeg -framerate 1 -pattern_type glob -i 'raw/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p raw.mp4
Dit levert verschrikkelijke output op, want zoals blijkt uit:
ffprobe raw.mp4
ffmpeg neemt gewoon de grootte van de eerste afbeelding, 556×494, en converteert vervolgens alle andere naar die exacte grootte, waardoor hun beeldverhouding wordt verbroken.
Laten we de afbeeldingen nu automatisch converteren naar de beoogde beeldverhouding van 480p door bij te snijden volgens ImageMagick: hoe een afbeelding minimaal bijsnijden tot een bepaalde beeldverhouding?
mkdir -p auto
mogrify -path auto -geometry 640x480^ -gravity center -crop 640x480+0+0 png/*.png
ffmpeg -framerate 1 -pattern_type glob -i 'auto/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p auto.mp4
Dus nu is de beeldverhouding goed, maar onvermijdelijk moest er wat worden bijgesneden, waardoor interessante delen van de afbeeldingen werden versneden.
De andere optie is om een zwarte achtergrond te gebruiken om dezelfde beeldverhouding te krijgen als weergegeven op: Formaat wijzigen zodat deze in een kader past en achtergrond instellen op zwart op “leeg” gedeelte
mkdir -p black
ffmpeg -framerate 1 -pattern_type glob -i 'black/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p black.mp4
Over het algemeen kun je echter idealiter afbeeldingen selecteren met dezelfde of vergelijkbare beeldverhoudingen om deze problemen te voorkomen.
Over de CLI-opties
Merk echter op dat ondanks de naam, -glob
dit niet zo algemeen is als shell Glob-patronen, bijvoorbeeld: -i '*'
mislukt: https://trac.ffmpeg.org/ticket/3620(blijkbaar omdat het bestandstype wordt afgeleid uit de extensie).
-r 30
maakt de -framerate 1
video 30 FPS om bugs in spelers zoals VLC voor lage framerates te verhelpen: VLC loopt vast voor lage 1 FPS-video gemaakt van afbeeldingen met ffmpegDaarom wordt elk frame 30 keer herhaald om het gewenste effect van 1 beeld per seconde te behouden.
Volgende stappen
U wilt ook:
-
knip het gewenste deel van de audio uit voordat je eraan deelneemt: De video’s knippen op basis van begin- en eindtijd met ffmpeg
ffmpeg -i in.mp3 -ss 03:10 -to 03:30 -c copy out.mp3
TODO: leer meerdere audiobestanden in de video te knippen en samen te voegen zonder tussenliggende bestanden, ik ben er vrij zeker van dat het mogelijk is:
- ffmpeg knip en concat enkele opdrachtregel
- https://video.stackexchange.com/questions/21315 /concatenating-split-media-files-using-concat-protocol
- https://superuser.com/questions /587511/concatenate-multiple-wav-files-using-single-command-without-extra-file
Getest op
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Bibliografie
- http://trac.ffmpeg.org/wiki/Slideshowofficiële wiki
Antwoord 3, autoriteit 12%
Eenvoudige versie van de documenten
Werkt bijzonder goed voor Google Earth Studio-afbeeldingen:
ffmpeg -framerate 24 -i Project%03d.png Project.mp4
Antwoord 4, autoriteit 9%
cat *.png | ffmpeg -f image2pipe -i - output.mp4
van wiki
Antwoord 5
Om frames van video te maken:
ffmpeg\ffmpeg -i %video% test\thumb%04d.jpg -hide_banner
Optioneel: verwijder frames die u niet wilt in video-uitvoer
(nauwkeuriger dan het bijsnijden van video met -ss
& -t
)
Maak vervolgens een video van afbeelding/frames, bijv.:
ffmpeg\ffmpeg -framerate 30 -start_number 56 -i test\thumb%04d.jpg -vf format=yuv420p test/output.mp4