שְׁאֵלָה:
הקלט וזרם וידאו מהמצלמה בו זמנית
koogee
2015-01-23 16:01:02 UTC
view on stackexchange narkive permalink

אני מקליט וידאו מ- Pi באמצעות מצלמת מודול עם picamera:

  ייבא picamerawith picamera.PiCamera () כמצלמה: camera.resolution = (640, 480) camera.start_recording ('1 .h264 ') camera.wait_recording (5) עבור i בטווח (2, 11): camera.split_recording ('% d.h264 '% i) camera.wait_recording (5) camera.stop_recording ()   לפני> 

השתמשתי בנפרד בשילוב של raspivid ו- gstreamer כדי להזרים וידאו מפי ללא כל עיכוב. האם יש דרך לאחסן ולזרום צילומים באמצעות פיתון בו זמנית ?

המחשבה שלי חייבת להיות דרך להשתמש במצלמה כקלט וליצור שני מקורות פלט: סרטון 720p עבור אחסון ווידאו 240p מופחת לזרם באמצעות gstreamer ...?

אם אתה מצנרת 'raspivid' אתה יכול 'לתכנן' את הפלט לקובץ * ו- * gstreamer או כל דבר אחר (ראה 'man tee'). כל עוד זרם אחד ישר לדיסק, זה לא יוסיף תקורה רבה, אבל אם אתה רוצה לעבד את הקלט לשני פורמטים שונים בו זמנית אני חושב שזו תהיה יותר מדי עבודה לטפל ב- pi.
האם אתה יכול בטובך לפרסם דוגמה בקוד?
שתיים תשובות:
Dave Jones
2015-05-09 21:00:36 UTC
view on stackexchange narkive permalink

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

  #! / Usr / bin / env pythonimport ioimport picameraimport socket # פלט (עד כאן כפי שמדובר בפיקמרה), הוא רק שם קובץ או אובייקט # שמיישם שיטת כתיבה () (ואופציונלי את השטיפה () וסגור () # שיטות) MyOutput (אובייקט): def __init __ (עצמי, שם קובץ, גרב) : self.output_file = io.open (שם קובץ, 'wb') self.output_sock = sock.makefile ('wb') def לכתוב (self, buf): self.output_file.write (buf) self.output_sock.write (buf ) def flush (self): self.output_file.flush () self.output_sock.flush () def close (self): self.output_file.close () self.output_sock.close () # חבר שקע לשרת מרוחק ב- יציאה 8000sock = socket.socket () sock.connect (('my_server', 8000)) עם picamera.PiCamera () כמצלמה: camera.resolution = (640, 480) camera.framerate = 24 # בנה מופע של המותאם אישית שלנו תפוקה s plitter עם שם קובץ ושקע מחובר my_output = MyOutput ('output.h264', sock) # הקלט וידאו לפלט המותאם אישית (עלינו לציין את הפורמט כ- # הפלט המותאם אישית אינו מתיימר להיות קובץ עם שם קובץ) camera.start_recording (my_output, format = 'h264') camera.wait_recording (30) camera.stop_recording ()  
goldilocks
2015-01-24 19:32:50 UTC
view on stackexchange narkive permalink

הפקודה טי קוראת מקלט רגיל והעתקות לכל מספר קבצים בתוספת פלט רגיל כברירת מחדל, ראה man tee לפרטים נוספים. פירוש הדבר שאתה יכול לבקש מ- tee ליצור קובץ מהקלט ואז לצינור את הפלט למשהו אחר.

תוספת של צינור נוסף אינה בתיאוריה מוסיפה מעט חוסר יעילות. אם זה משמעותי או לא תצטרך לשפוט בעצמך בשיטת הזרמת משלך. השיטה הנוכחית שלי אינה מספקת ברזולוציה מלאה. זה לא עניין עצום כרגע אבל כשזה אנסה למצוא משהו טוב יותר (למשל כביכול gstreamer עובד טוב יותר מ- clvc).

עם זאת, ראוי לציין שהקובץ שנשמר באופן מקומי ב- pi זהה. הזמן הוא איכות מושלמת, כך שהפעילות אינה מפריעה לפיזור. הנה דוגמה:

raspivid -o - -t 0 | tee test_video.h264 | cvlc -v stream: /// dev / stdin --sout '#standard {access = http, mux = ts, dest =: 8080': demux = h264

שברתי את זה לשתי שורות לקריאות; אתה יכול ללחוץ על return לאחר | (pipe) ולסיים את הפקודה בדיוק כמו שאתה יכול לשבור שורה עם \ . אתה יכול להחליף את cvlc בכל מה שאתה רוצה. שוב, למרות שהזרם היה באיכות ירודה, test_video.h264 יצא מושלם.

אם אני מוריד את הרזולוציה ל- 640x360 הסדר זה בסדר, עם שנייה או שתיים של חביון וזה מה שאני מקבל בדרך כלל. אני לא חושב ש טי או הצינור השני עושים שום הבדל באיכות הזרם; אלה מסוגלים לתפוקה גבוהה בהרבה מהנדרש כאן ואינם דורשים הרבה משאבי מערכת.

המעבד רץ ב-35-45%, וזהה לזו בהזרמת וידאו ללא טי קוד>.

תודה על ההודעה שלך. מכיוון שאני רוצה לעשות זאת במסגרת התסריט שלי, בחנתי את ה- API של PiCamera 1.9 ויש שיטה 'record_sequence' שלוקחת פרמטר 'splitter_port'. יש גם דוגמה להקלטה של ​​עד 4 יציאות בו זמנית מהמצלמה.
אני נאבק קצת בקשירת הקלטה של ​​זרם 240p ווידאו 720p לאחסון שמתפצל כל שעה אבל אני מרגיש שזה כיוון מבטיח.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...