ভিডিও রেকর্ডিংয়ের সময় ffmpeg দ্বারা কীভাবে সিপিইউ / মেমরির ব্যবহার হ্রাস করা যায়


13

আমি এক্সভিএফবি প্রদর্শন থেকে ভিডিও স্ক্রিন ক্যাপচার তৈরির জন্য এফএফপিপিগ ব্যবহার করি।

বর্তমানে আমি এটি দিয়ে:

ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov

আমি প্রায় 5 এক্সভিএফবি সেশনগুলি থেকে ভিডিও রেকর্ড করার সাথে সাথে আমার সিপিইউ ব্যবহার খুব বেশি এবং এর কারণে পিছিয়ে আছে। এছাড়াও প্রতিটি ffmpeg প্রক্রিয়ার জন্য মেমরির ব্যবহার প্রায় 300 এমবি।

ভিডিও স্ক্রিন ক্যাপচার করার সময় কম্পিউটার রিসোর্সের ব্যবহার (বিশেষত সিপিইউ এবং মেমরি) কমাতে আমি ffmpeg এর জন্য কোন পরামিতি ব্যবহার করব?

উত্তর:


17

1. প্রথমে একটি ক্ষতিহীন আরজিবি আউটপুট তৈরি করুন

ffmpeg -y -framerate 25 -video_size 1280x1024 -f x11grab -i :0.0 -c:v libx264rgb \
-crf 0 -preset ultrafast temp.mp4
  • ইনপুটটি আরজিবি, সুতরাং এনকোডারটি libx264rgb ব্যবহার করলে সম্ভাব্য ধীর আরজিবি থেকে YUV রূপান্তর এড়ানো হবে যা আপনি যদি সরল libx264 ব্যবহার করেন তবে ঘটতে পারে।

  • এটি দ্রুততম x264 এনকোডিং প্রিসেটটি ব্যবহার করে: অতিশয্যা।

  • আউটপুট ক্ষতিহীন হবে কারণ -crf 0এটি ব্যবহৃত হয় used

2. তারপরে এটি পুনরায় এনকোড করুন

প্রথম কমান্ড থেকে আউটপুট বিশাল হবে এবং বেশিরভাগ বোবা খেলোয়াড় আরজিবি এইচ .264 হ্যান্ডেল করতে পারে না তাই আপনি এটিকে পুনরায় এনকোড করতে পারেন:

ffmpeg -i temp.mp4 -c:v libx264 -crf 23 -preset medium -vf format=yuv420p out.mp4
  • -crfআউটপুট গুণমান নিয়ন্ত্রণ করতে আপনি মানটি নিয়ে পরীক্ষা করতে পারেন । একটি বিষয়গতভাবে বুদ্ধিমান পরিসীমা 18-28, যেখানে 18 দৃষ্টিভঙ্গিহীন বা প্রায় তাই। ডিফল্ট 23।

  • ধীরতম প্রিসেট তোমার জন্য ধৈর্য ব্যবহার করুন: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow। ডিফল্ট হয় medium

  • আমি -vf format=yuv420pআউটপুটটি কুইকটাইম এবং উইন্ডোজ মিডিয়া প্লেয়ারের মতো বোবা খেলোয়াড়দের সাথে কাজ করে তা নিশ্চিত করার জন্য যুক্ত করেছি । আপনি যদি এটি ইউটিউবে আপলোড করছেন বা এটি কেবল ভিএলসি, এমপিভি, এমপিলেয়ার, বা অন্য কোনও এফএফপিপেইগ ভিত্তিক প্লেয়ারে খেললে আপনি এটিকে বাদ দিতে পারেন।

এছাড়াও দেখুন


আমি অ-ডিফল্ট প্রদর্শন (এটি এক্সভিএফবি) থেকে ভিডিও ক্যাপচার করেছি যাতে এটি কোনও নম্বর হতে পারে
আন্দ্রেই বোতালভ

@ অ্যান্ড্রেবোটালভ আপনি কি ক্ষতির অযোগ্য পদ্ধতি ব্যবহার করে দেখেছেন? এটি কি আপনার পক্ষে আরও ভাল পারফর্ম করেছে?
লগন

1
বর্তমানে আমি প্যারামিটার ffmpegদিয়ে -preset superfastআবেদন করছি (আমি চেষ্টা করিনি -crf)। এটি এ ক্ষেত্রে কম সংস্থান গ্রহণ করে এবং যথেষ্ট পরিমাণে আকারের ভিডিও তৈরি করে।
আন্দ্রেই বোটালভ

@ অ্যান্ড্রেবোটালভ -crf 23ডিফল্টরূপে ব্যবহৃত হয় যদি আপনি কোনও মান ঘোষণা করেন না, তবে যাইহোক যদি আপনার superfastপক্ষে যথেষ্ট হয় তবে সমস্যাটি সমাধান হয়ে গেছে।
লগন

1
আপনি h264_nvenc (এনভিডিয়া) বা h264_qsv (আধুনিক ইন্টেল সিপিইউ) এর মাধ্যমে হার্ডওয়্যার এনকোডিংও চেষ্টা করতে পারেন। এটি আপনার সিপিইউ থেকে এনকোডিংয়ের বোঝাটিকে ডেডিকেটেড এইচ 264 হার্ডওয়্যারে স্থানান্তর করবে।
কেন

4

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

আপনি ffmpegএর সিপিইউ প্রক্রিয়াটির অগ্রাধিকার হ্রাস করতে পারেন :

  • টার্মিনাল পদ্ধতি: ব্যবহার করুন niceপ্রক্রিয়া এর অগ্রাধিকার পরিবর্তন করতে কমান্ড প্রয়োগ করুন: nice -n 8 ffmpeg -y -r 15 -g 600 -s 1280x1024x24 -f x11grab -i :100 -vcodec libx264 /tmp/video.mov। লিনাক্স-এ, অগ্রাধিকার নম্বর ( niceকমান্ড ফরম্যাট nice -n <priority> <command>) -20 থেকে 20 বৃহত্তর পূর্ণসংখ্যা রেঞ্জের, নীচু অগ্রাধিকার; নিরপেক্ষ হয় 0. আপনি যে আদেশটি দিয়েছিলেন তা যদি আপনি ব্যবহার করেন এবং এটি 8 তে সেট করেন, সিপিইউ প্রক্রিয়াটিকে কম সময় দেবে, যা কম "শক্তি" বলে মনে হচ্ছে। যদি এই সংখ্যাটি খুব বেশি বা দুটি কম হয় তবে অবশ্যই আপনি এটি পরিবর্তন করতে পারেন।
  • জিইউআই পদ্ধতি: এটি প্রস্তাবিত নয় কারণ এটি আপনাকে সঠিক সংখ্যার উপর কম নিয়ন্ত্রণ দেয় এবং প্রক্রিয়া শুরু হওয়ার সাথে সাথে এটি কার্যকর হয় না। তবে এটি আরও বোধগম্য। সঙ্গে ffmpegচলার সময়, সিস্টেম মনিটর খুলুন। নামধারী প্রক্রিয়াটিতে নীচে স্ক্রোল ffmpegকরুন, নির্বাচন করতে এটিতে বাম ক্লিক করুন, এটিকে ডান ক্লিক করুন এবং "লো" বা "খুব লো" তে অগ্রাধিকার সেট করুন।

যদি আপনি মেমরির ব্যবহার সম্পর্কেও উদ্বিগ্ন থাকেন তবে জেনে রাখুন যে কোনও প্রক্রিয়া কেবলমাত্র এত বেশি স্মৃতি গ্রহণ এবং এখনও চালানো সম্ভব তা বলা সম্ভব নয়। কার্নেল স্বয়ংক্রিয়ভাবে প্রক্রিয়াগুলির জন্য মেমরি বরাদ্দকে নিয়ন্ত্রণ করে। timeoutস্ক্রিপ্ট সহ খাঁচার প্রক্রিয়াগুলির একটি উপায় রয়েছে , যাতে কোনও প্রক্রিয়া এবং কোনও শিশু প্রক্রিয়া যখন খুব বেশি স্মৃতি গ্রহণ করে (আপনার দ্বারা নির্ধারিত একটি সীমা) সেগুলি নিরাপদে সমাপ্ত হয় এবং একটি বিজ্ঞপ্তি প্রদর্শিত হয়। তবে, যদি কোনও প্রক্রিয়াটিকে কেবল এত বেশি মেমরি দেওয়া হয় (কার্নেল দ্বারা বলুন) এবং এটি আরও মেমরির অনুরোধ করে যা এটি থাকতে পারে না, এটি ক্রাশ হবে।

জানার জন্য কয়েকটি সহায়ক বিষয়:

সিগ্রুপের জ্ঞান ব্যবহার করে আপনি প্রচুর মজাদার জিনিস প্রক্রিয়াটির অদলবদল নিয়ন্ত্রণ করার মতো করতে পারেন ।


2
যদি আমি বুঝতে পারি যে ffmpeg নিম্নতর অগ্রাধিকারের কাতারে রেখে সঠিকভাবে লাগিয়ে দেওয়া হবে যা এটি অনাকাঙ্ক্ষিত is
আন্দ্রেই বোটালভ

1
হুম ... আমি অনলাইনে কিছুই বলছি না যে ... আপনার কাছে এমন কোনও উত্স আছে যা ইঙ্গিত করে? (যদি তা না হয় তবে এটি একটি বাগ হওয়া উচিত)।
রিচার্ড

2
আমি যদি সঠিকভাবে বুঝতে পারি তবে নিম্নের অগ্রাধিকারটির অর্থ ffmpeg এর এখনকার চেয়ে প্রসেসরের সময় কম থাকবে। তবে প্রসেসর প্রায় 100% লোড করা হয়েছে তাই আমার মনে হয়
পুনরূদ্ধারকরণ কোনও উপকারে

1
এটি প্রক্রিয়াটির সিপিইউ ব্যবহার সীমাবদ্ধ করার জন্য ডিজাইন করা হয়েছে, সুতরাং আপনার সিপিইউ যদি 100% এ চলতে থাকে তবে এটি পরিচালনা করতে আরও সহজ সময় আসবে।
রিচার্ড

4
আমি এটি -1 করেছি, কারণ আপনি যেভাবে অগ্রাধিকারটি পরিবর্তন করেন না কেন এটি কেবল এটি আরও খারাপ করে দেবে। কম অগ্রাধিকার নির্ধারণ করা ffmpeg এর সিপিইউ সময়কে কমিয়ে দেবে যার ফলে আরও নিচে ফ্রেম পড়ে যাবে, বা অগ্রাধিকার বাড়িয়ে এটি সিস্টেমে অন্যান্য প্রক্রিয়া আরও কমিয়ে দেবে। উভয় ফলাফল অনাকাঙ্ক্ষিত।
gertvdijk

0

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


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