মিডিয়া রূপান্তর

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

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

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

এই অ্যাপ্লিকেশনগুলির সাথে রূপান্তর করা হয়:

বৈশিষ্ট্য প্রদর্শন

Shaka Packager এবং FFmpeg উভয়ই একটি মিডিয়া ফাইলের বিষয়বস্তু পরিদর্শন করতে এবং তারপর একটি স্ট্রিমের বৈশিষ্ট্যগুলি প্রদর্শন করতে ব্যবহার করা যেতে পারে। যাইহোক, উভয়ই একই মিডিয়ার জন্য ভিন্ন আউটপুট প্রদান করে।

শাকা প্যাকেজার ব্যবহার করে বৈশিষ্ট্য

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

FFmpeg ব্যবহার করে বৈশিষ্ট্য

ffmpeg -i glocken.mp4

আউটপুট এর মত দেখাচ্ছে:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:10.03, start: 0.000000, bitrate: 8063 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 7939 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, 127 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Demux (আলাদা) অডিও এবং ভিডিও স্ট্রীম

শাকা প্যাকেজার ফাইল রূপান্তর করার সময় demuxing প্রয়োজন. মিডিয়া ফ্রেমওয়ার্ক ব্যবহারের জন্যও এটি প্রয়োজনীয়।

শাকা প্যাকেজার ডিমুক্সিং

MP4

packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

বা:

packager \
  input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
  input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

ওয়েবএম

packager \
  input=myvideo.webm,stream=video,output=myvideo_video.webm \
  input=myvideo.webm,stream=audio,output=myvideo_audio.webm

FFmpeg demuxing

MP4

ffmpeg -i myvideo.mp4 -vcodec copy -an myvideo_video.mp4
ffmpeg -i myvideo.mp4 -acodec copy -vn myvideo_audio.m4a

ওয়েবএম

ffmpeg -i myvideo.webm -vcodec copy -an myvideo_video.webm
ffmpeg -i myvideo.webm -acodec copy -vn myvideo_audio.webm

Remux (একত্রিত) অডিও এবং ভিডিও স্ট্রীম

কিছু পরিস্থিতিতে আপনাকে একটি একক পাত্রে অডিও এবং ভিডিও আবার একত্রিত করতে হবে। বিশেষ করে যখন মিডিয়া ফ্রেমওয়ার্ক ব্যবহার করছেন না। এটি এমন কিছু যা FFmpeg বেশ ভালভাবে পরিচালনা করতে পারে এবং এমন কিছু যা শাকা প্যাকেজার বর্তমানে সমর্থন করে না।

ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm

বৈশিষ্ট্য পরিবর্তন করুন

বিটরেট

FFmpeg এর জন্য, আমরা .mp4 বা .webm এ রূপান্তর করার সময় এটি করতে পারি।

ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm

মাত্রা (রেজোলিউশন)

ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm

ফাইলের ধরন

শাকা প্যাকেজার .mov ফাইলগুলি প্রক্রিয়া করতে পারে না এবং তাই সেই বিন্যাস থেকে ফাইলগুলিকে রূপান্তর করতে ব্যবহার করা যায় না।

.mov থেকে .mp4

ffmpeg -i myvideo.mov myvideo.mp4

.mov থেকে .webm

ffmpeg -i myvideo.mov myvideo.webm

অডিও এবং ভিডিও সিঙ্ক্রোনাইজ করুন

প্লেব্যাকের সময় অডিও এবং ভিডিও সিঙ্ক্রোনাইজ করা নিশ্চিত করতে, কীফ্রেমগুলি সন্নিবেশ করান৷

ffmpeg -i myvideo.mp4 -keyint_min 150 -g 150 -f webm -vf setsar=1:1 out.webm

MP4/H.264

ffmpeg -i myvideo.mp4 -c:v libx264 -c:a copy myvideo.mp4

একটি MP4 জন্য অডিও

ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4

WebM/VP9

ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm

একটি WebM জন্য অডিও

ffmpeg -i myvideo.webm -v:c copy -v:a libvorbis myvideo.webm
ffmpeg -i myvideo.webm -v:c copy -v:a libopus myvideo.webm

ভিডিও-অন-ডিমান্ড এবং লাইভ-স্ট্রিমিং

আমরা এই নিবন্ধে প্রদর্শন করতে যাচ্ছি দুই ধরনের স্ট্রিমিং প্রোটোকল আছে। প্রথমটি হল ডায়নামিক অ্যাডাপটিভ স্ট্রিমিং ওভার HTTP (DASH), যা একটি অভিযোজিত বিটরেট স্ট্রিমিং কৌশল এবং ভিডিও-অন-ডিমান্ড উপস্থাপনের ওয়েব-স্ট্যান্ডার্ড-ভিত্তিক পদ্ধতি। দ্বিতীয়টি হল HTTP লাইভ স্ট্রিমিং (HLS), যা ওয়েবের জন্য লাইভ-স্ট্রিমিং এবং ভিডিও-অন-ডিমান্ডের জন্য অ্যাপলের মান

ড্যাশ/এমপিডি

এই উদাহরণটি অডিও এবং ভিডিও স্ট্রীম থেকে মিডিয়া প্রেজেন্টেশন বর্ণনা (MPD) আউটপুট ফাইল তৈরি করে।

packager \
  input=myvideo.mp4,stream=audio,output=myvideo_audio.mp4 \
  input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
  --mpd_output myvideo_vod.mpd

এইচএলএস

এই উদাহরণগুলি অডিও এবং ভিডিও স্ট্রীম থেকে একটি M3U8 আউটপুট ফাইল তৈরি করে, যা একটি UTF-8 এনকোডেড মাল্টিমিডিয়া প্লেলিস্ট।

ffmpeg -i myvideo.mp4 -c:a copy -b:v 8M -c:v copy -f hls \
  -hls_time 10 -hls_list_size 0 myvideo.m3u8

বা:

packager \
  'input=myvideo.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
  'input=myvideo.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
  --hls_master_playlist_output="master_playlist.m3u8"

এখন যেহেতু আমরা আশা করি কিভাবে ফাইলগুলিকে রূপান্তর করতে হয় সে সম্পর্কে ভাল ধারণা আছে, আমরা এই নিবন্ধে যা শিখেছি তা তৈরি করতে পারি এবং পরবর্তী মিডিয়া এনক্রিপশন সম্পর্কে শিখতে পারি।