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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

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

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

शाका पैकेजर

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

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

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

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

packager -help टाइप करने पर, आपको यह सुविधा नहीं मिलेगी. इस उदाहरण को समझना आसान है. इसमें, Shaka Packager के दस्तावेज़ में दिए गए उदाहरणों की जानकारी दी गई है. ध्यान दें कि पैटर्न में कई 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. यह भी ध्यान दें कि स्ट्रीम की पहचान संख्याओं से की जाती है. ये उन ऑपरेशन के लिए काम के होते हैं जिनमें ऑडियो और वीडियो को अलग-अलग मैनिप्युलेट किया जाता है.

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

FFmpeg

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

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 की मदद से ऐप्लिकेशन इंस्टॉल करना

अगर आपको हमारे निर्देशों का पालन करना है और उन्हें आज़माना है, तो ज़रूरी टूल मैन्युअल तरीके से इंस्टॉल करें या आसान तरीका अपनाकर 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 Packager, दोनों के वर्शन देखे जा सकते हैं. इससे यह पुष्टि की जा सकती है कि 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 Packager और FFmpeg का इस्तेमाल करने की कोशिश कर ली है. अब आपके पास बुनियादी कॉन्सेप्ट सीखने का विकल्प है. इसके बाद, मीडिया स्ट्रीमिंग के बुनियादी कॉन्सेप्ट सीखें.