আমি .gif
একটি .mp4
ভিডিও থেকে একটি অ্যানিমেটেড করতে চাই । আমি কমান্ড লাইন থেকে এটি করতে পছন্দ করব, সুতরাং দয়া করে কেবল কমান্ড লাইন সরঞ্জাম তালিকাবদ্ধ করুন।
আমি .gif
একটি .mp4
ভিডিও থেকে একটি অ্যানিমেটেড করতে চাই । আমি কমান্ড লাইন থেকে এটি করতে পছন্দ করব, সুতরাং দয়া করে কেবল কমান্ড লাইন সরঞ্জাম তালিকাবদ্ধ করুন।
উত্তর:
ffmpeg
3.4.4 এটি সরাসরি উবুন্টু 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 জিবি মেমরির আকার সেট করুন।
বেশিরভাগ ক্ষেত্রেই আমি নিশ্চিত করছি যে কমান্ডটি পূর্বের কয়েকটি প্রচেষ্টার মতো সীমাহীন মেমরি ব্যবহার করছে না।
500 এমবি ভাগ করা লাইব্রেরিগুলি লোড করতে ffmpeg ব্যর্থ করে তোলে ... আপনার র্যাম আপগ্রেড করার সময়?
-ss 00:00:03 -to 00:00:06
: ভিডিওটি কাটতে শুরু এবং শেষ সময়।
না, GIF গুলি সবচেয়ে ভালো উপায় না হয় জলদসু্য অনলাইন ভিডিওগুলি বিতরণের লাইসেন্স দেন।
-vf scale=512:-1
: 512
উচ্চতায় আউটপুট পিক্সেলগুলি তৈরি করুন এবং দিক অনুপাত বজায় রাখতে প্রস্থকে সামঞ্জস্য করুন।
এটি ওয়েবে চিত্রগুলির জন্য সাধারণ ব্যবহারের ক্ষেত্রে, যা ভিডিওর চেয়ে অনেক কম রেজোলিউশন রাখে।
আপনি যদি এই বিকল্পটি সরিয়ে থাকেন তবে আউটপুট GIF এর ইনপুট ভিডিওর সমান উচ্চতা থাকে।
মূল ভিডিওর উচ্চতা এর সাথে উদাহরণস্বরূপ পাওয়া যাবে ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 এবং আমাদের ক্ষেত্রে 1024 x 1024।
-r 15
: নমুনা এফপিএস।
উদাহরণস্বরূপ, আসল ভিডিওটি 30 এফপিএস, সুতরাং এর -r 15
অর্থ ffmpeg
প্রতি 2 ( = 30 / 15
) এ একটি ফ্রেম চয়ন করবে ।
অনুমিত আউটপুট এফপিএস তবে ইনপুটটির সাথে মেলে সামঞ্জস্য করা হয়েছে, সুতরাং আপনি একটি গতিপথ লক্ষ্য করবেন না, কেবলমাত্র বৃহত্তর গ্র্যানুলারিটি।
ইনপুট এফপিএস এর সাথে পাওয়া যাবে ffprobe
এবং এখানে বর্ণিত হিসাবে ইনপুট ফ্রেমের মোট সংখ্যা পাওয়া যাবে mediainfo
: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames ইন-এ-ভিডিও-অন-লিনাক্স-কমান্ড-লাইন / 1044894 # 1044894
আমি এই বিকল্পটি সুপারিশ করছি কারণ বৃহত রেজোলিউশনের কারণে ভিডিও ফর্ম্যাটগুলিতে সাধারণত উচ্চতর ফ্রেমরেট থাকে। ছোট জিআইএফ দিয়ে, নিম্ন ফ্রেমরেট কম লক্ষণীয়, এবং তাই আমরা কিছু ফ্রেম এড়িয়ে ছোট GIF তৈরি করতে পারি।
18.04 পূর্বের আগে: ffmpeg
+ convert
মধ্যবর্তী ফাইলগুলি ছাড়াই ওয়ান-লাইনার
ffmpeg
জিআইএফ আগে পরিচালনা করতে পারেনি। আমার সাথে সবচেয়ে ভাল ছিল কিছু:
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
: আউটপুটে নেটস্কেপ জিএফ এক্সটেনশন লুপ গণনা ক্ষেত্র যুক্ত করুন। 0 এর অর্থ এখানে বর্ণিত হিসাবে অসীম লুপ: http://www.vurdalakov.net/misc/gif/netscape-looping-application- এক্সটেনশন eog
, firefox
এবং ক্রোমিয়াম সমস্ত লুপ ব্যতীত ডিফল্টরূপে এটি ছাড়াও, সুতরাং আমি নিশ্চিত না যে এটি কতটা প্রয়োজনীয় আর হয়।
-delay 5
: সময়টি পরবর্তী ফ্রেমটি দেখানোর আগে অপেক্ষা করেছিল দ্বিতীয় সেকেন্ডের হ্যান্ড্রিথগুলিতে : যেমনটি বর্ণিত হয়েছে: https://en.wikedia.org/wiki/GIF#Animated_GIF বাইট 324 So সুতরাং এর 100
অর্থ 1 এফপিএস, 5
মানে 1 / 0.5 == 20FPS
।
এমনকি যদি আপনি উচ্চতা এবং ফ্রেমরেট হ্রাস করেন তবে আউটপুট জিআইএফ এখনও ভিডিওর চেয়ে বড় হতে পারে, যেহেতু "রিয়েল" নন-জিআইএফ ভিডিও ফর্ম্যাটগুলি ফ্রেম জুড়ে সংকুচিত হয়, যখন জিআইএফ কেবল পৃথক ফ্রেমগুলি সংকুচিত করে।
সরাসরি:
convert input.mp4 rpi2-bare-metal-blink.gif
মেমরির ওভারফ্লোর কারণে আমার কম্পিউটারটি প্রায় শেষ হয়ে গেছে, এবং আমার 2s 1Mb ইনপুট ফাইলের জন্য 100x বৃহত একটি আউটপুট উত্পাদন করেছে। হয়ত একদিন ইমেজম্যাগিক ধরবে।
উবুন্টু 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
। আউটপুট যদিও পরীক্ষা করুন, এটি প্রভাবিত হতে পারে। আমার জন্য এটি মানের কোনও
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
।
জিফিফাই হ'ল একটি সর্ব-ইন-ওয়ান নোড-ভিত্তিক ইউটিলিটি যা রূপান্তরকে সহজতর করে। এটা নির্ভর করে nodejs
, npm
, ffmpeg
, এবং imagemagick
যা সব Repos পাওয়া যায়।
একবার 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!'
Smaller এমনকি ছোট ভিডিওর সাহায্যে রূপান্তরটি শেষ হতে কয়েক মিনিট সময় নিতে পারে।
দ্রষ্টব্য:
ffmpeg
এবংimagemagick
কয়েকটি নির্দিষ্ট গ্রন্থাগার (যেমন লিবাস এবং ফন্টকনফাই সেই অনুযায়ী) সংকলন করা দরকার।
gifsicle
, তবে তার পরে আর একটি সমস্যা দেখা দেয়: github.com/vvo/gifify/issues/95 এছাড়াও, আপনি কোন ডিরেক্টরিতে এনপিএম নোভিসেসটি চালাতে চান npm install
এবং এটি রুট হিসাবে চালাতে হবে কিনা তা আমাদের মনে রাখতে হবে? ধন্যবাদ!