मीडिया पर काम करने के लिए अक्सर मीडिया फ़ाइलों की विशेषताओं, जैसे कि बिटरेट या रिज़ॉल्यूशन को बदलने की ज़रूरत होती है. शुरुआत करने का आसान तरीका ढूंढना बहुत मुश्किल हो सकता है. इस पेज पर, आपको इस्तेमाल किए जाने वाले टूल और उन्हें फटाफट इंस्टॉल करने का तरीका बताया जाएगा.
सबसे पहले, हम दो सामान्य कमांड-लाइन मीडिया सुविधाओं के बुनियादी इस्तेमाल के बारे में बताते हैं: 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 इस्तेमाल करें, क्योंकि इससे आपका बहुत समय बचेगा. साथ ही, हमने आपको तेज़ी से सेट अप करने के निर्देश भी दिए हैं.
अपने कंप्यूटर पर
media-tools
नाम की एक नई डायरेक्ट्री बनाकर शुरू करें; आप अपनी पसंद का कोई भी नाम इस्तेमाल कर सकते हैं. बस नीचे दिए गए निर्देशों के मुताबिक,media-tools
को डायरेक्ट्री के नाम के तौर पर इस्तेमाल किया जा रहा है.media-tools
मेंdocker
औरmedia
डायरेक्ट्री बनाएं. ऐसा करने से, आपकीmedia
डायरेक्ट्री, बिल्ड कॉन्टेक्स्ट से बाहर रहेगी. यह बहुत ज़रूरी है, क्योंकिmedia
फ़ाइलों को सेव किया जाता है और उन पर कार्रवाई करने की हमारी योजना है. इनमें से कुछ फ़ाइलें काफ़ी बड़ी हो सकती हैं.Dockerfile
को सीधेmedia-tools
में डालने से, इमेज तब धीरे बनती है, जब सड़क को फिर से बनाया जाता है. इससे, इंस्टॉल किए गए वर्शन को बदलने में मदद मिलती है./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"]
इमेज बनाएं:
docker build -t media-tools ./docker
इमेज को इंटरैक्टिव शेल के तौर पर चलाएं. 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 का इस्तेमाल शुरू कर लिया है, इसलिए अब मीडिया स्ट्रीमिंग की बुनियादी बातें लेख पढ़ें.