ביצועים של פענוח וידאו 1080p בקידוד H264

התחלתי לבדוק איך המחשב בסלון מתמודד עם וידאו של 1920X1080 בקידוד H264 – זה וידאו Full HD שיש בBlueRay, וזה מה שאני ארצה להציג על המקרן (שמתמהמה קצת, אולי היום).
המחשב הוא פנטיום D במהירות שעון של 3Ghz, זכרון של 2GB וכרטיס מסך GeForce 8600 GT 512MB, לכאורה לא אמור להיות קובץ וידאו שיהיה מעבר לכוחותיו.
ניסיתי לנגן עליו עם mplayer קובץ דגימה של Matrix – שישים שניות סרט בקובץ של 70 מגה – והמחשב לא סחב אותו כמו שצריך:
הווידאו זז לאט, והסאונד יצא מסינכרון עם התמונה מהר מאוד.
מחשב שהיה פאר היצירה לפני שנתיים, לא סוחב היום משימה של ניגון וידאו. מי אומר שאין צורך במעבדים יותר חזקים?
לשם הבדיקה, ניסיתי את אותו קובץ במחשב החדש – פנטיום Core-DUO 3Ghz, זכרון 4GB וכרטיס מסך GeForce 9800 GT 512MB והוא סחב אותו יפה מאוד.
אז נראה על פניו שצריך מפלצת רצינית כדי לנגן את הקבצים האלו, יותר מהתפלצון שיש לי בסלון.
נסיון ראשון, הדרייבר של כרטיס המסך:
הבדיקה שלי היתה כשxorg, שרת הX (השרת שאחראי על מערכת החלונות והתצוגה) עבד עם הדרייבר הגנרי vesa ולא עם הדרייבר של NVidia כי היתה לי בעיה עם הדרייבר האחרון שלהם.
ניסיתי את הדרייבר nv, שהוא דרייבר פתוח קוד לכרטיסי NVIDIA שלא תומך בהאצת תלת מימד, ולא היה שיפור.
התקנתי את הדרייבר של NVIDIA במחשב בסלון (ונאלצתי להשתמש בגרסא קודמת שהתקנתי לפני כמה שבועות במחשב החדש), עדיין אין שיפור.
למרות שכרטיסי NVIDIA החדשים מגיעים עם תמיכה בפענוח קבצי וידאו בחומרה – טכנולוגיה בשם PureVideo, הדרייברים שלהם ללינוקס לא תומכים בזה, ולכן אף פרוייקט קוד פתוח ללינוקס לא משתמש ביכולת הזו של החומרה.
אז שימוש בחומרה הזו יורד מהפרק כדי להאיץ את העסק, לפחות עד שNVIDIA ישחררו דרייבר שתומך בזה.

נסיון שני, שדרוג של mplayer:
החבר'ה בערוץ הirc של mplayer נבהלו כשסיפרתי להם על איזו גרסא אני בודק:
[code]
[rsk] same mplayer version's?
[omry] hmm, sec
[rsk] also using svn generally speeds up things compared to RC2.
[rsk] especially if you are using a distro package
[omry] hmm, actually the mplayer on the slower box looks older :MPlayer 1.0rc1-4.1.2 (C) 2000-2006 MPlayer Team
[omry] compared to MPlayer dev-SVN-r25315 on the faster box
[rsk] that's ancient
[rsk] please burn it with fire
[omry] dispatching the nukes 🙂
[/code]

כדי להיות בטוח שאני מריץ את הגרסא הכי מהירה שאפשר, הסרתי את הגרסא המותקנת, הורדתי את הקוד העדכני מsvn, ובניתי אותו חיש מהר.
התקנתי, בדקתי, ועדיין העסק זז לאט מדי על המחשב בסלון.

נסון שלישי, שימוש בכמה ליבות:
זוכרים את עסק הביש שבו גוגל סגרה פרוייקט בגוגל קוד לפני כמה שבועות?
כל העסק הוא בדיוק מסביב לזה, CoreAVC הוא פרוייקט מסחרי שמאפשר שימוש בכמה ליבות כדי לפענח H264 בצורה מהירה. הפרוייקט לא תומך בלינוקס – אבל אנשים במצב דומה לשלי החליטו שהם גורמים לו לעבוד על לינוקס בדרכים עקלקלות.
בכל אופן, להתקין קוד סגור נוסף מעבר לדרייבר של NVIDIA זה דבר שהייתי רוצה להמנע ממנו, במיוחד לאור ההיסטוריה הבעייתית של של הפרוייקט.

נסיון רביעי, נגנים אחרים:
טוב, אז אולי mplayer לא כתוב הכי טוב, ונגן אחר יעשה עבודה יותר טובה.
xine בכלל לא ניגן את הקובץ.
VLC ניגן את הקובץ, אבל נראה שהוא מפיל פריימים בצורה שגורמת לווידאו להראות זוועה כשהמחשב לא סוחב אותו (מציג טוב על המחשב המהיר, קטסטרופה על האיטי).
טוב שיהיה mplayer.

נסיון חמישי ודי:
הרצתי את mplayer עם פרמטר -benchmark, והוא סיפר לי די מהר שהמחשב איטי מדי:

[code]
************************************************
**** Your system is too SLOW to play this! ****
************************************************

Possible reasons, problems, workarounds:
– Most common: broken/buggy _audio_ driver
– Try -ao sdl or use the OSS emulation of ALSA.
– Experiment with different values for -autosync, 30 is a good start.
– Slow video output
– Try a different -vo driver (-vo help for a list) or try -framedrop!
– Slow CPU
– Don't try to play a big DVD/DivX on a slow CPU! Try some of the lavdopts,
e.g. -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all.
– Broken file
– Try various combinations of -nobps -ni -forceidx -mc 0.
– Slow media (NFS/SMB mounts, DVD, VCD etc)
– Try -cache 8192.
– Are you using -cache to play a non-interleaved AVI file?
– Try -nocache.
[/code]
יופי של הודעת שגיאה.
כדי לשלול בעיה של קול או דרייבר תצוגה איטי, הרצתי את mplayer עם
[code]
mplayer -benchmark -vo null -ao null file.mkv
[/code]
מה שמריץ את הווידאו בלי סאונד ובלי תצוגה – פענוח בלבד – לא היה שיפור.

ניסיתי את ההצעה השניה:
[code]
mplayer -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all file.mkv
[/code]
פה כבר היה שיפור אדיר – הסרט רץ חלק
לא הרגשתי ירידה באיכות, למרות שאמורה להיות איזו שהיא פגיעה באיכות.

אז נראה שככה אני אריץ את הסרטים מהרזולוציה הזו לעת עתה, המפתחים של mplayer טוענים שהם משפרים את הביצועים שלו בפענוח h264 על בסיס כמעט יומי, גם בהיבט של מיקבול (שימוש בכמה ליבות) וגם בהיבט של שיוף ביטים (פענוח יותר מהיר על כל ליבה). אני אבדוק מדי פעם אם הם שיפרו מספיק כדי שאני אוכל לוותר על הפרמטר הזה.

Facebook Comments

11 תגובות בנושא “ביצועים של פענוח וידאו 1080p בקידוד H264”

  1. גם לי הייתה את הבעיה הזו. זה נפתר בקלות כאשר השתמשתי ב-SMPlayer מסיבה כל שהיא. זה גם אחלה GUI, היחידי שמשתווה לZoom Player שהשתמשתי בחלונות. כדאי לך לנסות.
    חסרון יחיד שיש לי זה שהוא לא קורא קבצים מקושרים (נגיד יש לי עונה שלמה, וכדי לחסוך מקום המפיצים שמו את שיר הפתיחה בקובץ נפרד שמקושר לכל פרק). אם אתה יודע איך אפשר להפעיל את זה אשמח לשמוע.

  2. פוק:
    SMPlayer intends to be a complete front-end for MPlayer, from basic features like playing videos, DVDs, and VCDs to more advanced features like support for MPlayer filters and more.

    זה mplayer בתחפושת. אם הוא פתר לך את הבעיה זה כנראה כי הוא הפעיל אוטומטית את הפרמטר שעזר לי.

  3. כן, אני יודע וזה למה אמרתי שלא ברור לי למה זה פתר את הבעיה, כי הוא מציג את הוידאו ברזולוציה מלאה. לא יודע, אני גם משתמש בUbuntu-restricted-extras שאולי יותר סביר שמכאן באה הישועה, אבל mplayer ו-VLC עושים לי בדיוק את הבעיות שלך.

  4. פוק, עבודת המחקר הקטנה שעשיתי אתמול מראה שאין פיתרון אחר (אז הUbuntu restricted extras לא יעזור כנראה).
    אולי תוכל לראות בלוגים של SMPlayer עם אילו פרמטרים הוא מפעיל את MPlayer (אם הוא אכן מפעיל אותו כתהליך נפרד).

  5. אני לא מוצא פרמטר משמעותי, אבל יש באמת רשימה דיי ארוכה של פרמטרים. רובם קשורים לכתוביות או אודיו (כי יש לי סיפור נפרד עם בעיות של אודיו בכרטיס קול USB). הדברים ש*אולי* חשובים (רשמתי גם כל מה שאני לא יודע מה הוא):

    -vo x11
    -framedrop
    -input conf=/usr/share/smplayer/input.conf
    -nocache
    -osdlevel 0
    -idx
    -vf-add pp
    -autoq 6
    -vf

  6. אני לא פוסל את האפשרות שהמעבד איטי מדי – PentiumD הוא, כידוע, לא באמת מעבד מרובה ליבות – אבל יש סיכוי שהבעיה נעוצה ברוחב הפס של כרטיס הוידאו. במחשב הישן זה מן הסתם AGP ובחדש זה PCI-E, וההבדל הוא גדול. אפשר לעשות את הניסוי כך: לקחת קטע מתוך ה-MKV ולדחוס אותו מחדש לפורמט MPEG2, שדורש הרבה פחות מאמץ בפתיחה. אם זה עדיין איטי, כנראה שצואר הבקבוק נמצא במקום אחר.

  7. רוא"ש, פסלתי בעיה אחרת ברגע שהרצתי את הסרט בלי פלט ווידאו ובלי פלט אודיו.
    בכל מקרה, כרטיס המסך בממשק PCIE.

    פעם ראשונה שאני שומע את הטענה שפנטיום D הוא לא באמת מרובה ליבות, על מה אתה מבסס את זה?

  8. הוא כן מרובה ליבות פשוט בנוי בצורה של 2 מעבדים מודבקים ביחד משתפים את אותו בקר זיכרון (בניגוד ל AMD שם לכל אחד יש גישה נפרדת)

סגור לתגובות.