मैं .gif
एक .mp4
वीडियो से एक एनिमेटेड बनाना चाहते हैं । मैं इसे कमांड लाइन से करना पसंद करूँगा, इसलिए कृपया केवल कमांड लाइन टूल को सूचीबद्ध करें।
मैं .gif
एक .mp4
वीडियो से एक एनिमेटेड बनाना चाहते हैं । मैं इसे कमांड लाइन से करना पसंद करूँगा, इसलिए कृपया केवल कमांड लाइन टूल को सूचीबद्ध करें।
जवाबों:
ffmpeg
3.4.4 इसे सीधे Ubuntu 18.04 पर कर सकते हैं
आप कुछ का उपयोग करना चाहते हैं:
sudo apt-get install ffmpeg
wget -O opengl-rotating-triangle.mp4 https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.mp4?raw=true
ulimit -Sv 1000000
ffmpeg \
-i opengl-rotating-triangle.mp4 \
-r 15 \
-vf scale=512:-1 \
-ss 00:00:03 -to 00:00:06 \
opengl-rotating-triangle.gif
इस पोस्ट पर वर्णित टेस्ट जनरेशन प्रक्रिया ।
एक और प्रत्यक्ष:
sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
यह भी काम करता है, लेकिन आउटपुट जीआईएफ इनपुट वीडियो की तुलना में बड़ा होगा, क्योंकि वीडियो प्रारूप फ्रेम भर में समझदारी से संपीड़ित करते हैं।
तर्क टूटना:
ulimit -Sv 1000000
: कार्यक्रम के लिए अधिकतम 1 जीबी मेमोरी का आकार निर्धारित करें।
ज्यादातर मैं यह सुनिश्चित करता हूं कि कमांड पिछले कुछ प्रयासों की तरह असीमित मेमोरी का उपयोग नहीं कर रहा है।
500Mb ffmpeg साझा पुस्तकालयों को लोड करने में विफल रहता है ... आपके रैम को अपग्रेड करने का समय?
-ss 00:00:03 -to 00:00:06
: वीडियो को काटने के लिए प्रारंभ और समाप्ति समय।
नहीं है, GIFs सबसे अच्छा तरीका है करने के लिए नहीं कर रहे हैं समुद्री डाकू ऑनलाइन वीडियो वितरित करते हैं।
इसे भी देखें: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-use-ffmpeg
-vf scale=512:-1
: आउटपुट 512
पिक्सेल को ऊँचाई में बनाएँ, और पहलू अनुपात को बनाए रखने के लिए चौड़ाई समायोजित करें।
यह वेब के लिए छवियों के लिए सामान्य उपयोग का मामला है, जिसमें वीडियो की तुलना में बहुत कम रिज़ॉल्यूशन होता है।
यदि आप इस विकल्प को हटाते हैं, तो आउटपुट GIF की इनपुट वीडियो के समान ऊँचाई होती है।
मूल वीडियो ऊंचाई को उदाहरण के लिए पाया जा सकता है ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/103178#1035178 और हमारे मामले में 1024 x 1024।
-r 15
: एफपीएस का नमूना लेना।
उदाहरण के लिए, मूल वीडियो 30 एफपीएस था, इसलिए -r 15
इसका मतलब है कि ffmpeg
प्रत्येक 2 ( = 30 / 15
) में एक फ्रेम चुना जाएगा ।
कथित आउटपुट FPS को इनपुट से मिलान करने के लिए समायोजित किया जाता है, लेकिन आप एक स्पीडअप को नोटिस नहीं करेंगे, केवल अधिक ग्रैन्युलैरिटी।
इनपुट एफपीएस के साथ पाया जा सकता है ffprobe
, और इनपुट फ्रेम की कुल संख्या के mediainfo
रूप में समझाया जा सकता है : https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -इन-ए-वीडियो-ऑन-द लिनक्स कमांड लाइन / 1044894 # 1044894
मैं इस विकल्प की सलाह देता हूं क्योंकि वीडियो प्रारूपों में आमतौर पर बड़े रिज़ॉल्यूशन के कारण उच्च फ्रैमरेट होता है। छोटे जीआईएफ के साथ, कम फ्रैमरेट कम ध्यान देने योग्य है, और इसलिए हम कुछ फ़्रेमों को छोड़ सकते हैं और छोटे जीआईएफ बना सकते हैं।
इससे पहले पूर्व 18.04: ffmpeg
+ convert
मध्यवर्ती फाइल बिना एक लाइनर
ffmpeg
पहले GIF को हैंडल नहीं कर सकता था। मेरे पास सबसे अच्छा कुछ था:
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
कुछ तर्कों की व्याख्या:
-loop 0
: आउटपुट के लिए नेटस्केप Gif एक्सटेंशन लूप काउंट फ़ील्ड जोड़ें। 0 का मतलब अनंत लूप है, जैसा कि यहां वर्णित है: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extension eog
, firefox
और क्रोमियम सभी लूप डिफ़ॉल्ट रूप से इसके बिना भी, इसलिए मुझे यकीन नहीं है कि यह कैसे संभव है अब है।
-delay 5
: समय अगली फ्रेम दिखाने से पहले इंतजार किया, दूसरे के hundreths में, के रूप में वर्णित: https://en.wikipedia.org/wiki/GIF#Animated_GIF बाइट 324. तो 100
1 एफपीएस, का 5
मतलब है 1 / 0.5 == 20FPS
।
यहां तक कि अगर आप ऊंचाई और फ्रैमरेट को कम करते हैं, तो भी आउटपुट जीआईएफ वीडियो से बड़ा हो सकता है, क्योंकि "वास्तविक" गैर-जीआईएफ वीडियो प्रारूप फ़्रेम में संकुचित होते हैं, जबकि जीआईएफ केवल व्यक्तिगत फ़्रेम को संकुचित करता है।
एक प्रत्यक्ष:
convert input.mp4 rpi2-bare-metal-blink.gif
काम किया है, लेकिन स्मृति अतिप्रवाह के कारण मेरे कंप्यूटर को लगभग मार डाला है, और मेरी 2s 1Mb इनपुट फ़ाइल के लिए एक ouptput 100x बड़ा उत्पादन किया है। शायद एक दिन ImageMagick पकड़ लेगा।
इसे भी देखें: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-use-ffmpeg-with-reasonable-quality
उबंटू 17.10 पर परीक्षण किया गया।
scale=320:-1
-r 10
से जीआईएफ वापस सामान्य गति में आ जाएगा।
दो चरण:
वीडियो से छवियाँ निकालें
अपनी .mp4
फ़ाइल के साथ उसी निर्देशिका में फ़्रेम नामक एक निर्देशिका बनाएँ । कमांड का उपयोग करें:
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.jpg'
-r 5 stands for FPS value
for better quality choose bigger number
adjust the value with the -delay in 2nd step
to keep the same animation speed
%03d gives sequential filename number in decimal form
cd frames
convert -delay 20 -loop 0 *.jpg myimage.gif
-delay 20 means the time between each frame is 0.2 seconds
which match 5 fps above.
When choosing this value
1 = 100 fps
2 = 50 fps
4 = 25 fps
5 = 20 fps
10 = 10 fps
20 = 5 fps
25 = 4 fps
50 = 2 fps
100 = 1 fps
in general 100/delay = fps
-loop 0 means repeat forever
डॉक्स: जीआईएफ विकल्प परिवर्तित करें
आप एक बड़ी फ़ाइल के साथ समाप्त हो जाएंगे, एक छोटी फ़ाइल प्राप्त करने के लिए दूसरे चरण कमांड में जोड़ सकते हैं विकल्पों पर gif को अनुकूलित करने के लिए छवि मैजिक गाइड पर एक नज़र डालें ।
frames
काम करने के लिए पहले कमांड के लिए फ़ोल्डर मौजूद होना चाहिए।
-layers Optimize
अंतिम convert
कमांड में, पहले जोड़ें *.jpg
। हालांकि आउटपुट की जाँच करें, यह प्रभावित हो सकता है। मेरे लिए इसने 5 एमबी से लेकर 700 केबी तक के जीआईएफ के आकार को बिना किसी नुकसान के कम कर दिया। गुणवत्ता में कमी
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
।
gifify एक ऑल-इन-वन नोड-आधारित उपयोगिता है जो रूपांतरण को सरल बनाती है। यह पर निर्भर करता है nodejs
, npm
, ffmpeg
, और imagemagick
जो सभी रेपोस में उपलब्ध हैं।
आपके द्वारा npm
स्थापित किए जाने के बाद आप gifify
विश्व स्तर पर स्थापित कर सकते हैं :
npm install -g gifify
एक वीडियो को .GIF के साथ परिवर्तित किया जा सकता है:
gifify video.mp4 -o video.gif
आप वैकल्पिक रूप से वीडियो में एक शुरुआत और अंत स्थिति सेट कर सकते हैं और एक पाठ शीर्षक जोड़ सकते हैं:
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
Conversion छोटे वीडियो के साथ भी रूपांतरण पूरा होने में कई मिनट लग सकते हैं।
नोट:
ffmpeg
औरimagemagick
कुछ विशिष्ट पुस्तकालयों (यानी libass और fontconfig तदनुसार) के साथ संकलित करने की आवश्यकता हो सकती है।
gifsicle
, लेकिन फिर एक और समस्या तब होती है: github.com/vvo/gifify/issues/95 इसके अलावा, आप मन होगा हमें क्या निर्देशिका में NPM novices कह चलाने के लिए npm install
और क्या रूट के रूप में इसे चलाने या नहीं? धन्यवाद!