FFmpeg से छवियों से वीडियो कैसे बनाएं?


163
ffmpeg -r 1/5 -start_number 2 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

इस लाइन ने ठीक काम किया लेकिन मैं दूसरे फ़ोल्डर में छवियों से एक वीडियो फ़ाइल बनाना चाहता हूं। मेरे फ़ोल्डर में छवि नाम हैं:

img001.jpg
img002.jpg
img003.jpg
...

मैं एक अलग फ़ोल्डर से छवियों को कैसे इनपुट कर सकता हूं? उदाहरण:C:\mypics

मैंने इस कमांड को आज़माया लेकिन ffmpegकेवल पहली छवि (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

जवाबों:


167

देखें छवियों से एक वीडियो स्लाइड शो बनाएँ - FFmpeg

यदि आपका वीडियो फ़्रेम को सही ढंग से नहीं दिखाता है, यदि आप समस्याओं का सामना करते हैं, जैसे कि पहली छवि को छोड़ दिया जाता है या केवल एक फ्रेम के लिए दिखाता है, तो आउटपुट फ्रेम के लिए -r के बजाय एफपीएस वीडियो फ़िल्टर का उपयोग करें

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4

वैकल्पिक रूप से प्रारूप वीडियो फिल्टर को फिल्टर श्रृंखला में जोड़ा जा सकता है -pix_fmt yuv420p जैसे "एफपीएस = 25, प्रारूप = yuv420p" । इस पद्धति का लाभ यह है कि आप नियंत्रित कर सकते हैं कि कौन सा फ़िल्टर पहले जाता है

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4

मैंने मापदंडों के नीचे परीक्षण किया, यह मेरे लिए काम किया

"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

नीचे मापदंडों ने भी काम किया लेकिन यह हमेशा पहली छवि को छोड़ देता है

"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

विभिन्न फ़ोल्डरों में रखी गई छवियों से वीडियो बनाना

सबसे पहले, नीचे की तरह imagepaths.txt में छवि पथ जोड़ें ।

# 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'

नमूना उपयोग निम्नानुसार है;

"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 0 पैरामीटर असुरक्षित फ़ाइल नाम त्रुटि को रोकता है

सम्बंधित लिंक्स

FFmpeg विभिन्न फ़ोल्डरों में रखी गई छवियों से एक वीडियो बना रहा है

FFMPEG एक मध्यवर्ती गाइड / छवि अनुक्रम

कॉनटेनटेट - FFmpeg


"यदि आपका वीडियो फ़्रेम को सही ढंग से नहीं दिखाता है, यदि आप समस्याओं का सामना करते हैं, जैसे कि पहली छवि को छोड़ दिया जाता है या केवल एक फ्रेम के लिए दिखाता है, तो इसके बजाय एफपीएस वीडियो फ़िल्टर का उपयोग करें " क्षमा करें लेकिन क्या आप इसे समझा सकते हैं कि आप क्या कहते हैं "एफपीएस वीडियो फिल्टर "बिल्कुल?
अर्नुस्चकी 11

3
जहाँ तक मुझे पता है -r पैरामीटर चर फ्रेम दर है इसका मतलब यह है कि वांछित उत्पादन फ्रेम दर को प्राप्त करने के लिए FFMPEG फ्रेम को गिरा या डुप्लिकेट कर सकता है। एफपीएस फ़िल्टर "-vf एफपीएस = मूल्य" का उपयोग करके FFMPEG को निरंतर फ्रेम दर का उत्पादन करने के लिए मजबूर करें। देखें छवियों से एक वीडियो स्लाइड शो बनाएँ - FFmpeg , और यह (तकनीकी) -r और एफपीएस फिल्टर के बीच क्या अंतर है? । तो -r पैरामीटर का उपयोग करके कभी-कभी पहली छवि को छोड़ना couse ..
khan

इस सूची में पहला कमांड, ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4काम करने के लिए लग रहा था, लेकिन अंत में एक वीडियो था जो किसी भी खिलाड़ी (उबंटू पर) द्वारा अपठनीय था। वीएनसी ने कहा, "मोव परमाणु नहीं मिला"। इस qt-faststartत्रुटि को उत्पन्न करने की कोशिश करने से "फ़ाइल में अंतिम परमाणु एक
मोव

149

-pattern_type glob

यह शानदार विकल्प कई मामलों में छवियों का चयन करना आसान बनाता है।

स्लाइडशो वीडियो प्रति सेकंड एक छवि के साथ

ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
  -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

इसमें कुछ संगीत जोड़ें, जब चित्र समाप्त हो जाते हैं तो संभवतः अधिक लंबा ऑडियो कट करें:

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

यहां YouTube पर दो डेमो दिए गए हैं:

एक हिप्पी बनें और थियोरा पेटेंट-अनएकेनम्बर वीडियो प्रारूप का उपयोग करें :

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

आपकी छवियों को निश्चित रूप से वर्णानुक्रम में क्रमबद्ध किया जाना चाहिए, आमतौर पर निम्नानुसार:

0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg

और इसी तरह।

मैं पहले यह भी सुनिश्चित करूंगा कि उपयोग की जाने वाली सभी छवियों का एक ही पहलू अनुपात हो, संभवतः उन्हें पहले से imagemagickया नोमेक के साथ क्रॉप करके , ताकि ffmpeg को कठोर निर्णय नहीं लेने पड़ें । विशेष रूप से, चौड़ाई को 2 से विभाज्य होना चाहिए, अन्यथा रूपांतरण विफल रहता है: "चौड़ाई 2 से विभाज्य नहीं"।

30 एफपीएस पर प्रति फ्रेम एक छवि के साथ सामान्य गति वीडियो

ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
  -c:v libx264 -pix_fmt yuv420p out.mp4

यहाँ यह कैसा दिखता है:

जीआईएफ के साथ उत्पन्न: /ubuntu/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574

इसमें कुछ ऑडियो जोड़ें:

ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
  -i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4

परिणाम: https://www.youtube.com/watch?v=HG7c7lldhM4

ये परीक्षण मीडिया हैं जिनका मैंने उपयोग किया है: 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

: चित्रों से बनाए गए का उपयोग कैसे करें भरमार / ओपन एक फाइल करने के लिए प्रस्तुत करने के लिए?

यह देखने के लिए अच्छा है कि वीडियो जीप की तुलना में वीडियो अनुक्रम के तरीके को कितना बेहतर तरीके से संकुचित करता है क्योंकि यह विशेष एल्गोरिदम के साथ फ़्रेम में संपीड़ित करने में सक्षम है:

  • opengl-rotating-triangle.mp4: 340 कि
  • opengl-rotating-triangle.zip: 7.3M

YouTube अपलोड के लिए एक निश्चित छवि के साथ एक संगीत फ़ाइल को वीडियो में बदलें

उत्तर दिया गया: /superuser/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572

पूर्ण यथार्थवादी स्लाइड शो केस स्टडी सेटअप कदम से कदम

एकल ffmpeg कमांड चलाने की तुलना में स्लाइडशो बनाने के लिए थोड़ा अधिक है, इसलिए यहां इस समयरेखा से प्रेरित एक और दिलचस्प विस्तृत उदाहरण दिया गया है

इनपुट मीडिया प्राप्त करें:

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.
# /unix/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

अब हमारे पास अंतिम पहलू अनुपात पर निर्णय लेने के लिए सभी छवि आकारों पर एक त्वरित नज़र है:

identify png/*

कौन से आउटपुट:

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

इसलिए क्लासिक 480p (640x480 == 4/3) पहलू अनुपात उचित लगता है।

यहां तक ​​कि चौड़ाई बनाने के लिए न्यूनतम आकार बदलने के साथ एक रूपांतरण करें (किसी भी चौड़ाई के लिए TODO को स्वचालित करें, यहां मैं सिर्फ identifyआउटपुट पर देखता हूं और एक की चौड़ाई और ऊंचाई कम कर देता हूं ):

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

इससे भयानक उत्पादन होता है, क्योंकि जैसा कि देखा गया है:

ffprobe raw.mp4

ffmpeg सिर्फ पहली छवि का आकार लेता है, 556x494, और फिर अन्य सभी को उस सटीक आकार में परिवर्तित करता है, जिससे उनका पहलू अनुपात टूट जाता है।

अब इमेज को इमेज के अनुसार क्रॉप करके स्वतः ही 480p आस्पेक्ट रेशियो को टारगेट में कन्वर्ट कर दें : इमेज को न्यूनतम पहलू अनुपात में कैसे क्रॉप करें?

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

तो अब, पहलू अनुपात अच्छा है, लेकिन अनिवार्य रूप से कुछ फ़सल करनी पड़ी, जो छवियों के दिलचस्प हिस्सों को काटती है।

अन्य विकल्प काली पृष्ठभूमि के साथ पैड करना है, जिसमें समान पहलू अनुपात दिखाया गया है: एक बॉक्स में फिट करने के लिए आकार दें और पृष्ठभूमि को "खाली" भाग पर काले रंग में सेट करें

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

आम तौर पर हालांकि, आप पहली बार उन समस्याओं से बचने के लिए समान या समान पहलू अनुपात वाली छवियों का चयन करने में सक्षम होंगे।

सीएलआई विकल्पों के बारे में

ध्यान दें कि नाम के बावजूद, -globयह शेल ग्लोब पेटेंट के रूप में सामान्य नहीं है, उदाहरण के लिए: -i '*'विफल रहता है: https://trac.ffmpeg.org/ticket/3620 (जाहिरा तौर पर क्योंकि filetype एक्सटेंशन से घटाया गया है)।

-r 30-framerate 1कम फ्रैमरेट्स के लिए वीएलसी जैसे खिलाड़ियों में बग को दूर करने के लिए वीडियो को 30 एफपीएस बनाता है : वीएलसी निम्न 1 एफपीएस वीडियो के लिए एफएफएमपी के साथ छवियों से बनाया गया है इसलिए यह वांछित 1 छवि प्रति सेकंड प्रभाव रखने के लिए प्रत्येक फ्रेम को 30 बार दोहराता है।

अगला कदम

आप यह भी चाहेंगे:

TODO: वीडियो को इंटरमीडिएट फ़ाइलों के बिना कई ऑडियो फ़ाइलों को काटना और समेटना सीखें, मुझे पूरा यकीन है कि यह संभव है:

पर परीक्षण किया गया

ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04।

ग्रन्थसूची


यदि आप ffmpeg शुरू करने के लिए अजगर और सबप्रोसेस.कॉल का उपयोग कर रहे हैं, तो आपको 'इनपुट और आउटपुट फ़ाइल नामों में एकल उद्धरण का उपयोग नहीं करना चाहिए । अन्यथा यह फ़ाइलों को नहीं ढूंढेगा।
रनऑर्विथ

यह मेरे लिए बहुत अच्छा होगा, लेकिन एनपीएम पैकेज से मेरा निर्माण ffmpeg-staticग्लोब को लागू नहीं करता है। ( Pattern type 'glob' was selected but globbing is not supported by this libavformat build)
सेबी

-pix_fmtकारण Trailing options were found on the commandline.त्रुटि
एंथोनी काँग

@AnthonyKong मैं ffmpeg -framerate 1 -pattern_type glob -i '*.png' -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4Ubuntun 19.10 ffmpeg के साथ 4.1.4 पर अभी पुन: पेश नहीं कर सका , आपका संस्करण और सटीक कमांड क्या है?
सिरो सेंटिल्ली 郝海东 冠状 iro 事件 at

20

डॉक्स से सरल संस्करण

Google धरती स्टूडियो छवियों के लिए विशेष रूप से महान काम करता है :

ffmpeg -framerate 24 -i Project%03d.png Project.mp4

1
इस आउटपुट को नहीं चला सकते: [h264 @ 0x7f148cc3cc40] हार्डवेयर त्वरक चित्र को डिकोड करने में विफल रहा
Bram

नमस्ते, मैं उस आदेश को कैसे निष्पादित कर सकता हूं जो मैं अभी पा रहा हूं कि क्या आप कृपया मेरी मदद कर सकते हैं?
मासूम

@ अपने टर्मिनल या कंसोल से निर्दोष।
जोशुआ पिंटर

यह आदमी मिल गया, लेकिन प्रोजेक्ट% 3d.png ने मेरी सभी छवियों को Project001.png, Project002.png नाम के साथ एक फ़ोल्डर में नहीं चुना और इस पर केवल 2 चित्र मिले, मुझे अपने सभी चित्रों को प्राप्त करने और इसे वीडियो में बदलने के लिए क्या करना चाहिए
निर्दोष

आप उपयोग कर रहे हैं %3dया %03d?
जोशुआ पिंटर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.