মিডিয়া অ্যাপ্লিকেশন বেসিক

ডেরেক হারম্যান
Derek Herman
জো মেডলি
Joe Medley

মিডিয়ার সাথে কাজ করার জন্য প্রায়ই মিডিয়া ফাইলের বৈশিষ্ট্য পরিবর্তন করতে হয়, যেমন বিটরেট বা রেজোলিউশন। শুরু করার জন্য একটি সরল উপায় খুঁজে পাওয়া বেশ ভয়ঙ্কর হতে পারে। এই পৃষ্ঠায়, আপনি ব্যবহৃত সরঞ্জামগুলি এবং কীভাবে সেগুলি দ্রুত ইনস্টল করবেন সে সম্পর্কে শিখবেন৷

প্রথমত, আমরা দুটি সাধারণ কমান্ড-লাইন মিডিয়া ইউটিলিটিগুলির জন্য প্রাথমিক ব্যবহার বর্ণনা করি: শাকা প্যাকেজার এবং FFmpeg এবং তারপরে আমরা আপনাকে দ্রুত সরঞ্জামগুলি ইনস্টল করতে সহায়তা করি। কেন দুটি অ্যাপ্লিকেশন কভার? যদিও উভয়ই নিজেদের দ্বারা শক্তিশালী এবং দরকারী, ওয়েবের জন্য মিডিয়া প্রস্তুত করার জন্য প্রয়োজনীয় সমস্ত কিছুই নেই৷ আমরা মিডিয়া রূপান্তর এবং মিডিয়া এনক্রিপশন পৃষ্ঠাগুলিও তৈরি করেছি যা এই দুটি অ্যাপ্লিকেশনের সাথে আরও অনেক সাধারণ ক্রিয়াকলাপ দেখায়৷

এই অ্যাপ্লিকেশনগুলি ফাইল ম্যানিপুলেশন কাজের জন্য উপলব্ধ একমাত্র বিকল্প নয়, তবে এগুলি সবচেয়ে সাধারণ এবং শক্তিশালী দুটি। অন্যান্য বিকল্পগুলির মধ্যে রয়েছে GUI অ্যাপ্লিকেশন মিরো , হ্যান্ডব্রেক এবং ভিএলসি । এছাড়াও রয়েছে এনকোডিং/ট্রান্সকোডিং পরিষেবা যেমন জেনকোডার , অ্যামাজন ইলাস্টিক এনকোডার , এবং গুগল ট্রান্সকোডার API

শাকা প্যাকেজার

শাকা প্যাকেজার একটি বিনামূল্যের মিডিয়া প্যাকেজিং SDK। আপনি যদি আপনার সাইটে একটি মিডিয়া প্লেয়ার ব্যবহার করেন, তাহলে ফাইলগুলি প্রস্তুত করতে আপনি যেটি ব্যবহার করবেন তা হল Shaka প্যাকেজার৷ এটি দুটি সবচেয়ে সাধারণ ভিডিও স্ট্রিমিং প্রোটোকলের জন্য রূপান্তর সমর্থন করে: ডাইনামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP ( DASH ) বা HTTP লাইভ স্ট্রিমিং ( HLS )। শাকা প্যাকেজার মূল নিরাপত্তা বৈশিষ্ট্য সমর্থন করে: সাধারণ এনক্রিপশন এবং ওয়াইডিভাইন ডিজিটাল রাইটস ম্যানেজমেন্ট (ডিআরএম)। এটি লাইভ-স্ট্রিমিং এবং ভিডিও-অন-ডিমান্ড পরিচালনা করতে পারে।

প্যাকেজে যা বলা আছে তা সত্ত্বেও, এই ইউটিলিটি C++ ডেভেলপারদের চেয়ে বেশি। আপনি মিডিয়া সফ্টওয়্যার তৈরির জন্য একটি লাইব্রেরি এবং ওয়েব প্লেব্যাকের জন্য মিডিয়া ফাইলগুলি প্রস্তুত করার জন্য কমান্ড-লাইন ইউটিলিটি হিসাবে উভয়ই এটি ব্যবহার করতে পারেন। এটি পরবর্তী ক্ষমতা যা এখানে আমাদের জন্য দরকারী। প্রকৃতপক্ষে, ওয়েব মিডিয়া নির্মাতাদের জন্য, ব্যয়বহুল বাণিজ্যিক অ্যাপ্লিকেশনগুলিতে অর্থ ব্যয় না করে কিছু কাজ করার একমাত্র উপায় শাকা প্যাকেজার।

এখানে শাকা প্যাকেজার কমান্ডের মৌলিক প্যাটার্ন রয়েছে:

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

মিডিয়া ফাইলের মৌলিক বিষয়গুলিতে আলোচিত বৈশিষ্ট্যগুলি দেখুন এবং কয়েকটি বিষয় লক্ষ্য করুন। উচ্চতা এবং প্রস্থ সম্পূর্ণ HD এর জন্য সঠিক, এবং অডিও এবং ভিডিও কোডেকগুলি তাদের কন্টেইনার প্রকারের জন্য পছন্দের কোডেকগুলির মধ্যে রয়েছে, অডিওর জন্য AAC এবং ভিডিওর জন্য H264৷ এছাড়াও লক্ষ্য করুন যে স্ট্রীমগুলি সংখ্যা দিয়ে চিহ্নিত করা হয়েছে। এগুলি অডিও এবং ভিডিও আলাদাভাবে ম্যানিপুলেট করে এমন অপারেশনগুলির জন্য দরকারী৷

লক্ষ্য করুন যে উপরের আউটপুট বিটরেট দেখায় না। যা অনুপস্থিত থাকা সত্ত্বেও, এই আউটপুটটি পড়া সহজ, তাই আমরা যখনই পারি এটি ব্যবহার করি। যখন আমাদের এমন তথ্যের প্রয়োজন হয় যা শাকা প্যাকেজার পেতে পারে না, যেমন বিটরেট, আমরা FFmpeg ব্যবহার করি।

FFmpeg

FFmpeg মিডিয়া ফাইল রেকর্ডিং, রূপান্তর এবং স্ট্রিমিংয়ের জন্য একটি বিনামূল্যের অ্যাপ্লিকেশন। এর ক্ষমতা শাকা প্যাকেজারের চেয়ে ভাল বা খারাপ নয়। তারা শুধু ভিন্ন.

একটি FFmpeg কমান্ডের জন্য মৌলিক প্যাটার্ন এই মত দেখায়:

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

শাকা প্যাকেজারের মতো এই অ্যাপ্লিকেশনটি একাধিক স্ট্রিম পরিচালনা করতে পারে। এর কিছু অপশন একাধিক স্থানে ব্যবহার করা হয় এবং কমান্ডে কোথায় আছে তার উপর নির্ভর করে ফাইল আউটপুট ভিন্নভাবে ম্যানিপুলেট করে। স্ট্যাক ওভারফ্লো এবং অনুরূপ সাইটগুলিতে আপনি 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

ডকার দিয়ে অ্যাপ্লিকেশন ইনস্টল করা হচ্ছে

আপনি যদি আমাদের আদেশগুলি অনুসরণ করার এবং চেষ্টা করার পরিকল্পনা করেন তবে আপনি হয় প্রয়োজনীয় সরঞ্জামগুলি ম্যানুয়ালি ইনস্টল করতে পারেন, অথবা সহজ পথ বেছে নিতে পারেন এবং ডকার ব্যবহার করতে পারেন। আমরা ডকার ব্যবহার করার পরামর্শ দিই, কারণ এটি আপনাকে অনেক সময় বাঁচাতে যাচ্ছে। এর উপরে আমরা আপনাকে দ্রুত সেট আপ করার জন্য নির্দেশাবলী প্রদান করেছি।

  1. আপনার কম্পিউটারে media-tools নামে একটি নতুন ডিরেক্টরি তৈরি করে শুরু করুন; আপনি আপনার পছন্দের নাম ব্যবহার করতে পারেন, শুধু মনে রাখবেন যে নিম্নলিখিত নির্দেশাবলী অনুমান করে আপনি media-tools ডিরেক্টরির নাম হিসাবে ব্যবহার করছেন।

  2. media-tools ভিতরে একটি docker এবং media ডিরেক্টরি তৈরি করুন। এটি আপনার media ডিরেক্টরিকে বিল্ড প্রসঙ্গের বাইরে রাখবে। এটি গুরুত্বপূর্ণ কারণ media যেখানে ফাইলগুলি সংরক্ষণ করা হয় যা আমরা অপারেশন করার পরিকল্পনা করি এবং তাদের মধ্যে কয়েকটি বেশ বড় হতে পারে। সরাসরি media-tools Dockerfile রাখলে ইমেজ তৈরির গতি কমে যাবে যদি আপনি এটিকে রাস্তার নিচে পুনঃনির্মাণ করেন - সম্ভবত ইনস্টল করা সংস্করণগুলি পরিবর্তন করতে।

  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. একটি ইন্টারেক্টিভ শেল হিসাবে ইমেজ চালান. লিনাক্সে:

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

    উইন্ডোজে:

    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

এখন যেহেতু আপনি শাকা প্যাকেজার এবং FFmpeg ব্যবহার করার চেষ্টা করেছেন, আপনি মিডিয়া স্ট্রিমিং বেসিকগুলি পরবর্তী মৌলিক ধারণাগুলি শেখা চালিয়ে যেতে পারেন৷