1 এফপিএসে পিএনজি ফ্রেমগুলিকে ভিডিওতে রূপান্তর করা হচ্ছে


21

আমার 1 টি এফপিএসে পিএনজি ফর্ম্যাটে ভিডিও ফ্রেম রয়েছে এবং আমি এফএফএমপিইগ ব্যবহার করে সেগুলিকে একটি ভিডিওতে রূপান্তর করার চেষ্টা করছি।

আমি যদি এরকম কিছু করি:

ffmpeg -i data/input-%4d.png data/output.mp4

আমি 25FPS এ একটি ভিডিও পাই যা মূলত ইনপুটটির (যা 1 এফপিএসে ধারণ করা হয়েছে) খুব দ্রুত এগিয়ে রয়েছে।

যদি আমি চেষ্টা করি:

ffmpeg -i data/input-%4d.png -r 1 data/output.mp4

আমি এমন কিছু পেয়েছি যা ভিএলসি খেলতে চায় না :)

এখন, আমি যদি প্রথম ভিডিওটি (এফএফ একটি) নিই এবং এটিকে ধীর করার জন্য একটি ফিল্টার প্রয়োগ করি (উদাহরণস্বরূপ -filter:v 'setpts=24.0*PTS'), আমি এটি 1 টি এফপিএস ভিডিওর মতো খেলতে পারব তবে অবশ্যই দামটি ফাইলের আকার। এটি আমার অনুমান বার বার ফ্রেম তৈরি করছে।

সুতরাং, প্রশ্নটি হল আমি কীভাবে একটি ভিডিও তৈরি করব যা ঠিক 1 টি এফপিএস এবং আসলে সেই গতিতে খেলবে? বিটিডব্লিউ আউটপুট ফর্ম্যাটটি আমার পক্ষে ততটা গুরুত্বপূর্ণ নয়।


আমি ffmpegকনটেইনার ফর্ম্যাট ফাইল এক্সটেনশান থেকে ভিডিও কোডেক বের করার জন্য যথেষ্ট স্মার্ট তা নিশ্চিত না .mp4-vcodec libx264 -vpre hqকোডেক এবং এনকোডিং পরামিতিগুলি বলতে, কমান্ড লাইনে যুক্ত করার চেষ্টা করুন ।
ওয়ারেন ইয়ং

এটি আসলে এটি ঠিক আছে, এবং আমি যেমনটি উল্লেখ করেছি এটি ভাল কাজ করেছে এবং আমি যুক্ত করার পরে কেবল অদ্ভুত ফলাফল এনেছি -r 1
আসফ ল্যাভি

আমার মনে হয় আপনি একটি ffmpeg উত্তর ভালো ভাগ্য থাকতে পারে stackoverflow.com বা superuser.com
ড্যামিয়েন

উত্তর:


19

আপনি যদি এফএফএমপিইগের জন্য একটি ওয়ানলাইনার চান যা প্রতি সেকেন্ডে 1 ফ্রেমে খেলতে পারে এমন একটি ভিডিও জেনারেট করে, আপনি যা করতে চান তা হ'ল ইনপুট এবং আউটপুট উভয়ের জন্য ফ্রেমরেট নির্দিষ্ট করে:

ffmpeg -r 1 -i ডেটা / ইনপুট-% 4d.png -pix_fmt yuv420p -r 10 ডেটা / আউটপুট.এমপি 4

এর -r 1অর্থ ভিডিও প্রতি সেকেন্ডে মূল চিত্রের 1 এ প্লে হবে ।
এর -r 10অর্থ ভিডিও প্রতি সেকেন্ডে 10 ফ্রেমে খেলবে।

( -pix_fmt yuv420pবিস্তৃত প্লেব্যাক প্রোগ্রামগুলির সাথে সামঞ্জস্যতা নিশ্চিত করার জন্য কেবল এটি রয়েছে It উদাহরণস্বরূপ, উইন্ডোজ মিডিয়া প্লেয়ার দ্বারা ভিডিওটি প্লেযোগ্য হওয়ার জন্য এটি এখানে প্রয়োজনীয়))

আমি অনেকগুলি ভিন্ন আউটপুট ফ্রেমরেট পরীক্ষা করেছি এবং 10 টি আপনি ব্যবহার করতে পারবেন এমন সর্বনিম্ন সংখ্যা বলে মনে হচ্ছে যা এখনও ভিএলসি প্লে করবে এমন একটি ভিডিও তৈরি করবে।

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

এটি পরীক্ষা করার জন্য, আমি মাত্র একটি সত্য 1-এফপিএস ভিডিও তৈরি করেছি, যা 2.24 কিবিতে এসেছিল। আমি তখন একই ইনপুট চিত্রগুলি সহ 24 টি এফপিএসে আউটপুট দিয়ে একটি ভিডিও তৈরি করেছি এবং এটি 5.76 কিবিতে এসে গেছে। এটি আকারের দ্বিগুণ, এবং আকারের কাছাকাছি কোথাও নেই। :)


+1 -পিক্সা_এফএমটি তে কিছু লোককে ভুলে যাওয়া সহজ, ডাব্লুএমপি :-) ব্যবহারের জন্য জোর দিয়েছিলেন
স্মার্টটাউন 2 কে

আপনি কেন আউটপুট ফর্ম্যাটটি 10 ​​এফপিএস করতে চান যখন ইনপুটটি কেবল 1? এটি কি 90% অপ্রয়োজনীয় ফ্রেমগুলি তৈরি করবে না যা একেবারে একই?
হারবার্ট

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

@ চিলেনিট পরিষ্কার, কীফ্রেম জিনিস, যা সমস্ত ফর্ম্যাট নয়, তবে বেশিরভাগ বুদ্ধিমান ফর্ম্যাটগুলি করবে। ধন্যবাদ!
হারবার্ট

5

-framerateএবং উভয় ব্যবহার করুন-r

উদাহরণস্বরূপ, 1FPS এর মতো দেখতে একটি চূড়ান্ত ভিডিও পেতে:

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

এটি 1 এফপিএসে পিএনজি ফ্রেমগুলিকে ভিডিওতে রূপান্তর করার অনুরূপ ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জ বলছে, তবে এটি কাজ করার -framerateপরিবর্তে আমার দরকার ছিল -r

এটি উইকিতে এখানে উল্লেখ করা হয়েছে: http://trac.ffmpeg.org/wiki/ স্লাইডশো# ফ্রেমারেটস

এটি আউটপুট ফ্রেমরেটে সেট করে 30, যা ভিএলসি হ্যান্ডল করতে পারে এবং প্রতিটি চিত্র 30 বার অনুলিপি করে, যাতে আউটপুট ভিডিওটি 1 এফপিএসে উপস্থিত হয়। আরও দেখুন: ffmpeg ব্যবহার করে চিত্রগুলি থেকে কম fps ভিডিও সহ ভিএলসিতে প্লেব্যাক ইস্যু স্ট্যাক ওভারফ্লো

এরপরে ভিএলসি ভিডিওটি সাধারণত খেলতে সক্ষম হয়।

ffmpeg10 টি পিএনজি সহ ডিরেক্টরিতে উবুন্টু 16.10, ভিএলসি 2.2.4, 3.0.5 এ পরীক্ষিত ।

আরও দেখুন: /programming/19267443/vlc-freezes-for-low-1-fps-video-created-from-images-with-ffmpeg


মধ্যে পার্থক্য কি -rএবং -framerate?
রই 12

@ রোয়ি আমি সত্যিই জানি না, কেবলমাত্র এটি আমার জন্য কাজ করেছিল :-) তবে আপনি যদি manপৃষ্ঠা থেকে এটি বের করতে সক্ষম হন তবে আমাকে জানতে দিন ;-) একটি অর্থবহ উদ্ধৃতি "-r হিসাবে ইনপুট বিকল্পটি, ফাইলটিতে সঞ্চিত যে কোনও টাইমস্ট্যাম্পগুলি উপেক্ষা করুন এবং পরিবর্তে ধ্রুবক ফ্রেম রেট fps ধরে ধরে টাইমস্ট্যাম্পগুলি তৈরি করুন image চিত্র 2 বা v4l2 এর মতো কিছু ইনপুট ফর্ম্যাটের জন্য ব্যবহৃত ফ্রেমারেটের বিকল্পটি এটি একই নয় (এটি পুরানো সংস্করণে একই ব্যবহৃত হত) FFmpeg)। সন্দেহ হলে ইনপুট বিকল্প -r এর পরিবর্তে ফ্রেমারেট ব্যবহার করুন। "
সিরো সান্তিলি :45 改造 中心 法轮功 六四 事件

3

আপনি যদি নীচে আপনার দ্বিতীয় উদাহরণটি সামান্য বাড়িয়ে তোলেন:

$ ffmpeg -r 1 -i data/input-%4d.png -c:v libx264 out.mp4

-r 1চাহিদা .png ফাইল আগে, পরে না আসতে।

থেকে FFmpeg ডকুমেন্টেশন :

একটি সাধারণ নিয়ম হিসাবে, পরবর্তী নির্দিষ্ট ফাইলটিতে অপশন প্রয়োগ করা হয়। সুতরাং, ক্রমটি গুরুত্বপূর্ণ, এবং একাধিকবার কমান্ড লাইনে একই বিকল্প থাকতে পারে। প্রতিটি ঘটনা তারপরে পরবর্তী ইনপুট বা আউটপুট ফাইলে প্রয়োগ করা হয়।


দুর্ভাগ্যক্রমে এটি কাজ করে না। তবে, আদেশটি গুরুত্বপূর্ণ তা উল্লেখ করে আমার অনেক সময় সাশ্রয় হয়। ধন্যবাদ।
মোহাম্মদ নুরাল্ডিন

0

এটি ভিএলসি-তে একটি বাগ (যা এখনও 3.0.0 সংস্করণে বিদ্যমান)। কিছু পরীক্ষার পরে আমি বুঝতে পেরেছিলাম যে ভিএলসি 10 এরও কম এফপিএস সহ ভিডিওগুলির জন্য ক্র্যাশ করেছে । সুতরাং 10 টি এফপিএস বা তার বেশি থাকা সমস্ত ভিডিওর সমস্যা হওয়া উচিত নয়। সুতরাং বর্তমানে ভিএলসিতে প্লেযোগ্য 1 এফপিএস সহ একটি ভিডিও পাওয়ার কোনও পরিষ্কার উপায় নেই যা ছেড়ে দেবেন না, পড়া চালিয়ে যান )।

উপরের উত্তরে একটি কার্যকারণ হ'ল- চিত্রগুলি নকল করে 1 টি এফপিএসের প্রভাব নকল করা (যখন আমাদের কাছে আসলে একটি এফপিএস 10 বা ততোধিকের সমান হয়, যা ভিএলসির জন্য ঠিক আছে)।

উদাহরণ: আপনার যদি 12 টি চিত্র সহ একটি ফোল্ডার থাকে এবং আপনি 1 টি এফপিএস (যা ভিএলসিতে প্লেযোগ্য) সহ একটি ভিডিও তৈরি করতে চান, তবে আপনাকে প্রতিটি চিত্র একাধিকবার নকল করতে হবে (10 বার বলি) এবং তারপরে এফএফএমপিইগকে বলুন একটি 10 ​​টি এফপিএস ভিডিও তৈরি করতে। এইভাবে আমরা মোট 120 ফ্রেমের একটি ভিডিও পাব, যেখানে প্রতিটি চিত্র 1 সেকেন্ডের জন্য প্লে হবে (এটি 10 ​​বারে নকল করা হয়েছে), এটি কেবল 1 এফপিএসের জন্য একটি জাল।

আমি প্যারামিটারটি ব্যবহারfps-r করতে পছন্দ করি না (যা অন্য উত্তরে দেখানো হয়েছে) যা কিছু ক্ষেত্রে সমস্যাযুক্ত ( অফিসিয়াল ডকুমেন্টেশন অনুযায়ী ) হতে পারে।

ffmpeg -framerate 1 -i "img (%d).jpg" -c:v libvpx-vp9 -vf "fps=10,format=yuv420p" out.mkv

-framerateআউটপুটের চেয়ে ইনপুট কম fpsহওয়ায়, এফএফএমপিইজি আপনার পছন্দসই আউটপুট ফ্রেমের হারে পৌঁছানোর জন্য ফ্রেমের সদৃশ করবে (যা উপরের কমান্ড অনুযায়ী 10)।

এছাড়া রয়েছে নোটিশ গুরুত্বপূর্ণ যে ক্রম -framerateএবং -vf fpsগুরুত্বপূর্ণ , যেমন এই কনফিগারেশন পরবর্তী উল্লিখিত ভিডিও (ইন অথবা আউটপুট) এর প্রয়োগ করা হবে। এটি সরকারী ডক্স অনুসারে :

বিকল্পগুলি পরবর্তী নির্দিষ্ট ফাইলটিতে প্রয়োগ করা হয়। সুতরাং, ক্রম গুরুত্বপূর্ণ ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.