আমি কী ক্যামেরা মডিউল সহ রাস্পবেরি পাইতে 24 ঘন্টা ভিডিও রেকর্ড করতে পারি?


12

প্রদত্ত যে আমার পর্যাপ্ত ক্ষমতা সহ একটি এসডি কার্ড রয়েছে, এটি কি তাত্ত্বিকভাবে একটি ক্যামেরা মডিউল সহ 24 ঘন্টা ভিডিও রেকর্ড করা সম্ভব বা রেকর্ডিংয়ের সময়সীমা সীমিত? কেউ কি এই চেষ্টা করেছে?

আপনি কি মনে করেন যে 64 গিগাবাইট কোনও 360p রেকর্ডিং মানের পক্ষে যথেষ্ট?

উত্তর:


20

আমাকে অবশ্যই স্বীকার করতে হবে যে আমি উপজাতির স্টক বিল্ডিং (লিনাসের উত্তরে উল্লিখিত) 2 জিবি সীমাবদ্ধতা সম্পর্কে অবগত ছিলাম না। বিকল্প (যদি আপনি ব্যবহারকারীর দেশটিকে পুনরায় সংকলন করতে চান না) পিকামেরা ব্যবহার করা হবে (পাইথন বাক্সের বাইরে 64৪ -বিট ফাইল পয়েন্টার সমর্থন করে)। উদাহরণস্বরূপ, নীচেরগুলিতে 24 ঘন্টা সুখের সাথে H.264 এ একটি প্রশস্ত স্ক্রিন 360p ভিডিও রেকর্ড করা উচিত:

import picamera

with picamera.PiCamera() as camera:
    camera.resolution = (640, 360)
    camera.framerate = 24
    camera.start_recording('one_day.h264')
    camera.wait_recording(24 * 60 * 60)
    camera.stop_recording()

প্রশ্নের পরবর্তী অংশটি 64৪ জিবি এসডি কার্ডের সাথে খাপ খায় কিনা তা। আমার কুণ্ডলী "সম্ভবত", তবে আসুন যাচাই করি ...

পাই এর এইচ .২64 bitrateenc এনকোডারটিকে পিকামেরার স্টার্ট_রেকর্ডিং পদ্ধতিতে --bitrateপ্যারামিটারের সাথে বা বর্ণানুক্রমিক প্যারামিটারের সাথে বিটরেট সীমা দেওয়া যেতে পারে । বর্ণবাদী এবং পিকামের উভয় ক্ষেত্রেই এই ডিফল্ট 17 এমবিপিএস (প্রতি সেকেন্ডে মেগাবাইট) থাকে তাই তাত্ত্বিকভাবে ডিফল্ট সেটিংসের সাথে রেকর্ড করা একটি 24 ঘন্টা ভিডিওর চেয়ে বড় হতে পারে না:

  24         hours
* 60         minutes per hour
* 60         seconds per minute
* 17000000   bits per second
/ 8          bits per byte
/ 1073741824 bytes per gig
  ----------
  170.990825 Gb

হুম ... এটি আমার প্রত্যাশার চেয়ে বড়, তবে ঠিক আছে। একটি বিষয় মনে রাখবেন যে 17 এমবিপিএস-এর ডিফল্টটি ডিফল্ট রেকর্ডিং রেজোলিউশনে কার্যকর হতে বোঝায়, যা বর্ণিতদের ক্ষেত্রে পুরো 1080p (যদিও পিকামের ক্ষেত্রে ডিসপ্লের রেজোলিউশনের ডিফল্ট বা 720p হিসাবে কোনও প্রদর্শন নেই) যখন আমি এটি লিখেছিলাম "বন্ধুবান্ধব" বলে মনে হয়েছিল)। যদি আপনি কেবল 360 পি-তে রেকর্ডিং করে থাকেন তবে আপনি সম্ভবত অনেক কম বিটরেট সীমা নিয়ে চলে যেতে পারেন।

মনে রাখা অন্য জিনিসটি হ'ল বিটরেট সীমাটি কেবল এটি: একটি উচ্চতর সীমা। যদি এনকোডারটির এক সেকেন্ডের গতির ভাল পরিমাণের উপস্থাপনের জন্য সমস্ত 17 মিলিয়ন বিটের প্রয়োজন হয় না, তবে এটি এতগুলি ব্যবহার করবে না। এনকোডারের পরিমাণ নির্ধারণের মাধ্যমে (যা qualityপিকামেরায় প্যারামিটার এবং the--qp"যথেষ্ট ভাল" এর অর্থ কী আমরা এনকোডারের ধারণাটিও সামঞ্জস্য করতে পারি sp গুণমানটি 0 এবং 40 এর মধ্যে একটি মান দ্বারা প্রতিনিধিত্ব করা হয় Lower নিম্ন মানের মানে আরও ভাল মানের, তাই 1 টি অত্যন্ত ভাল এবং 40 টি হাস্যকরভাবে খারাপ। সাধারণত "যথেষ্ট ভাল" মানগুলি প্রায় 20-25 এর মধ্যে থাকে। মান 0 (এটি ডিফল্টও) বিশেষ বলে মনে হয়; আমি এনকোডারটির ঠিক কী অর্থ তা নিশ্চিত নই (আপনি ফার্মওয়্যারকে এটি জিজ্ঞাসা করতেই হবে) তবে এটি মনে হয় 15-20 এর কাছাকাছি মানের (যেমন খুব ভাল) এর অনুরূপ মানের উত্পাদন করে।

সুতরাং, গড় গুণমান ধরে নিই (আসুন ২০ বলে নেওয়া যাক), বিস্তৃত স্ক্রিনের 360p ভিডিও রেকর্ড করার জন্য আমাদের কী ধরণের বিটরেট দরকার? আমি 30 সেকেন্ডের মূল্যমানের ভিডিও রেকর্ড করতে নীচের বর্ণনাকারী কমান্ড লাইনটি দু'বার চালিয়েছি, তারপরে ক্যামেরাটি ঘিরে প্রথম রেকর্ডিং ব্যয় করেছি (এই ধারনাতে যে আরও বেশি গতির অর্থ আরও বেশি ব্যান্ডউইথ প্রয়োজন, এবং আমরা এখানে সীমাটি পরীক্ষা করতে চাই), এবং দ্বিতীয়টি দৃশ্যের সাথে একেবারে স্থির:

raspivid --width 640 --height 360 --framerate 24 --bitrate 17000000 --qp 20 --timeout 30000 --output test.h264

ফলস্বরূপ ফাইলগুলি যথাক্রমে 673675 বাইট (658 কেবি) এবং 2804555 বাইট (2.7Mb) আকারে ছিল, সুতরাং এনকোডার দ্বারা উত্পাদিত বিটরেটগুলি হ'ল:

  673675   bytes
* 8        bits per byte
/ 30       seconds
  --------
  179646.6 bits per second (static scene)

  2804555  bytes
* 8        bits per byte
/ 30       seconds
  --------
  747881.3 bits per second (full motion scene)

সুতরাং, উপরের সমীকরণে এই মানগুলি প্লাগ করে, আমরা বাস্তবতার সাথে অনুরূপ সেটিংস ব্যবহার করে ২৪ ঘন্টা মূল্যমানের ভিডিওটি ১.৮ গিগাবাইট থেকে .5.৫ জিবি আকারের কোথাও আসার আশা করতে পারি। আমরা নিশ্চিত করতে পারি যে এটি 750000 এর মতো কিছুতে বিট্রেট স্থাপন করে অবশ্যই এটির চেয়ে বড় হবে না যা আমরা জানি যে এনকোডারটি আমাদের কাঙ্ক্ষিত মানের (20) এ গতি পুনরুত্পাদন করার জন্য যথেষ্ট ঘর দেবে, বা আপনি নিম্ন গুণাবলী নিয়ে পরীক্ষা করতে পারেন (যেমন 25) ) তারা গ্রহণযোগ্য হবে কিনা তা দেখুন এবং তারপরে বিটরেট সীমাটি কম করুন। এটি বলেছিল, এটি আপনার মনে রাখা উচিত যে আপনি ফাইলটি দিয়ে 2 জিবি ভেঙে ফেলতে পারেন, সুতরাং উপরে উল্লিখিত হিসাবে আপনি পাইথন ব্যবহার না করা বা ব্যবহারকারীভূমি পুনরায় সংকলন না করে আপনি the৪-বিট ফাইল পয়েন্টার ইস্যুতে চালিত হতে পারেন।

রেফারেন্সের জন্য, উপরে আলোচনা করা সীমাটি স্রেফ অন্তর্ভুক্ত করতে উপরের পাইথন স্ক্রিপ্টটি এখানে দেওয়া হয়েছে:

import picamera

with picamera.PiCamera() as camera:
    camera.resolution = (640, 360)
    camera.framerate = 24
    camera.start_recording('one_day.h264', quality=20, bitrate=750000)
    camera.wait_recording(24 * 60 * 60)
    camera.stop_recording()

শেষ অবধি, লিনাসের উত্তর সম্পর্কে সোনারলোকসের মন্তব্যের জবাব দেওয়ার জন্য: ভিডিও ফাইলটিকে একাধিক অংশে বিভক্ত করা সহজ (এবং সহজেই কোনও 64৪-বিট ফাইল পয়েন্টারের উদ্বেগ দূর করতে পারে)। Raspivid সঙ্গে, আপনি ব্যবহার করতে পারেন --segmentনির্দিষ্ট করার যে একটি নতুন ফাইল যে খোলা হবে পরামিতি এন যেমন প্রতি ঘন্টা (জন্য একটি ফাইল রেকর্ড করতে মিলিসেকেন্ড, %02dফাইলের নাম মধ্যে একটি সংখ্যা জন্য প্রতিস্থাপিত হবে, যেমন ২01২, 02, 03, .. ।):

raspivid --width 640 --height 360 --framerate 24 --bitrate 750000 --qp 20 --timeout $((24*60*60*1000)) --segment $((1*60*60*1000)) --output hour%02d.h264

বিকল্পভাবে, পিকামেরার সাহায্যে আপনি সময় ভিত্তিতে বিভক্ত করতে রেকর্ড_সেস্কেন্স পদ্ধতিটি ব্যবহার করতে পারেন :

import picamera

with picamera.PiCamera() as camera:
    camera.resolution = (640, 360)
    camera.framerate = 24
    for filename in camera.record_sequence([
            'hour%02d.h264' % (h + 1)
            for h in range(24)
            ], quality=20, bitrate=750000):
        camera.wait_recording(60 * 60)

অথবা ফাইল-আকারের উপর ভিত্তি করে। নীচের উদাহরণে, আমি এটি প্রতিবারে> 1 এমবিতে একবার রোলিং করে 100 টি ফাইল উত্পন্ন করার জন্য সেট করে রেখেছি এবং আউটপুট পুনরাবৃত্তিকে তার নিজস্ব ফাংশনটিতে রেখেছি কেবল এটির মাধ্যমেও অসীম পুনরাবৃত্তি ব্যবহার সম্ভব record_sequence:

import io
import itertools
import picamera

def outputs():
    for i in itertools.count(1):
        yield io.open('file%02d.h264' % i, 'wb')

with picamera.PiCamera() as camera:
    camera.resolution = (640, 360)
    camera.framerate = 24
    for output in camera.record_sequence(
            outputs(), quality=20, bitrate=750000):
        while output.tell() < 1048576:
            camera.wait_recording(0.1)
        if output.name == 'file99.h264':
            break

বা ... ভাল, কোডের জন্য আপনি যে সীমাটি ভাবতে পারেন!


+1 সিনট্যাক্স হাইলাইটিংয়ের অন্তর্ভুক্ত করার জন্য আমি আপনার অন্যথায় দর্শনীয় উত্তর সম্পাদনা করেছি।
Jacobm001

আহ, ধন্যবাদ - আমার সম্ভবত এসও এর এমডি বৈকল্পিকটি কিছুটা হলেও শিখতে হবে ...
ডেভ জোন্স

3

আপনি যদি এটি "সম্ভাব্য" রেকর্ড করতে রাসিভিড ব্যবহার করেন তবে বড় ফাইলগুলি সমর্থন করার জন্য একটি প্যাচ রয়েছে, যেখানে আকার> 2 গিগাবাইট ( -D_FILE_OFFSET_BITS=64জিসিসি সরবরাহিত পতাকাগুলিতে প্রয়োজনীয়)। তবে আপনাকে নিজের দ্বারা ইউজারল্যান্ড উত্সটি সংকলন করতে হবে ।

তবে এটি অবশ্যই লক্ষ্য করা উচিত, আপনার খুব সতর্কতা অবলম্বন করা উচিত, কারণ আপনি যদি লিনাক্সে সিস্টেম পার্টিশনটি পূরণ করেন তবে খুব খারাপ আচরণ হতে পারে। সুতরাং আপনার দীর্ঘ ভিডিওগুলির জন্য একটি পৃথক পার্টিশন তৈরি করা উচিত।

আপনার যদি ফাইলের আকার নিয়ে সমস্যা হয় তবে বিট-রেট হ্রাস করা ভাল ধারণাও হতে পারে।


4
যদি এটি গ্রহণযোগ্য হয় তবে আপনি cronবর্তমান raspividপ্রক্রিয়া বন্ধ করতে , আউটপুট ফাইলটি রোলওভার করতে এবং এটি আবার শুরু করতে একটি অন্তর্বর্তী স্ক্রিপ্ট (যেমন মাধ্যমে ) চালাতে পারেন , যেমন আপনি নির্দিষ্ট স্লাইসের প্রতিনিধিত্ব করে ছোট ছোট ফাইলগুলির একটি সিরিজ দিয়ে শেষ করতে পারেন।
স্বর্ণিলকস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.