মাল্টিট্র্যাক ভিডিও রিয়েল টাইম ট্রান্সকোড করে না


2

এনভিডিয়ার এনকোড সীমাটি বাইপাস করার জন্য উত্সর্গীকৃত এই গিথুব পৃষ্ঠায় উইন্ডোজ সমর্থন যুক্ত হয়েছে: https://github.com/keylase/nvidia-patch/tree/master/win

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

বিভাগ বিভাজনের প্রকৃতির কারণে একটি 5 টি পৃথক আউটপুট ফাইলকে সিঙ্ক্রোনাইজ করে রাখার জন্য একটি কমান্ড তৈরি করা বেশ কঠিন ছিল। তাই আমি ভাবছি যে আমি যদি একটি ফাইলে সমস্ত কিছু করি তবে আমি সেসব কিছু ঝামেলা বাইপাস করতে এবং আমার কর্মপ্রবাহ / আদেশটি সহজ করতে পারি। তবে, আমি খুঁজে পেয়েছি যে আমি যখন একটি আউটপুট ফাইলে সমস্ত কিছু রাখার চেষ্টা করি তখন আমি রিয়েল টাইম ট্রান্সকোড করতে পারি না।

উদাহরণ কমান্ড:

ffmpeg -y -hide_banner -thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -video_size 3840x2160 `
-framerate 60 -pixel_format nv12 -i video="Video (Pro Capture)":audio="ADAT (3+4) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -video_size 3840x2160 -framerate 60 -pixel_format nv12 `
-i video="AVerMedia HD Capture GC573 1":audio="Analog (1+2) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -video_size 1920x1080 -framerate 60 -pixel_format yuv420p `
-i video="Game Capture HD60 Pro (Video) (#01)":audio="Game Capture HD60 Pro (Audio) (#01)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -i audio="ADAT (5+6) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -i audio="SPDIF/ADAT (1+2) (RME Fireface UC)" `
-c:v h264_nvenc -preset: llhp -pix_fmt nv12 -b:v 288M -minrate 288M -maxrate 288M -bufsize 288M -c:a aac -ar 44100 `
-b:a 384k -vsync 1 -max_muxing_queue_size 9999 -map 0 -map 1 -map 2 -map 3 -map 4 `
-f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 -segment_format_options max_delay=0 `
C:\Users\djcim\Videos\FFmpeg\FFmpeg%02d.ts

উপরের কমান্ডটি রিয়েল টাইম ট্রান্সকোড করে না, প্রায় .6x গতিতে বসে। তবে আমি যখন কেবল একাধিক আউটপুটগুলিতে সমস্ত কিছু আলাদা করি তখন আমি রিয়েল টাইম ট্রান্সকোড করি:

ffmpeg -y -hide_banner `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147.48M -i audio="Analog (1+2) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147.48M -i audio="ADAT (5+6) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -r 25 -f lavfi -rtbufsize 2147.48M -i color=c=black:s=256x120 `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147.48M -video_size 1920x1080 -framerate 60 `
-pixel_format yuv420p -i video="Game Capture HD60 Pro (Video) (#01)":audio="Game Capture HD60 Pro (Audio) (#01)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147.48M -video_size 3840x2160 -framerate 60 `
-pixel_format nv12 -i video="Video (Pro Capture)":audio="ADAT (3+4) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147.48M -video_size 3840x2160 -framerate 60 `
-pixel_format nv12 -i video="AVerMedia HD Capture GC573 1":audio="Analog (1+2) (RME Fireface UC)" `
-map 2,0 -map 0 -c:v h264_nvenc -preset: llhp -r 25 -rc-lookahead 25 -pix_fmt nv12 -b:v 288M -minrate 288M `
-maxrate 288M -bufsize 288M -c:a aac -ar 44100 -b:a 384k -vsync 1 -max_muxing_queue_size 9999 `
-f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 -segment_format_options max_delay=0 `
C:\Users\djcim\Videos\FFmpeg\CP\CP%02d.ts `
-map 2,1 -map 1 -c:v h264_nvenc -preset: llhp -r 25 -rc-lookahead 25 -pix_fmt nv12 -b:v 288M -minrate 288M `
-maxrate 288M -bufsize 288M -c:a aac -ar 44100 -b:a 384k -vsync 1 -max_muxing_queue_size 9999 `
-f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 -segment_format_options max_delay=0 `
C:\Users\djcim\Videos\FFmpeg\SB\SB%02d.ts `
-map 3:0,3:1 -map 3:1 -c:v h264_nvenc -preset: llhp -r 60 -rc-lookahead 60 -pix_fmt yuv420p -b:v 288M -minrate 288M `
-maxrate 288M -bufsize 288M -c:a aac -ar 44100 -b:a 384k -vsync 1 -max_muxing_queue_size 9999 `
-f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 -segment_format_options max_delay=0 `
C:\Users\djcim\Videos\FFmpeg\EL\EL%02d.ts `
-map 4:0,4:1 -map 4:1 -c:v h264_nvenc -preset: llhp -r 60 -rc-lookahead 60 -pix_fmt nv12 -b:v 288M -minrate 288M `
-maxrate 288M -bufsize 288M -c:a aac -ar 44100 -b:a 384k -vsync 1 -max_muxing_queue_size 9999 `
-f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 -segment_format_options max_delay=0 `
C:\Users\djcim\Videos\FFmpeg\MW\MW%02d.ts `
-map 5:0,5:1 -map 5:1 -c:v h264_nvenc -preset: llhp -r 60 -rc-lookahead 60 -pix_fmt nv12 -b:v 288M -minrate 288M `
-maxrate 288M -bufsize 288M -c:a aac -ar 44100 -b:a 192k -vsync 1 -max_muxing_queue_size 9999 `
-f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 -segment_format_options max_delay=0 `
C:\Users\djcim\Videos\FFmpeg\AM\AM%02d.ts

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

কোনও একক সমাধান কেন একক ফাইলের সমাধানের সাথে লড়াই করে যখন এর পরে না হয়? এবং যদি সম্ভব হয়, একটি সমাধান?

উত্তর:


1

ধাঁধাটির অনুপস্থিত অংশটি ছিল - CR-lookahead যা কোনওভাবে আমার মূল পোস্টের দ্বিতীয় কমান্ড থেকে বাদ দেওয়া হয়েছিল।

আমি যদি মাল্টিট্র্যাক ফাইলে -rc-lookahead 60 যুক্ত করি তবে এটি মোটামুটি দ্রুত রিয়েলটাইম ট্রান্সকোডিং পর্যন্ত উঠে যায়, উদাহরণস্বরূপ:

ffmpeg -y -hide_banner -thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -video_size 3840x2160 `
-framerate 60 -pixel_format nv12 -i video="Video (Pro Capture)":audio="ADAT (3+4) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -video_size 3840x2160 -framerate 60 -pixel_format nv12 `
-i video="AVerMedia HD Capture GC573 1":audio="Analog (1+2) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -video_size 1920x1080 -framerate 60 -pixel_format yuv420p `
-i video="Game Capture HD60 Pro (Video) (#01)":audio="Game Capture HD60 Pro (Audio) (#01)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -i audio="ADAT (5+6) (RME Fireface UC)" `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147M -i audio="SPDIF/ADAT (1+2) (RME Fireface UC)" `
-c:v h264_nvenc -preset: llhp -pix_fmt nv12 -rc-lookahead 60 -b:v 288M -minrate 288M -maxrate 288M -bufsize 288M -c:a aac `
-ar 44100 -b:a 384k -vsync 1 -max_muxing_queue_size 9999 -map 0 -map 1 -map 2 -map 3 -map 4 `
-f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 -segment_format_options max_delay=0 `
C:\Users\djcim\Videos\FFmpeg\FFmpeg%02d.ts

আপনি এমনকি এই মানটি 30 বা কমতে কমিয়ে দিতে পারেন, তবে এটি মানেরও হ্রাস পাবে। এটি এমন এক ধরণের "এনকোডিং বাফার" যেখানে এটি এনকোডিংয়ের সময় বিটগুলি কীভাবে বিতরণ করতে হবে তা নির্ধারণ করতে ভবিষ্যতের ফ্রেমগুলি দেখায়।
ছদ্মবেশ করুন

সংখ্যাটি কি তাত্ত্বিকভাবে কমিয়ে ট্রান্সকোডিংয়ের গতি বাড়ায়? আমি এটি 1000 পর্যন্ত রেখেছি এবং এটি কোনও পার্থক্য বলে মনে হচ্ছে না, সর্বনিম্ন / সর্বাধিক কোথাও খুঁজে পাবে না।
নিম্বল

তাত্ত্বিকভাবে হ্যাঁ, এবং সর্বোচ্চ / মিনিট সবচেয়ে বড় সম্ভাব্য পূর্ণসংখ্যার -1, তবে এটি সম্ভবত কোনও জিওপি দৈর্ঘ্যের মতো অন্যান্য সেটিংস দ্বারা সীমাবদ্ধ থাকবে। সত্যি কথা বলতে কী জানি এনভিইএনসি এটি কীভাবে প্রয়োগ করে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.