হাজার হাজার .png গুলি অ্যানিমেটেড .gif এ রূপান্তর করুন `রূপান্তর` খুব বেশি মেমরি ব্যবহার করে


29

পিএনজি চিত্রের সেট থেকে কীভাবে অ্যানিমেটেড জিআইএফ তৈরি করতে হয় এমন অনেকগুলি প্রশ্ন ইমেজম্যাগিকের কমান্ডের বৈকল্পিক ব্যবহার করার পরামর্শ দেয় : convert

convert -delay 2 -loop 0 *.png animated.gif

তবে আমার কয়েক হাজার চিত্র রয়েছে এবং এভাবে convertআমার সমস্ত স্মৃতি, অদলবদল এবং তারপরে ক্র্যাশগুলি ব্যবহার করে। কোন বিকল্প সফ্টওয়্যার বিদ্যমান, যা বেশি স্মৃতি সচেতন? .gifসমর্থিত না হলে আমি অন্য ওপেন ফর্ম্যাটটি ব্যবহার করতে পারি এবং আমি একটি সি এল এল সরঞ্জাম পছন্দ করি।


1
* .Png ফাইলগুলি পরিচালনাযোগ্য খণ্ডগুলিতে ভাগ করার বিষয়ে কীভাবে? ধরা যাক সমস্ত ফাইলের নামগুলি একটি অঙ্ক দিয়ে শুরু হয়, তারপরে convert -delay 2 -loop 0 0*.png animated.gifকেবল '0' দিয়ে শুরু হওয়া ফাইলগুলিকে রূপান্তর করবে। ইত্যাদি।
জোস

2
সুতরাং প্রতিটি .png 1 এমবি ক্রম হয়? সেক্ষেত্রে আমি যা ভাবতে পারি তা হ'ল প্রথমে .png ফাইলগুলিকে একটি কম রেজোলিউশন বা রঙের গভীরতায় রূপান্তর করা, যাতে সেগুলি আরও ছোট করে।
জোস

10
আপনি বলছেন যে আপনি অন্য ওপেন ফর্ম্যাটটি ব্যবহার করতে পারেন। এটি আমার কাছে মনে হয় যে হাজার হাজার ফ্রেমের জন্য জিআইএফ হ'ল সেরা বিন্যাস নয়। এর পরিবর্তে আপনি ওগ থিওর সাথে একটি ভিডিও এনকোডিংয়ের কথা বিবেচনা করেছেন?
রেকাডো

1
সম্ভবত জিফসিকলটি একবার দেখুন , আপনি যদি সত্যিই জিআইএফ ব্যবহার করতে চান? (যদিও অন্যরা বলেছে, জিআইএফ এর জন্য তৈরি করা হয়নি এটি; ওজিজি আরও ভাল পছন্দ হবে))
wchargin

1
করছেন। "যেখানে সমস্ত স্মৃতি চলছে": 65 কেবি হ'ল একটি সংকুচিত চিত্রের ফাইল আকার। সঙ্কুচিত হয়ে গেলে, চিত্রটি প্রায় 4 x প্রস্থের x উচ্চতা বাইট নেয়, সুতরাং একটি 1024x768 চিত্র RAM 3Mb র‌্যাম নেয়। এটি "কয়েক হাজার" দ্বারা গুণ করুন এবং আপনি স্মৃতিটি কোথায় চলেছে তা দেখতে পাবেন ...
সের্গেই

উত্তর:


33

মনে হচ্ছে আপনি কোনও ভিডিও বানানোর চেষ্টা করছেন। যদি এটি হয় তবে আমি একটি সঠিক ভিডিও ফর্ম্যাট ব্যবহার করব।

এই ক্ষেত্রে, আমি পৃথক পিএনজি ফাইলগুলিকে এইচ .264 ভিডিওতে রূপান্তর করতে ffmpeg ব্যবহার করব । যেহেতু ffmpeg এমন ভিডিওগুলির সাথে কাজ করতে তৈরি যা ঘন্টার বেশি দীর্ঘ হতে পারে তাই এটি আপনার হাজার হাজার চিত্রের সাথে কোনও সমস্যা না হওয়া উচিত। অ্যানিমেটেড জিআইএফের পরিবর্তে এইচ .264 ব্যবহারের ফলে চিত্রের গুণমানের ব্যাপক উন্নতি হবে ।

এরকম কিছু আপনার পক্ষে কাজ করা উচিত:

 ffmpeg -framerate 1/2 -i img%04d.png -c:v libx264 -r 30 out.mp4
  • -framerate 1/2: এটি ফ্রেমরেটকে অর্ধেক এফপিএস বা ফ্রেম প্রতি 2 সেকেন্ডে সেট করে।
  • -i img%04d.png: এটি ffmpeg কে img0000.pngযদিও ফাইলগুলি পড়তে বলে img9999.png
  • -c:v libx264: ভিডিও কোডেক libx264 ব্যবহার করুন।
    • আপনি এখানে ভিডিও সংক্ষেপণ পরামিতি নির্দিষ্ট করতে পারেন:
    • -crf <number>: মান নির্ধারণ। 0 থেকে 51. 23 ডিফল্ট। 0 হ'ল সত্য লসলেস এনকোডিং, যা বেশ উচ্চ ব্যান্ডউইথ হবে। 18 প্রায় দৃষ্টিহীন।
  • -r 30: আউটপুট ফ্রেমরেট 30 টি এফপিএসে সেট করুন। আপনি এখানে নির্দিষ্ট করে আউটপুট তৈরি করতে প্রতিটি ইনপুট চিত্র নকল করা হবে। আপনি এই প্যারামিটারটি ছেড়ে দিতে পারেন, এবং আউটপুট ফাইলটি ইনপুট ফ্রেমরেটে থাকবে, তবে আমি এখনই চেষ্টা করার পরে ফলাফলটি মুভিটি সঠিকভাবে প্রদর্শিত হয়নি।
  • out.mp4: আউটপুট ফাইলের নাম.

তথ্যসূত্র:


1
আগের দিন থেকেই ফ্রেঞ্চিকের উত্তরের সুন্দর সম্প্রসারণ।
বয়স্ক গীক

এখানে কংক্রিট পরীক্ষার ডেটা সহ একটি সহজ এফএফপিপ বনাম চিত্রম্যাগিক বেঞ্চমার্ক: জিজ্ঞাসুবন্টু
সান্তিলি 事件 改造 中心 法轮功 六四 :17 事件

11

ব্যক্তিগতভাবে, আমি এটি একবারে পরিবর্তে কেবলমাত্র সীমিত সংখ্যক ফাইলগুলিতে চালু করব। উদাহরণস্বরূপ, এর মতো কিছু:

#!/usr/bin/env bash

## Collect all png files in the files array
files=( *png )
## How many should be done at once
batch=50

## Read the array in batches of $batch
for (( i=0; $i<${#files[@]}; i+=$batch ))
do
    ## Convert this batch
    convert -delay 2 -loop 0 "${files[@]:$i:$batch}" animated.$i.gif
done

## Now, merge them into a single file
convert  animated.*.gif all.gif

8

ব্যবহার করুন -limit memory 1GiBমেমরির পরিমাণ সীমিত করতে convertব্যবহারসমূহ।

বেশিরভাগ কম্পিউটার প্রদর্শন করার জন্য লড়াই করবে এমন অসংখ্য জিএফ তৈরি করবে images আমি যখন সম্ভব হতে পারে আমার অ্যানিমেটেড জিআইএফগুলি 200 টি চিত্রের নীচে রাখি। যত কম তত ভাল। আপনি যদি আপনার চিত্রগুলি সংখ্যা করেন তবে এই কমান্ডটি বিজোড় সংখ্যাযুক্ত চিত্রগুলি মুছবে rm *[13579].png

সিনেমার দৃশ্য থেকে অ্যানিমেটেড জিআইএফ তৈরির জন্য এখানে আমার আদর্শ ওয়ার্কফ্লো রয়েছে:

avconv -ss 00:26:00 -i someMovie.mpg %5d.png
rm  *[13579].png
convert -limit memory 1GiB -loop 0 -layers optimize -resize 400 *.png output.gif

1
আপনাকে ধন্যবাদ, যে সমাধানটি ভাল কাজ করে। /Etc/ImageMagick-6/policy.xML এ অনুমোদিত মেমরির সীমা বাড়ানোও প্রয়োজনীয় হতে পারে আরও তথ্যের জন্য github.com/ চিত্র / ম্যাজিক / ইমেজম্যাগিক / প্রচ্ছদ দেখুন
লুই

4

.gifসমর্থিত না হলে আমি অন্য ওপেন ফর্ম্যাটটি ব্যবহার করতে পারি

সম্ভবত এপিএনজি আপনার কাজে আসবে। এটি ফায়ারফক্স সহ কয়েকটি ব্রাউজার দ্বারা সমর্থিত তবে এই মুহূর্তে ক্রোম এবং আইই বাদ দিয়ে। যেহেতু এটি কেবলমাত্র একটি পিএনজি এক্সটেনশান, তাই পিএনজিগুলিকে এপিএনজিতে রূপান্তর করা খুব সহজ। Apngasm টুল তা করতে পারে। তবে ফর্ম্যাটটি এত সহজ যে আমি সম্প্রতি সেজেজের জন্য নিজেকে একটি এপিএনজি এসেম্বলার লিখেছি। কোডটি মানিয়ে নেওয়া বিকল্প হবে।


আমি এও উল্লেখ করতে চাই যে এপিএনজি মানহীন এবং প্রায় 7 বছর ধরে থাকা সত্ত্বেও এখনও খুব অস্পষ্ট।
ফারাপ

বৈজ্ঞানিক বিক্ষোভের জন্য, যেখানে আপনি এটির জন্য ব্যবহৃত ব্রাউজার চয়ন করতে সক্ষম হতে পারেন, এটি এখনও একটি সহজ এবং দৃust় সমাধান হতে পারে।
এমভিজি

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

3

আপনার যদি কয়েক হাজার পিএনজি-এস থাকে তবে অ্যানিজিফ ফর্ম্যাটটি অদ্ভুত। আমি এটি ব্যবহার করে এইভাবে করব avconv:

 avconv -i "%d.png" -r 25 -c:v libx264 -crf 20 -pix_fmt yuv420p animated.mov

এই পদ্ধতির অতিরিক্ত সুবিধা রয়েছে যা আপনি পরে ভয়েস-ওভার বা মিউজিক অডিওতে ম্যাক্স করতে পারেন যা গ্রাফিক্স ইন্টারচেঞ্জ ফর্ম্যাট সহ অসম্ভব।
বয়স্ক গীক

2

জিআইএফআইসিল হ'ল জিআইএফ অ্যানিমেশনগুলি হ্যান্ডল করার জন্য একটি কমান্ড-লাইন ইউটিলিটি। আপনি যদি গতির জন্য মেমরি বাণিজ্য করতে ইচ্ছুক হন তবে আপনি এর - সংরক্ষণ-মেমরি স্যুইচটি ব্যবহার করতে পারেন।


আমি এটি এইভাবে রাখি: জিফসিকেলের ইমেজম্যাগিকের চেয়ে ইতিমধ্যে একটি ছোট পদচিহ্ন রয়েছে - যদি আপনি দেখতে পান যে এটি এখনও হাতের কাজটির জন্য খুব বেশি মেমরি ব্যবহার করে, তবে আপনি
কনজার্ভ

ওহ, আমি মনে করি আপনি যা বলছিলেন তা আমি ভুলভাবে লিখেছি that কিছু মনে করো না.
কৌতূহলনদী

2

অন্যান্য উত্তরের পাশাপাশি: যেহেতু আপনি একটি জিআইএফ ফাইল তৈরি করতে চান, আমি ধরে নিয়েছি আপনি কোনও ওয়েব পৃষ্ঠায় চিত্রটি প্রদর্শন করতে চান। যদি তা হয় তবে আমি আপনার পিএনজিগুলিকে মোটেও রূপান্তর করতে বিরক্ত করব না। "জাভাস্ক্রিপ্ট স্লাইডশো" এর জন্য কেবল গুগল করুন এবং লক্ষ লক্ষ ফ্রি স্ক্রিপ্টগুলির মধ্যে একটি ব্যবহার করুন। বা আপনার নিজের লিখুন, এটি সত্যিই তুচ্ছ।

এইভাবে এটি করার সুবিধা হ'ল:

  • ব্রাউজারে যে কোনও সময়ে কেবল একটি চিত্র লোড হয়, স্লাইডশোটি দ্রুত শুরু হয় এবং ব্যবহারকারীর মেশিনে খুব বেশি র‍্যাম গ্রহণ করে না।

  • সমাধান লক্ষ লক্ষ চিত্রের স্কেল করে। বা বিলিয়ন, যদি আপনি সমস্ত কিছু দেখার জন্য যথেষ্ট ধৈর্য হয়ে থাকেন :)

  • আপনি বিরতি দিতে, রিওয়াইন্ড করতে, বিলম্ব পরিবর্তন করতে বা কোনও নির্দিষ্ট ফ্রেমে যেতে আপনার পৃষ্ঠায় নিয়ন্ত্রণ যুক্ত করতে পারেন।


ধন্যবাদ সার্জি। আসলে এটি কোনও ওয়েবপৃষ্ঠায় প্রদর্শনের জন্য নয়। যদিও ধারণাটির জন্য +1 করুন।
dotancohen
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.