CameraX 1.5 की मदद से, हाई-स्पीड कैप्चर और स्लो-मोशन वीडियो रिकॉर्डिंग की सुविधा
पढ़ने में 6 मिनट लगेंगे
तेज़ी से हो रही गतिविधि को साफ़ तौर पर कैप्चर करना, आधुनिक कैमरा ऐप्लिकेशन की एक अहम सुविधा है. ऐसा हाई-स्पीड कैप्चर की मदद से किया जाता है. यह 120 या 240 एफ़पीएस जैसे रेट पर फ़्रेम पाने की प्रोसेस है. हाई फ़िडेलिटी कैप्चर का इस्तेमाल दो अलग-अलग कामों के लिए किया जा सकता है: हाई-फ़्रेम-रेट वाला वीडियो बनाना, ताकि फ़्रेम-बाय-फ़्रेम विश्लेषण किया जा सके या स्लो-मोशन वीडियो जनरेट करना, ताकि स्क्रीन पर ऐक्शन को शानदार तरीके से दिखाया जा सके.
पहले, Camera2 API के साथ इन सुविधाओं को लागू करने के लिए, ज़्यादा मेहनत करनी पड़ती थी. अब CameraX 1.5 में मौजूद नए हाई-स्पीड एपीआई की मदद से, पूरी प्रोसेस को आसान बना दिया गया है. इससे आपको हाई फ़्रेम रेट वाले वीडियो या तुरंत चलने वाली स्लो-मोशन क्लिप बनाने की सुविधा मिलती है. इस पोस्ट में, इन दोनों को बेहतर तरीके से इस्तेमाल करने का तरीका बताया गया है. अगर आपने CameraX का इस्तेमाल पहले कभी नहीं किया है, तो CameraX की खास जानकारी लेख पढ़ें.
स्लो-मोशन के पीछे का सिद्धांत
स्लो-मोशन का मुख्य सिद्धांत यह है कि वीडियो को प्लेबैक करने के मुकाबले, ज़्यादा फ़्रेम रेट पर कैप्चर किया जाए. उदाहरण के लिए, अगर आपने किसी एक सेकंड के इवेंट को 120 फ़्रेम प्रति सेकंड (एफ़पीएस) पर रिकॉर्ड किया है और फिर उसे स्टैंडर्ड 30 एफ़पीएस पर चलाया है, तो वीडियो को चलने में चार सेकंड लगेंगे. समय को "खींचने" से ही स्लो-मोशन का नाटकीय इफ़ेक्ट मिलता है. इससे आपको ऐसी जानकारी देखने में मदद मिलती है जो सामान्य तौर पर बहुत तेज़ी से दिखती है.
यह पक्का करने के लिए कि फ़ाइनल आउटपुट वीडियो बिना किसी रुकावट के चले, इसे आम तौर पर कम से कम 30 फ़्रेम प्रति सेकंड (एफ़पीएस) पर रेंडर किया जाना चाहिए. इसका मतलब है कि 4x स्लो-मोशन वीडियो बनाने के लिए, ओरिजनल कैप्चर फ़्रेम रेट कम से कम 120 फ़्रेम प्रति सेकंड (120 कैप्चर फ़्रेम प्रति सेकंड ÷ 4 = 30 फ़्रेम प्रति सेकंड) होना चाहिए.
ज़्यादा फ़्रेम रेट वाला फ़ुटेज कैप्चर करने के बाद, मनमुताबिक नतीजे पाने के दो मुख्य तरीके हैं:
- प्लेयर के कंट्रोल में स्लो-मोशन (ज़्यादा फ़्रेम रेट वाला वीडियो): ज़्यादा फ़्रेम रेट (जैसे, 120 एफ़पीएस) पर रिकॉर्ड किया गया वीडियो, सीधे तौर पर ज़्यादा फ़्रेम रेट वाले वीडियो फ़ाइल के तौर पर सेव होता है. इसके बाद, वीडियो प्लेयर की यह ज़िम्मेदारी होती है कि वह वीडियो चलाने की स्पीड को कम करे. इससे उपयोगकर्ता को सामान्य और धीमी गति से वीडियो चलाने के बीच टॉगल करने की सुविधा मिलती है.
- स्लो-मोशन में चलाने के लिए तैयार वीडियो (फिर से एन्कोड किया गया वीडियो): हाई-स्पीड वीडियो स्ट्रीम को प्रोसेस किया जाता है. इसके बाद, इसे स्टैंडर्ड फ़्रेम रेट (जैसे, 30 एफ़पीएस) वाली फ़ाइल में फिर से एन्कोड किया जाता है. फ़्रेम के टाइमस्टैंप में बदलाव करके, स्लो मोशन इफ़ेक्ट "बेक इन" किया जाता है. इस तरह से बनाए गए वीडियो को किसी भी स्टैंडर्ड वीडियो प्लेयर में स्लो मोशन में चलाया जा सकता है. इसके लिए, किसी खास सेटिंग की ज़रूरत नहीं होती. वीडियो डिफ़ॉल्ट रूप से स्लो मोशन में चलता है. हालांकि, वीडियो प्लेयर अब भी वीडियो चलाने की स्पीड कंट्रोल करने की सुविधा दे सकते हैं. इससे उपयोगकर्ता, वीडियो की स्पीड बढ़ा सकते हैं और उसे ओरिजनल स्पीड में देख सकते हैं.
CameraX API, इस प्रोसेस को आसान बनाता है. यह आपको एक ही तरीके से यह चुनने का विकल्प देता है कि आपको कौनसी प्रोसेस इस्तेमाल करनी है. इसके बारे में यहां बताया गया है.
ज़्यादा स्पीड वाला नया Video API
CameraX का नया समाधान, दो मुख्य कॉम्पोनेंट पर आधारित है:
Recorder#getHighSpeedVideoCapabilities(CameraInfo): इस तरीके से, यह पता लगाया जा सकता है कि कैमरा हाई-स्पीड में रिकॉर्ड कर सकता है या नहीं. अगर हां, तो कौनसे रिज़ॉल्यूशन (Qualityऑब्जेक्ट) काम करते हैं.HighSpeedVideoSessionConfig: यह एक खास कॉन्फ़िगरेशन ऑब्जेक्ट है. यहVideoCaptureऔरPreviewके इस्तेमाल के उदाहरणों को ग्रुप करता है. इससे CameraX को एक यूनिफ़ाइड हाई-स्पीड कैमरा सेशन बनाने के बारे में पता चलता है. ध्यान दें कि VideoCapture स्ट्रीम, कॉन्फ़िगर किए गए ज़्यादा फ़्रेम रेट पर काम करेगी. हालांकि, Preview स्ट्रीम आम तौर पर कैमरा सिस्टम के हिसाब से, कम से कम 30 एफ़पीएस के स्टैंडर्ड रेट तक सीमित रहेगी. इससे स्क्रीन पर वीडियो आसानी से दिखेगा.
शुरू करें
शुरू करने से पहले, पक्का करें कि आपने अपने ऐप्लिकेशन की build.gradle.kts फ़ाइल में, CameraX की ज़रूरी डिपेंडेंसी जोड़ी हों. आपको CameraX की मुख्य लाइब्रेरी के साथ-साथ camera-video आर्टफ़ैक्ट की भी ज़रूरत होगी.
// build.gradle.kts (Module: app)
dependencies {
val camerax_version = "1.5.1"
implementation("androidx.camera:camera-core:$camerax_version")
implementation("androidx.camera:camera-camera2:$camerax_version")
implementation("androidx.camera:camera-lifecycle:$camerax_version")
implementation("androidx.camera:camera-video:$camerax_version")
implementation("androidx.camera:camera-view:$camerax_version")
}एक्सपेरिमेंट के लिए उपलब्ध एपीआई के बारे में जानकारी
ध्यान दें कि फ़िलहाल, हाई-स्पीड रिकॉर्डिंग वाले एपीआई एक्सपेरिमेंट के तौर पर उपलब्ध हैं. इसका मतलब है कि आने वाली रिलीज़ में इनमें बदलाव हो सकता है. इनका इस्तेमाल करने के लिए, आपको ऑप्ट-इन करना होगा. इसके लिए, अपने कोड में यह एनोटेशन जोड़ें:
@kotlin.OptIn(ExperimentalSessionConfig::class, ExperimentalHighSpeedVideo::class)
लागू करना
दोनों नतीजों को लागू करने के लिए, सेटअप के एक जैसे चरणों का इस्तेमाल किया जाता है. ज़्यादा फ़्रेम रेट वाला वीडियो या स्लो-मोशन वीडियो बनाने का विकल्प, एक ही सेटिंग पर निर्भर करता है.
1. हाई-स्पीड कैप्चर की सुविधा सेट अप करना
सबसे पहले, आपको ProcessCameraProvider को डाउनलोड करना होगा. इसके बाद, डिवाइस की क्षमताओं की जांच करनी होगी और इस्तेमाल के उदाहरण बनाने होंगे.
नीचे दिए गए कोड ब्लॉक में, निलंबन फ़ंक्शन के अंदर सेटअप करने का पूरा फ़्लो दिखाया गया है. इस फ़ंक्शन को कोरूटीन स्कोप से कॉल किया जा सकता है. जैसे, lifecycleScope.launch.
// Add the OptIn annotation at the top of your function or class
@kotlin.OptIn(ExperimentalSessionConfig::class, ExperimentalHighSpeedVideo::class)
private suspend fun setupCamera() {
// Asynchronously get the CameraProvider
val cameraProvider = ProcessCameraProvider.awaitInstance(this)
// -- CHECK CAPABILITIES --
val cameraInfo = cameraProvider.getCameraInfo(CameraSelector.DEFAULT_BACK_CAMERA)
val videoCapabilities = Recorder.getHighSpeedVideoCapabilities(cameraInfo)
if (videoCapabilities == null) {
// This camera device does not support high-speed video.
return
}
// -- CREATE USE CASES --
val preview = Preview.Builder().build()
// You can create a Recorder with default settings.
// CameraX will automatically select a suitable quality.
val recorder = Recorder.Builder().build()
// Alternatively, to use a specific resolution, you can configure the
// Recorder with a QualitySelector. This is useful if your app has
// specific resolution requirements or you want to offer user
// preferences.
// To use a specific quality, you can uncomment the following lines.
// Get the list of qualities supported for high-speed video.
// val supportedQualities = videoCapabilities.getSupportedQualities(DynamicRange.SDR)
// Build the Recorder using the quality from the supported list.
// val recorderWithQuality = Recorder.Builder()
// .setQualitySelector(QualitySelector.from(supportedQualities.first()))
// .build()
// Create the VideoCapture use case, using either recorder or recorderWithQuality
val videoCapture = VideoCapture.withOutput(recorder)
// Now you are ready to configure the session for your desired output...
}2. आउटपुट चुनना
अब आपको तय करना है कि आपको किस तरह का वीडियो बनाना है. यह कोड, ऊपर दिखाए गए setupCamera() suspend फ़ंक्शन के अंदर चलेगा.
विकल्प A: ज़्यादा फ़्रेम रेट वाला वीडियो बनाना
अगर आपको फ़ाइनल फ़ाइल में ज़्यादा फ़्रेम रेट चाहिए (जैसे, 120 फ़्रेम प्रति सेकंड वाला वीडियो), तो यह विकल्प चुनें.
// Create a builder for the high-speed session val sessionConfigBuilder = HighSpeedVideoSessionConfig.Builder(videoCapture) .setPreview(preview) // Query and apply a supported frame rate. Common supported frame rates include 120 and 240 fps. val supportedFrameRateRanges = cameraInfo.getSupportedFrameRateRanges(sessionConfigBuilder.build()) sessionConfigBuilder.setFrameRateRange(supportedFrameRateRanges.first())
दूसरा विकल्प: स्लो-मोशन में चलने वाला वीडियो बनाना
अगर आपको ऐसा वीडियो चाहिए जो किसी भी स्टैंडर्ड वीडियो प्लेयर में अपने-आप स्लो मोशन में चले, तो यह विकल्प चुनें.
// Create a builder for the high-speed session val sessionConfigBuilder = HighSpeedVideoSessionConfig.Builder(videoCapture) .setPreview(preview) // This is the key: enable automatic slow-motion! sessionConfigBuilder.setSlowMotionEnabled(true) // Query and apply a supported frame rate. Common supported frame rates include 120, 240, and 480 fps. val supportedFrameRateRanges = cameraInfo.getSupportedFrameRateRanges(sessionConfigBuilder.build()) sessionConfigBuilder.setFrameRateRange(supportedFrameRateRanges.first())
इस एक फ़्लैग की मदद से, स्लो-मोशन में वीडियो बनाया जा सकता है. setSlowMotionEnabled की वैल्यू सही होने पर, CameraX हाई-स्पीड स्ट्रीम को प्रोसेस करता है और उसे स्टैंडर्ड 30 फ़्रेम प्रति सेकंड वाली वीडियो फ़ाइल के तौर पर सेव करता है. स्लो-मोशन की स्पीड, कैप्चर फ़्रेम रेट और इस स्टैंडर्ड वीडियो चलाने की स्पीड के अनुपात से तय होती है.
उदाहरण के लिए:
- 120 फ़्रेम प्रति सेकंड पर रिकॉर्ड किए गए वीडियो को 1/4x स्पीड पर चलाया जाएगा (120 ÷ 30 = 4).
- 240 एफ़पीएस पर रिकॉर्ड करने से, वीडियो 1/8x स्पीड पर चलेगा (240 ÷ 30 = 8).
पूरी जानकारी: वीडियो रिकॉर्ड करना
HighSpeedVideoSessionConfig को कॉन्फ़िगर करने और इसे लाइफ़साइकल से बाइंड करने के बाद, रिकॉर्डिंग शुरू करना आखिरी चरण होता है. आउटपुट के विकल्प तैयार करने, रिकॉर्डिंग शुरू करने, और वीडियो इवेंट मैनेज करने की प्रोसेस, स्टैंडर्ड वीडियो कैप्चर की तरह ही होती है.
इस पोस्ट में, हाई-स्पीड कॉन्फ़िगरेशन पर फ़ोकस किया गया है. इसलिए, हम रिकॉर्डिंग की प्रोसेस के बारे में ज़्यादा जानकारी नहीं देंगे. FileOutputOptions या MediaStoreOutputOptions ऑब्जेक्ट तैयार करने से लेकर VideoRecordEvent कॉलबैक मैनेज करने तक की पूरी जानकारी के लिए, कृपया VideoCapture के दस्तावेज़ देखें.
// Bind the session config to the lifecycle
cameraProvider.bindToLifecycle(
this as LifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
sessionConfigBuilder.build() // Bind the config object from Option A or B
)
// Start the recording using the VideoCapture use case
val recording = videoCapture.output
.prepareRecording(context, outputOptions) // See docs for creating outputOptions
.start(ContextCompat.getMainExecutor(context)) { recordEvent ->
// Handle recording events (e.g., Start, Pause, Finalize)
}Google Photos में स्लो-मोशन वीडियो के लिए सहायता
CameraX में setSlowMotionEnabled(true) चालू करने पर, वीडियो फ़ाइल इस तरह से डिज़ाइन की जाती है कि उसे तुरंत पहचाना जा सके. साथ ही, स्टैंडर्ड वीडियो प्लेयर और गैलरी ऐप्लिकेशन में उसे स्लो-मोशन में चलाया जा सके. खास तौर पर, Google Photos में स्लो-मोशन वीडियो के लिए बेहतर सुविधाएं मिलती हैं. ऐसा तब होता है, जब कैप्चर फ़्रेम रेट 120, 240, 360, 480 या 960fps हो:
- थंबनेल में यूज़र इंटरफ़ेस (यूआई) की पहचान: Google Photos की लाइब्रेरी में, स्लो-मोशन वीडियो की पहचान यूज़र इंटरफ़ेस (यूआई) के खास एलिमेंट से की जा सकती है. इससे उन्हें सामान्य वीडियो से अलग किया जा सकता है.
|
|
| सामान्य वीडियो थंबनेल | स्लो मोशन वीडियो का थंबनेल |
- वीडियो चलाने के दौरान स्पीड को अडजस्ट करने की सुविधा: Google Photos में, स्लो-मोशन वीडियो चलाने के दौरान स्पीड को अडजस्ट करने की सुविधा मिलती है. इसकी मदद से, उपयोगकर्ता यह तय कर सकते हैं कि वीडियो का कौनसा हिस्सा धीमी स्पीड पर और कौनसा हिस्सा सामान्य स्पीड पर चलेगा. इससे उन्हें क्रिएटिव कंट्रोल मिलता है. इसके बाद, शेयर करें बटन का इस्तेमाल करके, बदले गए वीडियो को नई वीडियो फ़ाइल के तौर पर एक्सपोर्ट किया जा सकता है. इससे, स्लो-मोशन वाले आपके चुने गए सेगमेंट सुरक्षित रहेंगे.
|
|
| वीडियो को सामान्य तरीके से चलाना | स्लो-मोशन वीडियो को एडिट करने के कंट्रोल के साथ प्लेबैक करने की सुविधा |
डिवाइस से जुड़ी सहायता के बारे में जानकारी
CameraX का हाई-स्पीड एपीआई, Android के CamcorderProfile सिस्टम पर निर्भर करता है. इससे यह तय किया जाता है कि कोई डिवाइस, हाई-स्पीड वाले किन रिज़ॉल्यूशन और फ़्रेम रेट के साथ काम करता है. CamcorderProfiles की पुष्टि Android Compatibility Test Suite (CTS) करता है. इसका मतलब है कि आपको डिवाइस की रिपोर्ट की गई वीडियो रिकॉर्डिंग की सुविधाओं पर भरोसा हो सकता है.
इसका मतलब है कि अगर किसी डिवाइस में पहले से मौजूद कैमरा ऐप्लिकेशन से स्लो-मोशन वीडियो रिकॉर्ड किया जा सकता है, तो इसका यह मतलब नहीं है कि CameraX हाई-स्पीड एपीआई काम करेगा. यह अंतर इसलिए दिखता है, क्योंकि डिवाइस बनाने वाली कंपनियां अपने डिवाइस के फ़र्मवेयर में CamcorderProfile एंट्री भरती हैं. कभी-कभी, ज़रूरी हाई-स्पीड प्रोफ़ाइलें, जैसे कि CamcorderProfile.QUALITY_HIGH_SPEED_1080P और CamcorderProfile.QUALITY_HIGH_SPEED_720P शामिल नहीं की जाती हैं. इन प्रोफ़ाइलों के मौजूद न होने पर, Recorder.getHighSpeedVideoCapabilities(), null दिखाएगा.
इसलिए, प्रोग्राम के हिसाब से काम करने वाली सुविधाओं की जांच करने के लिए, हमेशा Recorder.getHighSpeedVideoCapabilities() का इस्तेमाल करना ज़रूरी है. ऐसा इसलिए, क्योंकि अलग-अलग डिवाइसों पर एक जैसा अनुभव देने के लिए, यह सबसे भरोसेमंद तरीका है. अगर आपने किसी ऐसे डिवाइस पर HighSpeedVideoSessionConfig को बाइंड करने की कोशिश की है जहां Recorder.getHighSpeedVideoCapabilities() शून्य दिखाता है, तो यह कार्रवाई IllegalArgumentException के साथ पूरी नहीं होगी. Google Pixel डिवाइसों पर, इस सुविधा के काम करने की पुष्टि की जा सकती है. ऐसा इसलिए, क्योंकि इनमें हमेशा हाई-स्पीड प्रोफ़ाइलें शामिल होती हैं. इसके अलावा, Motorola Edge 30, OPPO Find N2 Flip, और Sony Xperia 1 V जैसे अन्य डिवाइसों में भी हाई-स्पीड वीडियो की सुविधा काम करती है.
नतीजा
CameraX हाई-स्पीड वीडियो एपीआई, बेहतरीन और आसानी से इस्तेमाल किया जा सकने वाला एपीआई है. चाहे आपको तकनीकी विश्लेषण के लिए ज़्यादा फ़्रेम रेट वाला फ़ुटेज चाहिए हो या अपने ऐप्लिकेशन में सिनेमैटिक स्लो-मोशन इफ़ेक्ट जोड़ने हों, HighSpeedVideoSessionConfig एक आसान और एक जैसा समाधान उपलब्ध कराता है. setSlowMotionEnabled फ़्लैग की भूमिका को समझकर, इन दोनों इस्तेमाल के उदाहरणों को आसानी से लागू किया जा सकता है. साथ ही, उपयोगकर्ताओं को क्रिएटिव पर ज़्यादा कंट्रोल दिया जा सकता है.
-
कैसे करेंऐप्लिकेशन की परफ़ॉर्मेंस को अक्सर बेहतर यूज़र इंटरफ़ेस (यूआई) और ऐप्लिकेशन के तेज़ी से शुरू होने से जोड़कर देखा जाता है. हालांकि, मेमोरी एक ऐसा आधार है जिस पर ये मेट्रिक तैयार की जाती हैं. यह कोई छिपी हुई बात नहीं है कि अब डिवाइस की मेमोरी पहले से ज़्यादा ज़रूरी हो गई है.
Alice Yuan, Ajesh Pai, Fung Lam • पढ़ने में 10 मिनट लगेंगे -
कैसे करेंआज हमें यह बताते हुए खुशी हो रही है कि Google ने पुष्टि किया गया नया ईमेल क्रेडेंशियल जारी किया है. डेवलपर अब इसे सीधे तौर पर, Android के Credential Manager Digital Credential API से पा सकते हैं.
Niharika Arora, Jean-Pierre Pralle • तीन मिनट में पढ़ा जा सकता है -
कैसे करेंचाहे Android Studio में Gemini का इस्तेमाल किया जा रहा हो, Gemini CLI का, Antigravity का या Claude Code या Codex जैसे तीसरे पक्ष के एजेंट का, हमारा मकसद यह पक्का करना है कि हर जगह बेहतरीन क्वालिटी के Android ऐप्लिकेशन बनाए जा सकें.
Adarsh Fernando, Esteban de la Canal • पढ़ने में 4 मिनट लगेंगे
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.