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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

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

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

Shaka Packager

Shaka Packager, मीडिया पैकेजिंग के लिए उपलब्ध एक मुफ़्त SDK टूल है. अगर आपकी साइट पर मीडिया प्लेयर का इस्तेमाल किया जा रहा था, तो फ़ाइलों को तैयार करने के लिए Shaka Packager का इस्तेमाल किया जा सकता है. यह सबसे सामान्य वीडियो स्ट्रीमिंग प्रोटोकॉल के लिए, कन्वर्ज़न की सुविधा देता है: डाइनैमिक अडैप्टिव स्ट्रीमिंग ओवर एचटीटीपी (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

Shaka Packager की तरह, यह ऐप्लिकेशन भी एक से ज़्यादा स्ट्रीम को मैनेज कर सकता है. इसके कुछ विकल्पों का इस्तेमाल कई जगहों पर किया जाता है. साथ ही, कमांड में इन विकल्पों के मौजूद होने के आधार पर, फ़ाइल के आउटपुट में अलग-अलग तरह से बदलाव किया जाता है. 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 का इस्तेमाल करें. हमारा सुझाव है कि आप 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 का इस्तेमाल करने की कोशिश कर ली है. अब आपके पास बुनियादी कॉन्सेप्ट सीखने का विकल्प है. इसके बाद, मीडिया स्ट्रीमिंग के बुनियादी कॉन्सेप्ट सीखें.