NabiKAZ / filimo-downloader

Download movies from filimo.com | لینک جایگزین جهت احتیاط: https://gitlab.com/NabiKAZ/filimo-downloader
GNU General Public License v3.0
143 stars 17 forks source link

مشکل درگیری پردازنده و یک مورده دیگه #5

Closed mehti1367 closed 6 years ago

mehti1367 commented 6 years ago
با سلام خدمت دولوپر این برنامه مشکل اول اینه که وقتی همه چی اکیه و میخوایم فیلم یا سریالی دانلود کنیم ، ffmpeg از پردازنده به صورت صد درصد از پردازنده استفاده میکنه که این اصلا خوب نیست ، پردازنده من مدل 6700k هستش و با توجه به موردی که خودشون گفتن داخل میل متغییر $video_file رو از .mp4 به .ts تغییر دادم و متوجه شدم که خیلی کمتر شده استفادش از پردازنده حدوده ده درصد. مشکل دومی که به وجود اومد بعد از این مورد، اینکه فایل رو با مشخصات دیگه و کیفیت بدی دانلود میکنه ، متوجه شدم زمانی که فایل کامل دانلود میشه هم رزولوشن و هم بیت ریت کمتر از اون چیزیه که من انتخاب کردم قبل از دانلود به این دو اسکرین شات توجه کنید : این کیفتی بود که با فرمت .mp4 دانلود کردم و اصلا مشکلی نداشت : http://s9.picofile.com/file/8318309076/480p_mp4.png و این مورد بعد از اینکه به ts تغییر دادم : http://s8.picofile.com/file/8318309084/360p_ts.png مشاهده میکنید هم روزولوشن تغییر داده شده هم کیفیت کمتر از چیزیه که انتخاب کردم و لوگوی دیجیکالا هم الان چک کردم بنظر میرسه خودشون انگار تغییر دادن سورس اصلی ویدئو رو.... البته فیلم های دیگه رو هم چک کردم کیفیت خوب دانلود نمیشه. یه مورد از این قضیه فهمیدم اینکه حتی بالاترین کیفیت رو دانلود میکنی با تصویر پیکسل پیکسل میشه و این موضوع هم من توجه کردم به خاطر انکودینگ و تغییر یه سری فایل ها هستش به طور مثال وقتی با mp4 دانلود میشه کدک صدا aac هستش ولی همون رو با ts دانلود میکنی به mp2 تبدیل میشه , و مهم تر از اون کدک تصویر از AVC به MPEG-2 Video تغییر پیدا میکنه... و در انتها میخوام تشکر کنم بابت این پروژه و مورد آخر اینکه اگه این مورد استفاده از پردازنده رفع بشه خیلی بهتره چونکه واقعا پردازنده خیلی اذیت میشه و اینکه استفاده از سرور درسته که هم سریع تره و هم از پردازنده خودمون استفاده نمیکنه ولی خب از سیستم خودمون دانلود کنیم ترافیک اصلا حساب نمیشه ... ممنون.
NabiKAZ commented 6 years ago
همونطوری که قبلاً صحبت شد، سورس ویدیوها TS هست و ما همزمان با دانلود داریم به MP4 کانورت میکنیم که طبعاً پردازش سنگینی صورت میگیره و شاید تا 100% cpu درگیر بشه. یک نکته رو هم دقت داشته باشید که در وضعیت عادی حتی وقتی با مرورگر شما آنلاین ویدیو رو از سایت تماشا میکنید، تا حدود 10% پردازنده شما درگیر هست. راه حل اولی که البته اشاره شد، تغییر پسوند `mp4` به `ts` در متغییر `‎$video_file` هست. که مصرف پردازنده از 100% تا حدود 30% کاهش پیدا میکنه که البته درسته که حدود 20% از وضعیت عادی بیشتره اما در عوض ویدیوی شما با سرعت 2 تا 4 برابر دور عادی (روی دور تند) فیلم درحال دانلود است. (دقت کنید که در این برنامه، سرعت دانلود، لزماً برابر با سرعت اینترنت شما نیست و در این روش میشه گفت ویدیو در حین تماشا ضبط میشه) مشکل این روش اینه که حجم فایل ts خروجی شما، چیزی تا حدود 3 برابر حجم، نسبت حالتی هست که به شکل mp4 دانلود کرده بودید. که خب شاید در نهایت مجبور باشید دوباره اون رو به mp4 برگردونید برای همین چندان پیشنهاد نمیکنم. مشکل دومی که شما مطرح کردید در خصوص کیفیت ts خروجی، که در عین حال که شما بالاترین کیفیت رو انتخاب میکنید اما تصویر مربع مربعی دیده میشه. که من این مشکل رو قبلاً حتی در مورد فورمت mp4 روی لینوکس داشتم که بعد از اینکه ffmpeg رو با لایبری libx264 کامپایل کردم، مشکل حل شد. بنابراین در مورد فورمت ts که با کدک MPEGTS مطرحه، این میتونه به عدم پشتیبانی کدک تصویری مربوط باشه و شاید لازمه کدک دانلود و با ffmpeg کامپایل بشه. حتی اگه همه این مشکلات رو حل کنید، درصد پردازشتون همونطور که اشاره شد روی حدود 30% هست. اما یک روش دیگه که هم میتونید فورمت mp4 رو داشته باشید و هم پردازش کاهش پیدا کنه، کم کردن تعداد هسته cpu درگیر با این پروسه هست. برای اینکار **اگر ویندوز استفاده میکنید، در `task manager`، تب `details` روی `ffmpeg.exe` راست کلیک و `set affinity` رو انتخاب کنید و هر تعداد هسته `cpu` که مایلید رو انتخاب کنید، اینطوری میتونید میزان درگیر بودن پردازنده برای کار ffmpeg رو کاهش و مدیریت کنید.** مثلاً برای پردازنده 4 هسته ای وقتی 1 هسته رو انتخاب میکنید، درصد مصرف کل پردازنده روی 25% میاد که حتی از وضعیت عادی که در بالا اشاره شد هم کمتر هست و فکر میکنم این روش، مشکل شما رو حل کنه. ضمناً توجه داشته باشید اینکه توسط این برنامه از ترافیک کم میشه یا نه رو من امتحان نکردم. شاید فقط ip چک نمیشه و با وضعیتی که از خود سایت مستقیم تماشا میکنیم فرق داشته باشه. اگر شما تست کردید به ما هم اطلاع بدید تا خیال دیگران هم راحت بشه 😉 در انتها از لطف شما سپاسگزارم.
mehti1367 commented 6 years ago
ببینید بنظرم مشکل از جای دیگه نشات میگیره ، چرا که سورس ویدئوهایی که در فیلیمو آپلود میشه واقعا همه ts نیستند اصلا فکر نکنم ts از طرف خوده فیلیمو بارگذاری بشه برای استریم ، نمونه بارزش همین قسمت جدید شهرزاد قطعا فرمت سورس ویدئو mp4 هستش ینی شما الان بخوای بخری این قسمت رو سورس ام پی فور هستش ، در راطه با اون محدودیت تعداد پردازنده ها اتفاقا خودم این مورد رو انجام دادم سرعت دانلود تا حدی کم میشه ولی خب بهتر از درگیری کامله پردازندس امروز به صورت یقین متوجه شدم فایل توسط ffmpeg کانورت میشه و به صورت خام دانلود نمیکنه یه پردازشی رو فایل انجام میده و سره همین با دانلود معمولی فرق داره ، عین کپچر میمونه ، من این تنظیمات انکود رو داخل 3 تا فایل بررسی کردم همه یکسان بودند پس قطعا ffmpeg داره فایل رو انکود میکنه. در رابطه با قضیه کنتور انداختن ترافیک واقعیتش اینه از طرف خوده فیلیمو این مورد ارائه شده ، به صورتی که خودشون یه سری isp رو مشخص کردن اگه مثلا نته شما های وب باشه تمام ترافیک رایگان هستش ولی شاتل باشه نصف حساب میشه فک کنم لیستش تو قسمت خرید اشتراک باشه
NabiKAZ commented 6 years ago
راستش به نظر من اصلاً مشکل خاصی وجود نداره! 😉 من که قبلاً عرض کرده بودم داریم از ts به mp4 کانورت میکنیم و به همین خاطر منابع زیادی مصرف میشه و خب این طبیعی هست. و این ذات کانورت هست. اگر نمیخواید منابع مصرف بشه. بازهم همونطوری که عرض شد، همون سورس ts رو میتونید بگیرید که مشکلات و مسائل خودش رو داره که قبلاً کامل توضیح داده شد. در مورد فورمت سورس ویدیو های آپارات (از جمله سریال شهرزاد که اشاره داشتید) و حتی نمونه های مشابه که سرویس آنلاین میدن و ویدیو رو استریم ارائه میدن (که البته این استریم بودن به خاطر مسائل امنیتی و جلوگیری از دانلود هست.) میشه گفت تقریباً همگی از فورمت m3u8 استفاده میکنند (که بروزترین تکنیک حال حاضر هست) در این تکنیک یا تکنولوژی ویدیوی اصلی به پارت های کوچکتر با پسوند ts تقسیم میشه و تکه تکه سمت مرورگر ارسال میشه و مرورگر این تکه ها رو آنی دریافت و پشت سرهم به شما نشون میده. به همین خاطر یک فایل مستقل و واحد وجود نداره و شما نمیتونید کل ویدیو رو به سبک سایر فایلهایی که با لینک مستقیم هستند دانلود کنید و بنده هم گفتم که داریم ویدیو رو ضبط میکنیم یا به قول خودتون عین اینه که کپچر میکنیم. در ضمن، مطمئناً ویدیوها به فورمتهایی مثل mp4 عادی روی سرور آپلود شدند ولی مسیر اصلی اون روی دیسک سرور قابل تشخیص نیست و حتی معمولاً دسترسی از سمت کلاینت به اون رو غیر ممکن میکنند (مثلاً در مسیر قبل از root سایت قرار میدهند) سپس توسط نرم افزارهای واسط از درون سرور این فایل mp4 رو که بیشترین کیفیت ممکنه رو داره رو میشکونن و از روی اون m3u8 و پلی لیست ts ها برای کیفیت های مختلف تولید و در مسیری که توسط url و کاربر در دسترس باشند قرار میگیرند. این موضوع رو از این بابت باز کردم که این ذهنیت رو فراموش کنید که ما دنبال یه آدرس فایل mp4 باشیم که مثلاً با IDM عادی یا هر روشی دانلودش کنیم و هیچ پردازش اضافه هم بهمون تحمیل نشه! درمورد ترافیک رایگان هم، متوجه مسئله هستم. عرض من این بود که شاید خود فیلیمو یک لایه کنترلی خاصی داشته باشه که وقتی شما روی وب آنلاین ویدیو رو تماشا میکنید، مثلاً یک درخواست آژاکسی ارسال کنه تا مطمئن بشه شما روی وب هستید و در اون شرایطه که ترافیکتون رو محاسبه نمیکنه. چون تکنیک ما تشخیص فایل m3u8 و دانلود توسط ffmpeg هست، چون اون لایه کنترلی که توضیح دادم رو رعایت نمیکنیم ممکنه شامل شرایط ترافیک رایگان نشه. که خب شاید هم فقط ip رو چک میکنه و در اون صورت مشکلی نیست. که اینها فقط یک فرضیس و به همین خاطر گفتم تا تست نکنیم مشخص نمیشه.
mehti1367 commented 6 years ago
برام خوب جا افتاد موافقم . در مورد اون m3u8 نمیدونستم خیلی ممنون.