কমান্ড লাইনের মাধ্যমে এমপি 4 ভিডিও থেকে একটি অ্যানিমেটেড জিআইএফ কীভাবে তৈরি করবেন?


119

আমি .gifএকটি .mp4ভিডিও থেকে একটি অ্যানিমেটেড করতে চাই । আমি কমান্ড লাইন থেকে এটি করতে পছন্দ করব, সুতরাং দয়া করে কেবল কমান্ড লাইন সরঞ্জাম তালিকাবদ্ধ করুন।


আপনি এই স্ক্রিপ্টটি গিথুব এ ব্যবহার করতে পারেন যা এফএফএমপিইগ ব্যবহার করে এবং আরও ভাল মানের মানের জন্য মধ্যবর্তী রঙ প্যালেট উত্পন্ন করে।
ট্রয়নে

উত্তর:


127

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 গুলি সবচেয়ে ভালো উপায় না হয় জলদসু্য অনলাইন ভিডিওগুলি বিতরণের লাইসেন্স দেন।

    আরও দেখুন: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time- using-ffmpeg

  • -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 বৃহত একটি আউটপুট উত্পাদন করেছে। হয়ত একদিন ইমেজম্যাগিক ধরবে।

আরও দেখুন: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif- using-ffmpeg-with- যুক্তিসঙ্গত- গুণমান

উবুন্টু 17.10 এ পরীক্ষা করা হয়েছে।


1
ডাউনভোটাররা দয়া করে ব্যাখ্যা করুন ;-)
সিরো সান্তিলি 新疆 改造 中心 法轮功 六四 事件

1
আপনার বিলম্বটি আপনার -r মানের সাথে মেলে না (ফলাফলটি জিআইএফ 2x গতি)। এছাড়াও আপনি কোনও আপাত কারণ ছাড়াই একটি স্কেল আর্গুমেন্ট যুক্ত করেছেন (এটি জিআইএফটিকে সত্যিই ছোট করে তোলে)।
asmeurer

2
আমি রাজী. ছোট আকারের জিআইএফগুলি ওয়েবে ভাল। ধন্যবাদ scale=320:-1
জম্বিক

2
যারা ভাবছেন তাদের জন্য: সরানো -r 10জিআইএফকে স্বাভাবিক গতিতে ফিরিয়ে আনবে।
মিচ

2
আমি এমপি 4 এর চেয়ে 20% বড় একটি জিআইফ পেয়েছি: ও
অ্যাডাম গোল্ডম্যান

113

দুটি পদক্ষেপ:

  • ভিডিও থেকে চিত্রগুলি বের করুন

    আপনার .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 বিকল্প রূপান্তর করুন

আপনি একটি বড় ফাইলের সাথে শেষ করবেন, আপনি একটি ছোট ফাইল প্রাপ্তির জন্য দ্বিতীয় ধাপ কমান্ডে যুক্ত করতে পারেন এমন বিকল্পগুলির জন্য জিআইএফ অনুকূল করতে চিত্র ম্যাগিক গাইডটি দেখুন ।


1
দুর্দান্ত উত্তর- কিছু অতিরিক্ত তথ্য: ffmpeg এখানে
শেপাইল

3
মনে রাখবেন যে framesপ্রথম কমান্ডটি কাজ করার জন্য ফোল্ডারটি অবশ্যই উপস্থিত থাকবে।
টোটেমেডলি

3
ঐ যে কাজ করে একটি দ্রুত উপায় থেকে পুরোপুরি অন্য নিখুত চান এবং খুব কাজের লিঙ্ক পড়তে অলস জন্য, শুধু যোগ -layers Optimizeশেষ convertকরার আগে কমান্ড *.jpg। আউটপুট যদিও পরীক্ষা করুন, এটি প্রভাবিত হতে পারে। আমার জন্য এটি মানের কোনও
অনুভূতিহীন

ধন্যবাদ এটি একটি আকর্ষণীয় প্রক্রিয়া ছিল, একটি 5.6MB এমপি 4 একটি 236 এমবি জিআইএফ শেষ হয়েছিল, নিশ্চিত না যে আমি সেটিকে আমার ওয়েবসাইটে রাখছি;) সম্ভবত একটি জিআইএফ এক মিনিটের পরিবর্তে সেকেন্ডে সীমাবদ্ধ হওয়া দরকার।
এলাচ

2
জেপিজি ফাইল ফর্ম্যাটটি ব্যবহার করার পরিবর্তে, ডিফল্ট সেটিংসের সাথে খুব ক্ষতিকারক, আমি প্রাথমিক ফাইল রফতানির জন্য পিএনজি ব্যবহারের পরামর্শ দেব। ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
পিয়েরে এফ

12

জিফিফাই হ'ল একটি সর্ব-ইন-ওয়ান নোড-ভিত্তিক ইউটিলিটি যা রূপান্তরকে সহজতর করে। এটা নির্ভর করে 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কয়েকটি নির্দিষ্ট গ্রন্থাগার (যেমন লিবাস এবং ফন্টকনফাই সেই অনুযায়ী) সংকলন করা দরকার।


: প্রায়> 40 সেকেন্ড ক্লিপ হ্যান্ডেল করবেন না github.com/vvo/gifify/issues/99
oligofren থেকে

19.04: আরেকটি প্রয়োজনীয় প্যাকেজ হ'ল gifsicle, তবে তার পরে আর একটি সমস্যা দেখা দেয়: github.com/vvo/gifify/issues/95 এছাড়াও, আপনি কোন ডিরেক্টরিতে এনপিএম নোভিসেসটি চালাতে চান npm installএবং এটি রুট হিসাবে চালাতে হবে কিনা তা আমাদের মনে রাখতে হবে? ধন্যবাদ!
নিকোলাস রাউল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.