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

डेरिक हरमन
डेरिक हरमन
जो मेडली
जो मेडली

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

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

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

शाका पैकेजर

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

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

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

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

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

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

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

FFmpeg

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

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

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

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