मीडिया ऐप्लिकेशन की बुनियादी बातें

Derek Herman
Derek Herman
Joe Medley
Joe Medley

मीडिया के साथ काम करने के लिए अक्सर मीडिया फ़ाइलों की विशेषताओं, जैसे कि बिटरेट या रिज़ॉल्यूशन में बदलाव करने की ज़रूरत होती है. शुरुआत करने का आसान तरीका ढूंढना बहुत डरावना हो सकता है. इस पेज पर, आपको इस्तेमाल किए जाने वाले टूल और उन्हें तेज़ी से इंस्टॉल करने के तरीके के बारे में बताया जाएगा.

सबसे पहले, हमने कमांड-लाइन मीडिया से जुड़ी इन दो सुविधाओं के बुनियादी इस्तेमाल के बारे में बताया है: Shaka Packager और FFmpeg. इसके बाद, हम टूल को तेज़ी से इंस्टॉल करने में आपकी मदद करेंगे. दो आवेदनों को कवर क्यों करना चाहिए? हालांकि, ये दोनों अपने-आप में असरदार और उपयोगी हैं, लेकिन वेब के लिए मीडिया तैयार करने के लिए हर तरह की ज़रूरत नहीं है. हमने मीडिया कन्वर्ज़न और मीडिया एन्क्रिप्ट (सुरक्षित) करने का तरीका पेज भी बनाए हैं, जिनमें इन दोनों ऐप्लिकेशन पर कई सामान्य कार्रवाइयां दिखाई गई हैं.

फ़ाइल में बदलाव करने के टास्क के लिए, सिर्फ़ ये ऐप्लिकेशन ही विकल्प उपलब्ध नहीं हैं. हालांकि, ये दो सबसे ज़्यादा इस्तेमाल होने वाले और असरदार विकल्प हैं. अन्य विकल्पों में जीयूआई ऐप्लिकेशन मिरो, HandBrake, और वीएलसी शामिल हैं. इसके अलावा, एन्कोडिंग/ट्रांसकोडिंग की सेवाएं भी उपलब्ध हैं. जैसे, Zencoder, Amazon Elastic Encoder, और Google Transcoder API.

शाका पैकेजर

शाका पैकेजर, मीडिया पैकेजिंग के लिए मुफ़्त में इस्तेमाल किया जाने वाला SDK टूल है. अगर आपकी साइट पर मीडिया प्लेयर का इस्तेमाल हो रहा है, तो Shaka पैकेजर को फ़ाइलें तैयार करने के लिए इस्तेमाल किया जा सकता है. इसमें दो सबसे आम वीडियो स्ट्रीमिंग प्रोटोकॉल में बदलाव किया जा सकता है: डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी (DASH) या एचटीटीपी लाइव स्ट्रीमिंग (HLS). Shaka पैकेजर, सुरक्षा की मुख्य सुविधाओं के साथ काम करता है, जैसे कि एन्क्रिप्ट (सुरक्षित) करने का सामान्य तरीका और Widevine डिजिटल राइट मैनेजमेंट (डीआरएम). यह लाइव-स्ट्रीमिंग और मांग पर वीडियो (वीडियो-ऑन-डिमांड) भी हैंडल कर सकता है.

पैकेज पर दी गई जानकारी के बावजूद, यह सुविधा C++ डेवलपर से ज़्यादा के लिए है. आप इसका उपयोग मीडिया सॉफ़्टवेयर बनाने की लाइब्रेरी के रूप में और वेब प्लेबैक के लिए मीडिया फ़ाइलें तैयार करने के लिए कमांड-लाइन उपयोगिता के रूप में कर सकते हैं. यह बाद की क्षमता है जो हमारे लिए उपयोगी है. इतना ही नहीं, वेब मीडिया क्रिएटर्स के लिए Shaka Packager ही एक ऐसा तरीका है जिससे महंगे कमर्शियल ऐप्लिकेशन पर पैसे खर्च किए बिना, कुछ काम किए जा सकते हैं.

शाका पैकेजर कमांड का बुनियादी पैटर्न यहां दिया गया है:

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

packager -help टाइप करने पर, आपको यह सुविधा नहीं मिलेगी. यह उदाहरण समझने में आसान है. इसके उदाहरण शाका पैकेजर के दस्तावेज़ में दिए गए हैं. ध्यान दें कि पैटर्न में कई stream_descriptor आइटम हैं. हालांकि हम यह विज्ञापन नहीं दिखाते हैं, लेकिन एक ही निर्देश से किसी फ़ाइल के वीडियो और ऑडियो स्ट्रीम में अलग-अलग बदलाव किया जा सकता है.

इस बेसिक पैटर्न की तुलना, फ़ाइल की विशेषताएं दिखाने वाले आसान तरीके से करें. इस उदाहरण में, हमने मिलते-जुलते हिस्से दिए हैं.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

कमांड से यह जानकारी मिलती है:

File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
 codec_string: avc1.640028
 time_scale: 30000
 duration: 300300 (10.0 seconds)
 is_encrypted: false
 codec: H264
 width: 1920
 height: 1080
 pixel_aspect_ratio: 1:1
 trick_play_factor: 0
 nalu_length_size: 4

Stream [1] type: Audio
 codec_string: mp4a.40.2
 time_scale: 48000
 duration: 481280 (10.0 seconds)
 is_encrypted: false
 codec: AAC
 sample_bits: 16
 num_channels: 2
 sampling_frequency: 48000
 language: eng
 seek_preroll_ns: 20833

मीडिया फ़ाइल की बुनियादी बातों में बताई गई विशेषताओं को देखें और कुछ चीज़ों पर ध्यान दें. फ़ुल एचडी के लिए ऊंचाई और चौड़ाई सही है. साथ ही, कंटेनर टाइप के लिए, ऑडियो और वीडियो कोडेक पसंदीदा कोडेक हैं. जैसे, ऑडियो के लिए AAC और वीडियो के लिए H264. यह भी ध्यान दें कि स्ट्रीम की पहचान नंबर से भी की जाती है. ये उन कार्रवाइयों में मददगार होते हैं जो ऑडियो और वीडियो में अलग-अलग बदलाव करते हैं.

ध्यान दें कि ऊपर दिए गए आउटपुट में बिटरेट नहीं दिखता. चाहे कुछ भी न हो, इस आउटपुट को पढ़ना आसान होता है, इसलिए हम जब भी हो सके इसका इस्तेमाल करते हैं. जब हमें शाका पैकेजर के पास कोई ऐसी जानकारी नहीं मिलती जो उसे नहीं मिल सकती, जैसे कि बिटरेट, तो हम FFmpeg का इस्तेमाल करते हैं.

FFmpeg

FFmpeg मीडिया फ़ाइलों को रिकॉर्ड करने, उनका फ़ॉर्मैट बदलने, और स्ट्रीम करने के लिए मुफ़्त ऐप्लिकेशन है. इसकी क्षमताएं शाका पैकेजर से बेहतर या खराब नहीं हैं. वे बस अलग हैं.

FFmpeg कमांड का बेसिक पैटर्न इस तरह दिखता है:

ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output

शाका पैकेजर की तरह यह ऐप्लिकेशन एक से ज़्यादा स्ट्रीम को हैंडल कर सकता है. इसके कुछ विकल्प एक से ज़्यादा जगहों पर इस्तेमाल किए जाते हैं और कमांड में उनकी जगह के आधार पर, फ़ाइल आउटपुट में अलग-अलग बदलाव करते हैं. Stack Overflow पर FFmpeg सवालों और इससे मिलती-जुलती साइटों को देखते समय इसका ध्यान रखें.

हम फिर से बुनियादी पैटर्न की तुलना, फ़ाइल की विशेषताएं दिखाने वाले उदाहरण से करेंगे.

    ffmpeg [GeneralOptions] [InputFileOptions] -i input        [OutputFileOptions] output

    ffmpeg                                     -i glocken.mp4

हमने मांगी गई जानकारी के अलावा, गड़बड़ी का मैसेज भी प्रिंट किया है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है. ऐसा इसलिए, क्योंकि यह तकनीकी रूप से FFmpeg का गलत इस्तेमाल है. हम इसका इस्तेमाल इसलिए करते हैं, क्योंकि इसमें वह जानकारी दिखती है जो हमारे लिए अहम है.

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.17.100
  Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Docker के साथ ऐप्लिकेशन इंस्टॉल करना

अगर आपको हमारे निर्देशों का पालन करना है और उन्हें आज़माना है, तो ज़रूरी टूल मैन्युअल तरीके से इंस्टॉल करें या आसान तरीके से डॉकर का इस्तेमाल करें. हम आपको डॉकर का इस्तेमाल करने की सलाह देते हैं, क्योंकि इससे आपका काफ़ी समय बचेगा. इसके अलावा, हमने आपको तुरंत सेट अप करने के लिए निर्देश दिए हैं.

  1. अपने कंप्यूटर पर कहीं भी media-tools नाम की एक नई डायरेक्ट्री बनाकर शुरू करें. आपके पास अपनी पसंद के किसी भी नाम का इस्तेमाल करने का विकल्प है. बस, ध्यान रखें कि इन निर्देशों में यह मान लिया गया है कि media-tools को डायरेक्ट्री के नाम के तौर पर इस्तेमाल किया जा रहा है.

  2. media-tools में docker और media डायरेक्ट्री बनाएं. ऐसा करने पर, आपकी media डायरेक्ट्री को बिल्ड कॉन्टेक्स्ट से बाहर रखा जाएगा. यह ज़रूरी है, क्योंकि media में फ़ाइलें सेव होती हैं, जिन पर हम कार्रवाइयां करने की योजना बना रहे हैं. इनमें से कुछ फ़ाइलें काफ़ी बड़ी हो सकती हैं. Dockerfile को सीधे media-tools में रखने से, इमेज धीरे-धीरे बन सकती है. ऐसा तब होता है, जब कभी सड़क पर इसे फिर से बनाया जाए. ऐसा हो सकता है कि इंस्टॉल किए गए वर्शन को बदलने के लिए, इमेज का इस्तेमाल किया जाए.

  3. /media-tools/docker/Dockerfile बनाएं और इन बिल्ड निर्देशों को जोड़ें:

    FROM google/shaka-packager:release-v2.4.3 as packager
    FROM jrottenberg/ffmpeg:4.3.2-alpine38
    COPY --from=packager /usr/bin /usr/bin
    ENTRYPOINT  ["sh"]
    
  4. इमेज बनाएं:

    docker build -t media-tools ./docker
    
  5. इमेज को इंटरैक्टिव शेल की तरह चलाएं. Linux पर:

    docker run -w /media -v ${PWD}/media:/media -it --rm media-tools
    /media #
    

    Windows पर:

    docker run -w /media -v %cd%/media:/media -it --rm media-tools
    /media #
    

इमेज चलाते समय FFmpeg और Shaka पैकेजर दोनों के वर्शन देखे जा सकते हैं. इससे यह पुष्टि की जा सकती है कि ffmpeg -version और packager --version चलाकर सभी चीज़ें पूरी हो गई हैं या नहीं. आउटपुट कुछ ऐसा दिखना चाहिए:

/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  7.100 /  5.  7.100
libswresample   3.  7.100 /  3.  7.100
libpostproc    55.  7.100 / 55.  7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release

आपने Shaka पैकेजr और FFmpeg टेक्नोलॉजी को आज़माकर देख लिया है. अब आप मीडिया स्ट्रीमिंग की बुनियादी बातें जानने के बाद, बुनियादी कॉन्सेप्ट सीख सकते हैं.