সিএমটাইম এবং সিএমটাইমমেক বোঝার চেষ্টা করছেন


145

1) CMTimeMake(1,10)মানে 1 সেকেন্ড এবং 10, বা প্রতি সেকেন্ডে 10 ফ্রেমের টাইমস্কেল duration এর অর্থ 10 ফ্রেম সহ ভিডিওর 1s সময়কাল?

2)

CMTime lastTime=CMTimeMake(1,10);
CMTime frameTime=CMTimeMake(1, 10);
CMTime currentTime=CMTimeAdd(lastTime, frameTime)

= (2, 10)?

2 সেকেন্ডের ভিডিও এবং 10 টি ফ্রেমের সাথে বর্তমান সময়ের প্রতি সেকেন্ড?


1
যদি আপনার ভিডিওটি 48 এফপিএস (প্রতি সেকেন্ডের ফ্রেম) হয় তবে আপনি সহজেই প্রতি সেকেন্ডের CMTimeMake(1, 48)1/48 টির মধ্যে কোডের একটি ব্লক চালাতে পারবেন অর্থাৎ ফ্রেম প্রতি 1 ব্লক
হানি 14

উত্তর:


163

1) CMTimeMake(1,10)আসলে 1 এর মান এবং 10 এর টাইমস্কেল অর্থ তারা একটি সংখ্যক এবং ডিনোমিনেটর, সুতরাং এটি 1 সেকেন্ডের নয়, একটি সেকেন্ডের 1/10 হয়।

2) ফলাফলটি এর মতো হবে CMTimeMake(2, 10), যা এক সেকেন্ডের 2/10 তম হয়।


11
আপেলের রেফারেন্স কেন এটি বলে না?
ভিগনিসানজ

4
এখন এটি বলে: value/timescale = secondsস্পষ্টতই।
জেপি ইলানেস

137

পিটার ঠিক বলেছেন। নিম্নলিখিত কোডটি ধারণাটি আরও স্পষ্ট করে তুলেছে:

1)

Float64 seconds = 5; 
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);
CMTimeShow(inTime);

উপরের কোডটি দেয়: {3000/600 = 5.000}

যার অর্থ প্রতি সেকেন্ডে 600 ফ্রেমের টাইমস্কেল সহ 3000 ফ্রেম সহ মোট 5 সেকেন্ড সময়কাল

2)

int64_t value = 10000;
int32_t preferredTimeScale = 600;
CMTime inTime = CMTimeMake(value, preferredTimeScale);
CMTimeShow(inTime);

এই এক দেয় / 10000/600 = 16.667}

যার অর্থ প্রতি সেকেন্ডে 600 ফ্রেমের টাইমস্কেল সহ 10000 ফ্রেম সহ মোট 16.667 সেকেন্ড সময়কাল।

সিএমটাইমমেক (int64_t মান, int32_t টাইমস্কেল) এবং সিএমটাইমমেকউইথসেকেন্ডস (ফ্লোট 64 সেকেন্ড, ইন্ট 32_t পছন্দসই টাইমস্কেল) এর মধ্যে পার্থক্যটি লক্ষ্য করুন

আশা করি এই ব্যাখ্যা সাহায্য করবে। আরও স্পষ্টতার জন্য, দয়া করে এই পোস্টে আরও প্রশ্ন পোস্ট করতে দ্বিধা করবেন না।


খুব সুন্দর ব্যাখ্যা
কোরি ফ্লয়েড

আমি ভাবছি কেন setMaxRecordedDurationপ্রয়োজন preferredTimeScaleযখন frame_rateআলাদাভাবে সেট করা হয়। প্রত্যেকে অন্ধভাবে 600 ব্যবহার করছে এবং এটি ঠিক কী করছে সে সম্পর্কে কোনও ভাল ব্যাখ্যা নেই।
ছদ্মবেশী

2
@ ড্যাশসি 600 সাধারণ ভিডিও ফ্রেমের হারের একাধিক। ওয়ারেন মুর warrenmoore.net / বোঝাপড়া- সময়কালীন সময়ে এটিকে ব্যাখ্যা করে ।
ড্যানিমাল

38

আপনার সাথে CMTimeMake(A, B)যুক্তিযুক্ত সংখ্যা, সঠিক ভগ্নাংশের A / Bসেকেন্ড সংরক্ষণ করুন

  • CMTimeMake(1, 4) -> সময় বিরতি 0.25 সেকেন্ড

পদক্ষেপগুলির রেজোলিউশনে CMTimeMakeWithSeconds(A, B)আপনার সাথে A কয়েক সেকেন্ড সঞ্চয়B

  • CMTimeMakeWithSeconds(0.25, ...) -> সময় বিরতি 0.25 সেকেন্ড

আপনি সাধারণত দেখতে CMTimeMakeWithSeconds(time, NSEC_PER_SEC)NSEC_PER_SECকার্যকরভাবে "অর্থ সর্বোচ্চ রেজল্যুশন "।


8

আপনি যদি কেবলমাত্র 1 সেকেন্ডের জন্য (আমার মতো) ব্যবধান তৈরি করতে চান তবে এটি আপনার উত্তর:

int seconds = 1;

CMTime interval = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC);

2

একটি সিএমটাইম কাঠামো একটি প্রতিনিধিত্ব করে length of time that is stored as rational number. সিএমটাইমের একটি মান এবং টাইমস্কেল ক্ষেত্র উপস্থাপন করে এবং সময় মান / টাইমস্কেল সেকেন্ডকে উপস্থাপন করে।

দেখুন এই এসও উত্তরটি দেখুন যা পরিষ্কার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.