টুইচ এই সম্পর্কে একটি পোস্ট আছে। তারা ব্যাখ্যা করে যে তারা বিভিন্ন কারণে তাদের নিজস্ব প্রোগ্রাম ব্যবহার করার সিদ্ধান্ত নিয়েছে; এর মধ্যে একটি হ'ল ffmpeg আপনাকে বিভিন্ন থ্রেডে বিভিন্ন x264 দৃষ্টান্ত চালাতে দেয় না, বরং পরবর্তী আউটপুটটিতে যাওয়ার আগে একটি নির্দিষ্ট আউটপুটে একটি নির্দিষ্ট ফ্রেমে একটি নির্দিষ্ট ফ্রেমে ডেড করে দেয়।
আপনি যদি রিয়েল-টাইম স্ট্রিমিং না করে থাকেন তবে আপনার আরও বিলাসিতা রয়েছে। 'সঠিক' উপায়টি সম্ভবত-জি-র সাথে নির্দিষ্ট জিওপি আকারের সাথে একটি রেজোলিউশনে এনকোড করা এবং তারপরে একই জায়গায় কীফ্রেমগুলি বাধ্য করার জন্য অন্যান্য রেজোলিউশনগুলি এনকোড করা।
আপনি যদি এটি করতে চেয়েছিলেন, আপনি কীফ্রেম বার পেতে ffprobe ব্যবহার করতে পারেন এবং তারপরে একটি শেল স্ক্রিপ্ট বা একটি বাস্তব প্রোগ্রামিং ভাষা ব্যবহার করে এটিকে একটি ffmpeg কমান্ডে রূপান্তর করতে পারেন।
তবে বেশিরভাগ সামগ্রীর জন্য, প্রতি 5 সেকেন্ডে একটি কীফ্রেম এবং প্রতি 5 সেকেন্ডে দুটি কীফ্রেম (এক জোর করে এবং পরিস্থিতি থেকে একজন) এর মধ্যে খুব কম পার্থক্য রয়েছে। এটি পি আই ফ্রেম এবং বি-ফ্রেমের আকার বনাম গড় আই-ফ্রেম আকারের প্রায়। আপনি যদি টিপিকাল সেটিংস সহ x264 ব্যবহার করেন (কেবলমাত্র আমি মনে করি যে এগুলি প্রভাবিত করার জন্য আপনার কিছু করা উচিত তবেই যদি আপনি -কিউন সেট করেন তবে সহজ সামগ্রীটিতে বিটরেট ব্যবহার করা থেকে x264 প্রতিরোধের একটি ক্ষুদ্র উপায় হিসাবে; এটি সমস্ত ফ্রেমের প্রকারকে একই মান হিসাবে সীমাবদ্ধ করে , আমি মনে করি) এবং আই-ফ্রেম গড় আকার 46 কেবি, পি-ফ্রেম 24 কেবি, বি-ফ্রেম 17 কেবি (পি-ফ্রেমের প্রায় অর্ধেক অর্ধেক) এর মতো ফলাফল পান, তারপরে প্রতি সেকেন্ডে 30 fps এ অতিরিক্ত আই-ফ্রেম পাবেন ফাইল আকারে কেবল 3% বৃদ্ধি। H264 এবং h263 এর মধ্যে পার্থক্যটি 3% হ্রাসের একগুচ্ছ তৈরি হতে পারে তবে এককটি খুব গুরুত্বপূর্ণ নয়।
অন্যান্য ধরণের সামগ্রীতে, ফ্রেমের আকারগুলি পৃথক হবে। সত্য কথা বলতে গেলে, এটি সাময়িক জটিলতা সম্পর্কিত এবং স্থানিক জটিলতা সম্পর্কে নয়, সুতরাং এটি কেবলমাত্র কঠিন সামগ্রী বনাম সহজ সামগ্রী নয়। তবে সাধারণত, স্ট্রিমিং ভিডিও সাইটগুলির একটি বিটরেট সীমা থাকে এবং তুলনামূলকভাবে বড় আই-ফ্রেমগুলির সাথে থাকা সামগ্রীটি এমন একটি সহজ সামগ্রী যা কতগুলি অতিরিক্ত কীফ্রেম যুক্ত করা হোক না কেন উচ্চ মানের এ এনকোড হবে। এটি অপব্যয়, তবে এই বর্জ্যটি সাধারণত লক্ষ্য করা যায় না। সর্বাধিক অপব্যয়যোগ্য সম্ভবত এমন একটি ভিডিও যা কোনও গানের সাথে কেবল একটি স্থির চিত্র, যেখানে প্রতিটি কীফ্রেম হুবহু এক হয়।
আমি নিশ্চিত নই যে কীভাবে বাধ্য করা কীফ্রেমগুলি হ'ল-ম্যাক্সেট এবং-বুফসাইজের সাথে রেট সীমাবদ্ধ সেটটির সাথে কীভাবে ইন্টারঅ্যাক্ট করে। আমি মনে করি এমনকি সাম্প্রতিক গুণমান দিতে ইউটিউবেরও সঠিকভাবে বাফার সেটিংস কনফিগার করার সমস্যা হয়েছে। যদি আপনি কেবল গড় বিটরেট সেটিংস ব্যবহার করেন যা কিছু সাইট (যেমন আপনি হেডার / মুভ পরমাণুতে x264 এর বিকল্পগুলি একটি হেক্স সম্পাদকের সাহায্যে পরীক্ষা করতে পারেন) তবে বাফার মডেলটি কোনও সমস্যা নয়, তবে আপনি যদি হন ব্যবহারকারী-উত্পাদিত সামগ্রীর পরিবেশন করা, গড় বিটরেট ব্যবহারকারীদের তাদের ভিডিওর শেষে একটি কালো পর্দা যুক্ত করতে উত্সাহিত করে।
Ffmpeg -g বিকল্প বা অন্য যে কোনও এনকোডার বিকল্পটি আপনি ব্যবহার করেন তা এনকোডার-নির্দিষ্ট বিকল্পটিতে ম্যাপ করা হয়। সুতরাং '-x264-params keyint = GOPSIZE' '-g GOPSIZE' এর সমতুল্য।
দৃশ্য সনাক্তকরণ ব্যবহারের ক্ষেত্রে একটি সমস্যা হ'ল যদি আপনি যে কোনও কারণে নির্দিষ্ট সংখ্যার নিকটে কীফ্রেমগুলি পছন্দ করেন। আপনি যদি প্রতি 5 সেকেন্ডে কীফ্রেমগুলি নির্দিষ্ট করে এবং দৃশ্যের সনাক্তকরণ ব্যবহার করেন এবং সেখানে 4.5 এর দৃশ্যপট পরিবর্তিত হয় তবে এটি সনাক্ত করা উচিত তবে পরবর্তী কিফ্রেমটি 9.5 এ হবে। সময়টি যদি এভাবেই বাড়তে থাকে তবে আপনি 40, 45, 50, 55 এর পরিবর্তে 42.5, 47.5, 52.5 ইত্যাদিতে কীফ্রেমগুলি দিয়ে শেষ করতে পারেন Con বিপরীতভাবে, যদি 5.5-এ কোনও দৃশ্যের পরিবর্তন হয় তবে সেখানে উপস্থিত হবে 5 এবং 5.5-তে একটি কীফ্রেম অন্য একটির জন্য খুব তাড়াতাড়ি হবে। Ffmpeg আপনাকে "পরবর্তী 30 ফ্রেমের মধ্যে কোনও দৃশ্যের পরিবর্তন না হলে এখানে একটি কীফ্রেম তৈরি করতে" নির্দিষ্ট করতে দেয় না। সি বোঝে এমন কেউ যদিও এই বিকল্পটি যুক্ত করতে পারে।
পরিবর্তনশীল-ফ্রেম-রেট ভিডিওর জন্য, আপনি যখন টুইচের মতো লাইভ স্ট্রিমিং করছেন না, তখন স্থায়ীভাবে স্থির ফ্রেম-রেটে রূপান্তর না করে আপনার দৃশ্যের পরিবর্তনগুলি ব্যবহার করতে সক্ষম হওয়া উচিত। আপনি যদি ffmpeg এ 'সিলেক্ট' ফিল্টার ব্যবহার করেন এবং এক্সপ্রেশনটিতে 'দৃশ্যের' ধ্রুবক ব্যবহার করেন, তবে ডিবাগ আউটপুট (-v ডিবাগ বা '+' এনকোড করার সময় বেশ কয়েকবার চাপুন) দৃশ্য পরিবর্তন নম্বরটি দেখায়। এটি সম্ভবত x264 দ্বারা ব্যবহৃত সংখ্যাটি থেকে পৃথক এবং কার্যকর হিসাবে নয় তবে এটি এখনও কার্যকর হতে পারে।
প্রক্রিয়াটি সম্ভবত একটি টেস্ট ভিডিও করতে হবে যা কেবল কীফ্রেম পরিবর্তনের জন্যই হয়, তবে 2-পাস ব্যবহার করতে পারলে রেট নিয়ন্ত্রণের ডেটা ব্যবহার করা যেতে পারে। (উত্সাহিত ডেটা বিভিন্ন রেজোলিউশন এবং সেটিংসের জন্য আদৌ কার্যকর কিনা তা নিশ্চিত নয়; ম্যাক্রোব্লক-ট্রি ডেটা হবে না)) এটিকে ধ্রুবক-ফ্রেমরেট ভিডিওতে রূপান্তর করুন, তবে ফ্রেমরেটকে অর্ধেক করার সময় স্টাটারিং আউটপুট সম্পর্কে এই বাগটি দেখুন যদি আপনি কখনও সিদ্ধান্ত নেন অন্যান্য উদ্দেশ্যে fps ফিল্টার ব্যবহার করতে। আপনার পছন্দসই কীফ্রেম এবং জিওপি সেটিংস সহ এটি x264 এর মাধ্যমে চালান।
তারপরে কেবলমাত্র আসল ভেরিয়েবল ফ্রেম-রেট ভিডিও সহ এই কীফ্রেমের সময়গুলি ব্যবহার করুন।
যদি আপনি ফ্রেমগুলির মধ্যে 20-সেকেন্ড ফাঁক দিয়ে সম্পূর্ণ ক্রেজি ব্যবহারকারী-উত্পাদিত সামগ্রীটিকে অনুমতি দেন তবে চলক ফ্রেম-রেট এনকোডের জন্য, আপনি আউটপুট বিভক্ত করতে পারেন, fps ফিল্টার ব্যবহার করতে পারেন, কোনওভাবে ফিল্টার নির্বাচন করতে পারেন (সম্ভবত একটি দীর্ঘ দীর্ঘ এক্সপ্রেশন তৈরি করতে পারে যা প্রতি কিফ্রেমের সময়) ... বা সম্ভবত আপনি পরীক্ষার ভিডিওটিকে ইনপুট হিসাবে ব্যবহার করতে পারেন এবং কেবলমাত্র ক্রেফ্রেমগুলি ডিকোড করতে পারেন, যদি সেই ffmpeg বিকল্পটি কাজ করে, বা কীফ্রেমগুলি নির্বাচন করতে নির্বাচিত ফিল্টারটি ব্যবহার করুন। তারপরে এটিকে সঠিক আকারে স্কেল করুন (এটির জন্য একটি স্কেল 2 রিফ ফিল্টার রয়েছে) এবং এতে মূল ভিডিওটি ওভারলে করুন। তারপরে মূল ভিডিওর সাথে এই গন্তব্য থেকে বাধ্যতামূলক কীফ্রেমগুলি একত্রিত করতে ইন্টারলিও ফিল্টারটি ব্যবহার করুন। যদি এর ফলে দুটি ফ্রেমের ফলাফল হয় যা 0.001 সেকেন্ডের বাইরে থাকে যে ইন্টারলিভ ফিল্টারটি প্রতিরোধ করে না, তবে এই সমস্যাটি নিজেই অন্য একটি নির্বাচিত ফিল্টার দিয়ে সমাধান করুন। ইন্টারলেভ ফিল্টারটির জন্য ফ্রেম বাফার সীমা নিয়ে কাজ করা এখানে মূল সমস্যা হতে পারে। এগুলি সমস্ত কাজ করতে পারে: ঘন স্রোত বাছাই করতে কোনও ধরণের ফিল্টার ব্যবহার করুন (ফিফো ফিল্টার?); একাধিকবার ইনপুট ফাইলটি উল্লেখ করুন যাতে এটি একাধিকবার ডিকোড হয় এবং ফ্রেমগুলি সংরক্ষণ করতে হয় না; 'স্ট্রিম সিলেক্ট' ফিল্টারটি ব্যবহার করুন, যা আমি কখনই করি নি, কী-ফ্রেমের ঠিক সময়ে; ইন্টারলিভ ফিল্টারটি এর ডিফল্ট আচরণ পরিবর্তন করে বা ফ্রেম বাদ দেওয়ার পরিবর্তে বাফারে সবচেয়ে পুরানো ফ্রেমটিকে আউটপুট দেওয়ার বিকল্প যুক্ত করে উন্নত করুন। কিফ্রেমগুলির ঠিক সময়ে, যা আমি কখনও করি নি; ইন্টারলিভ ফিল্টারটি এর ডিফল্ট আচরণ পরিবর্তন করে বা ফ্রেম বাদ দেওয়ার পরিবর্তে বাফারে সবচেয়ে পুরানো ফ্রেমটিকে আউটপুট দেওয়ার বিকল্প যুক্ত করে উন্নত করুন। কিফ্রেমগুলির ঠিক সময়ে, যা আমি কখনও করি নি; ইন্টারলিভ ফিল্টারটি এর ডিফল্ট আচরণ পরিবর্তন করে বা ফ্রেম বাদ দেওয়ার পরিবর্তে বাফারে সবচেয়ে পুরানো ফ্রেমটিকে আউটপুট দেওয়ার বিকল্প যুক্ত করে উন্নত করুন।