বছরের পর বছর, এমন অনেক সুযোগ আসলো যখন আমাকে কোনো ফর্মের মাল্টিমিডিয়া এডিটিং (multimedia editing) করতে হতো। অডিও, ভিডিও, আপনি যেকোনো নাম দিন। হয় এটি আমার অনফানি ক্লিপ (unfunny clips) তৈরি করার জন্য আমার ইউটিউব চ্যানেল (Youtube channel)-এর, হয় অডিও এক্সট্রাক্ট (extracting) বা কনভার্ট (converting) করার জন্য, সাবটাইটেল এমবেড (embedding subtitles) করার জন্য, বার বার, আমি নিজেকে কমান্ড-লাইন (command-line)-এ এফএফএমপিইজি (ffmpeg) ব্যবহার করতে পেতাম এবং সবসময় প্রক্রিয়াটি উপভোগ করতাম যখন এই অসামান্য প্রোগ্রামের (unassuming program) ক্যাপাবিলিটি (capabilities) জানালে চমৎকার হতাম।
এবং তभी আমি ভাবলাম, হয়তো আমাকে এফএফএমপিইজি (ffmpeg)-এর ওপর একটি আরও কম্প্রিহেনসিভ (comprehensive) গাইড লিখা উচিত, যেটি টাস্ক এবং ফাংশনগুলির বৈচিত্র্য লিস্ট (list) করবে, এবং তারপর সেগুলোকে রিয়েল-লাইফ উদাহরণ (real-life examples) এবং ইউজ কেস (use cases) দিয়ে 랩 (wrap) করবে। যারা আমি প্রথমে এফএফএমপিইজি (ffmpeg)-কে 언급 করেছিলাম রোসে (in anger) আমার ফ্ল্যাশ এডিটিং টিউটোরিয়াল (Flash editing tutorial)-এ ২০০৮ সালে, এখন একটি তাজা, আপ-টু-ডেট (up-to-date) আর্টিকেলের সময়। এটি কমান্ড-লাইন (command-line) হবে, এটি নার্ডি (nerdy) হবে, কিন্তু এটি মজারও হওয়া উচিত। আমার সাথে চলুন।
বেসিকস (Basics)
এফএফএমপিইজি (ffmpeg) প্রায় সকল এবং যেকোনো লিনাক্স ডিস্ট্রিবিউশন (Linux distribution)-এ উপলব্ধ, এবং উইন্ডোজ (Windows) এবং ম্যাক (Mac)-এর জন্যও বিল্ড (builds) আছে। আপনি যদি জানতে চান এটি কী কী করতে পারে, তবে আপনি এর ক্যাপাবিলিটি (capabilities) চেক করতে পারেন ffmpeg আর্গুমেন্ট (arguments) ছাড়া চালিয়ে বা একটি ঐচ্ছিক -hide_banner ফ্ল্যাগ (flag) দিয়ে। আপনি মেইন প্রোগ্রামের (main program) হেল্প অপশন (help option) এবং এর অনেক সাব-কমান্ডস (sub-commands) এর জন্যও ব্যবহার করতে পারেন। চমৎকার ফিচারের অ্যারে (array) অভিভূতকর (intimidating) হতে পারে, তাই আমরা ধীরে ধীরে কিন্তু নিশ্চিতভাবে অগ্রসর হব। তারপর, আসল ডকুমেন্টেশন (documentation)-টি ভুলবেন না, যা খুব নিট (neat)।
রূপান্তর এবং ট্রান্সকোডিং (Conversion and transcoding)
সবচেয়ে कॉमन টাস্ক (common tasks) একটা হল ফাইলগুলোকে এক ফরম্যাট থেকে অন্য ফরম্যাটে রূপান্তর (converting) করা। আমার ফ্লিভি (FLV) ক্লিপ থেকে অডিও ফাইল এক্সট্রাক্ট (extract audio files) করার উদাহরণ মনে করুন? একই জিনিস। কিন্তু আপনি হয়তো একটি ক্যামেরায় (camera) রেকর্ড করা ভিডিওকে এমপি৪ (MP4) এর মতো কিছুতে রূপান্তর করতে চান, বা হয়তো আপনার ওগ (OGG) ফাইলগুলোক এমপি৩ (MP3)-এ রূপান্তর করতে চান, বা সেসব। সিনেরিওর (scenarios) একটি অযান্ত্রিক বৈচিত্র্য (endless variety) আছে, এবং সমানভাবে সমর্থিত মোড এবং ফরম্যাটের (supported modes and formats) একটি অযান্ত্রিক সংখ্যা (equally endless number) এফএফএমপিইজি (ffmpeg)-এ। টিপিক্যালি (Typically), আপনি যা করবেন সেটি হল:
- ইনপুট ফাইল (input file) স্পেসিফাই (specify) করুন।
- প্রত্যাশিত ভিডিও এবং অডিও কোডেক (desired video and audio codecs) স্পেসিফাই (specify) করুন।
- আউটপুট ফাইল (output file) স্পেসিফাই (specify) করুন।
আপনি যদি ভিডিও স্ট্রিম (video stream) ম্যানিপুলেট (manipulate) করতে না চান, তবে আপনি কপি কোডেক (copy codec) ব্যবহার করতে পারেন। অডিওর জন্যও একই কথা সত্য। আপনি এই অপশনটি ব্যবহার করতে পারেন যদি আপনি কন্টেইনার (container) পরিবর্তন করতে চান, যেমন এমওভি (MOV) থেকে এমপি৪ (MP4)-এ যাওয়া Без(actual encoding) পরিবর্তন করা।
ffmpeg -i MVI_1348.MOV -c:v copy -c:a copy new.mp4
নোট: সব ফরম্যাট (formats) সব কোডেক (codecs) এবং অপশন (options) সাপোর্ট করে না, তাই এটি সব কেসে (cases) কাজ নাও করতে পারে। জেমন:
[mp4 @ 0x55a21519fb20] Could not find tag for codec vp8 in stream #0, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Last message repeated 1 time
আপনি যদি কেবল একটি নির্দিষ্ট স্ট্রিম (stream) - অডিও, ভিডিও, সাবটাইটেল, বা ডেটা - এক্সট্রাক্ট (extract) করতে চান, তবে আপনি অন্যান্য স্ট্রিমের প্রসেসিং (processing) দমন (suppress) করতে পারেন (সময় এবং সিপিইউ সাইকেল (CPU cycles) বাঁচাতে যা অপারেশনের জন্য দরকার)। উদাহরণস্বরূপ, আপনি যদি একটি কম্বাইনড অডিও-ভিডিও মিডিয়া ফাইল (combined audio-video media file) থেকে কেবল অডিও চান, তবে আপনি -vn (no video) অপশন ব্যবহার করতে পারেন।
ffmpeg -i MVI_1348.MOV -vn -ar 44100 -ab 192k sound-only.mp3
এই সুপারব ইউটিলিটি (superb utility) আপনাকে জিনিসগুলো কীভাবে করবেন সেটি নিয়ে খুব ফ্লেক্সিবিলিটি (flexibility) দেয়। উদাহরণস্বরূপ, codec:v, vcodec এবং c:v একই জিনিস (identical), এবং আপনি যেকোনো একটি ব্যবহার করতে পারেন। আপনি যদি কেবল অডিও আউটপুট (audio output) চান, উপরের মত, তবে ffmpeg অনুমান (guess) করবে এবং অনুমান করবে (assume) আপনি -vn ভাবেও বলতে চেয়েছেন। আপনি -f ফ্ল্যাগ (flag) ব্যবহার করে আউটপুট ফরম্যাট ফোর্স (force output format) করতে পারেন, কিন্তু আবার, টুলটি আপনার কমান্ড থেকে এন্ড রেজাল্ট (end result) অনুমান (guess) করার চেষ্টা করবে। উদাহরণস্বরূপ, আপনি -f mp3 বা acodec mp3 ব্যবহার করতে পারেন।
ভিন্ন কোডেক (Different codecs)-এর ভিন্ন অপশন (options) থাকবে। উদাহরণস্বরূপ, একটি অডিও ফাইলের জন্য, আপনি অডিও স্যাম্পলিং রেট (audio sampling rate) এবং অডিও বিটরেট (audio bitrate), চ্যানেলের সংখ্যা (number of channels), এবং আরও কিছু স্পেসিফাই (specify) করতে পারেন। আপনি যদি কিছু অপশন স্কিপ (skip) করেন, তবে কমান্ডটি ফেইল (fail) করতে পারে, বা ডিফল্ট (defaults) ব্যবহার করা হবে।
স্কেল এবং কোয়ালিটি (Scale and quality)
আরেকটি সাধারণ টাস্ক (common task) হল ভিডিওর সাইজ (resolution) এবং স্ট্রিমের কোয়ালিটি (quality of streams) পরিবর্তন করা। এফএফএমপিইজি (ffmpeg) আপনাকে এটিকে ভিন্ন ভিন্ন পথে করতে দেয়। আপনি রেশিও (ratio) ফোর্স (force) করতে পারেন (এবং ডিফল্ট আসপেক্ট রেশিও (aspect ratio) ভাঙতে পারেন), বা এটি সংরক্ষণ (preserve) করতে পারেন ভার্টিক্যাল (vertical) বা হরিজন্টেল (horizontal) ভ্যালু (value) প্লাস একটি ম্যাজিক কোয়ালিফায়ার (magic qualifier) স্পেসিফাই (specify) করে। আপনি ভিডিও বর্ডার (video borders) ক্রপ (crop) করতে পারেন, এবং আপনি স্ট্রিমগুলো রি-এনকোড (re-encode) করতে পারেন। এই স্টেজে উদাহরণ দরকার।
ffmpeg -i input.avi -c:v mpeg4 -vtag xvid -qscale:v 3 -c:a libmp3lame -qscale:a 4 output.avi
এখানে কী আছে? আমরা একটি এভিআই (AVI) ইনপুট ফাইল ট্রান্সকোড (transcoding) করছি এমপিইজি৪ (MPEG4) ভিডিও স্ট্রিম ব্যবহার করে কোয়ালিটি ৩ (qscale) সেট করে। কিছু কোডেকের (codecs) জন্য, কোয়ালিটি ১-৩১ পর্যন্ত থাকে, ১ হাইএস্ট (highest)। আমি অনেক জেনেরিক ইনপুট ফাইলে (generic input files) টেস্ট করেছি, এবং হাইএস্ট কোয়ালিটি টিপিক্যালি প্রায় ডাবল সাইজ (double the size) দিয়েছিল, যেখানে ৩ বা ৪ দিয়েছিল প্রায় ২০-৩০% রিডাকশন (reduction)। ভিট্যাগ এক্সভিড (Vtag xvid) একটি এমপিইজি-৪ (MPEG-4) স্পেসিফিক অপশন। একইভাবে, আমরা অডিওর জন্য লেম (LAME) ব্যবহার করছি।
ffmpeg -i MVI_1348.MOV -vfilters scale=1280:-1 -c:a copy scaled.mp4
এই উদাহরণটি ভিডিও স্কেলিং (video scaling) দেখায় (আপনি -vf বা -vfilters ব্যবহার করতে পারেন), আসপেক্ট রেশিও (aspect ratio) সংরক্ষিত (preserved) -১ কোয়ালিফায়ার (qualifier) দিয়ে। আমরা স্ট্রিমের কোয়ালিটি (quality of the stream) পরিবর্তন করছি না। অডিও স্ট্রিমটি সিম্পলি আউটপুট কন্টেইনারে (output container) কপি (copy) হচ্ছে। আপনার আসল ভিডিওর (original video) রেজোলিউশন (resolution) স্টেটেড (stated) একটা থেকে বেশি হলে, তাহলে আপনি ডাউনস্কেলিং (downscaling) করবেন, এবং যদি কম হয়, তবে আপনি আপস্কেলিং (upscaling) করবেন।
ইমেজ এক্সট্রাকশন, কম্বিনেশন, জিআইএফ (Image extraction, combination, GIFs)
এফএফএমপিইজি (ffmpeg) ছবি (pictures) ও ম্যানিপুলেট (manipulate) করতে পারে, যদিও এটি একটি মিডিয়া ইউটিলিটি (media utility)। কিন্তু হে, ছবিগুলো মিডিয়া (media), এবং এসেনশিয়ালি (essentially), ভিডিওগুলোরা চলন্ত ছবি (moving pictures), ঠিক না! কিছু টাস্ক যা আপনি করতে চান - একটি ভিডিও থেকে ফ্রেম এক্সট্রাক্ট (extract frames) করা থাম্বনেইল (thumbnails) তৈরি করার জন্য (হাই-কোয়ালিটি (high-quality) वालेও), বরং ম্যানুয়ালি ভিডিও পজ (pausing video) করা বা হেক্টিক স্ক্রিনশট (hectic screenshots) তৈরির চেয়ে। আপনি অপpositeও করতে পারেন - স্টিলস (stills) কম্বাইন (combine) করে একটি স্টপমোশান ভিডিও (stopmotion video) - বা একটি ফুল ভিডিও তৈরি করতে। আপনি ভিডিওকে অ্যানিমেটেড জিআইএফ (animated GIFs)-এ রূপান্তর করতে পারেন, যা ওয়েবের (Web) চারপাশে ড্যাংক মিমিজম (dank memeism)-এর জন্য হ্যান্ডি (handy) হতে পারে। একবার আবার, আমরা কিছু ... ড্যাংক (dank) উদাহরণ দিয়ে প্রদর্শন করব।
ffmpeg -i input.mp4 -r 1 -f image2 thumb-%3d.png
আমরা একটি ইনপুট ফাইল স্পেসিফাই (specify) করি, আমরা রেট (rate) স্পেসিফাই (specify) করি (এই কেসে আমরা চাই ১ ইমেজ পার ১ সেকেন্ড অফ ভিডিও), আমরা ফরম্যাট (format) স্পেসিফাই (specify) করি (image2), এবং আউটপুট ফরম্যাট (output format) স্পেসিফাই (specify) করি। এই কেসে, আমরা কিছু চালাকি (clever) করছি। আপনি যদি কখনো সি ল্যাঙ্গুয়েজ কোড (C language code) দেখেছেন, তবে এটি পরিচিত দেখাবে। আমরা থাম্বনেইল (thumbnails)-এর জন্য নম্বরিং সিকোয়েন্স (numbering sequence) তিন ডিজিট (three digits) চাই। আপনি যেকোনো পরিমাণ ডিজিট বেছে নিতে পারেন, কিন্তু আদর্শভাবে, আপনি এক্সপেক্টেড (expected) এক্সট্রাক্টেড ইমেজ (extracted images) সংখ্যা থেকে বেশি চাইবেন।

তারপর, ইমেজগুলোক একটি ভিডিওতে কম্বাইন (combine) করা খুব সিমিলার (similar):
ffmpeg -f image2 -i thumb-%3d.png stopmotion.mp4
আপনি রেট (rate) স্পেসিফাই (specify) করতে পারেন (আপনি আপনার ভিডিওকে ২৪ বা ৩০ FPS এর মতো কিছুতে রাখতে চান), কিন্তু আমরা এটি কিছুটা পরে টাচ (touch) করব গাইডে, যখন আমরা ভিডিও প্লেব্যাক স্লোয়ার (slower) এবং/অথবা ফাস্টার (faster) করার কথা বলব। এবং যেহেতু আমরা ছবি (images) সম্পর্কে কথা বলছি, আপনি সেগুলো রিসাইজ (resize) করতে পারেন:
ffmpeg -i thumb-004.png -vf scale=400:-1 test.png
অ্যানিমেটেড জিআইএফ (Animated GIFs) খুব আকর্ষণীয়। এবленийা (Also) বেশ সিম্পল তৈরি করা। শুধু একটি ইনপুট ফাইল স্পেসিফাই (specify) করুন এবং আউটপুটকে জিআইএফ এক্সটেনশন (gif extension) থাকতে সেট করুন। এফএফএমপিইজি (ffmpeg) অটো-গেস (auto-guess) করবে বাকি এবং একটি নাইস, হাই-কোয়ালিটি অ্যানিমেটেড জিআইএফ (animated GIF) তৈরি করবে আপনার জন্য।
ffmpeg -i MVI_6654.MOV test.gif

শেষে, জিআইএফ (GIFs)-এর অপোজিট (opposite), আপনি একটি ভিডিও চাইতে পারেন যা একটি সিঙ্গেল ইমেজ (single image) থেকে কম্পোজড (composed) - একটি কনস্ট্যান্ট প্রিভিউ (constant preview) কিন্তু তারপর কিছু কicher মিউজিক (music) বা পডকাস্ট (podcast) ব্যাকগ্রাউন্ডে প্লে (playing) হচ্ছে। এফএফএমপিইজি (ffmpeg) আপনাকে একটি চালাক ট্রিক (clever trick) দিয়ে এটি করতে দেয়।
ffmpeg -loop 1 -i thumb-001.png -i sound-only.mp3 -c:v libx264 -shortest video-static-image.mp4
আমরা দুইটি ইনপুট (inputs) প্রদান করি, প্রথমটি একটি ইমেজ (image) যেটি লুপ (loop) সেট করা। আমরা ভিডিও রি-এনকোড (re-encoding) করছি। কিন্তু যেহেতু ইমেজটি ইনডিফিনিটলি (indefinitely) লুপ (loop) সেট করা, আমাদের shortest অপশনও দরকার, যাতে অপারেশনটি শেষ হয় যখন সবচেয়ে ছোট ক্লিপ (shortest clip) শেষ হয়, যা এই কেসে ভিডিও হবে।
ভিডিও স্প্লিটিং এবং জয়েনিং (Splitting and joining videos)
এটি আরেকটি উপযোগী সিনেরিও (useful scenario)। আপনার যদি একটি বড় ক্লিপ (big clip) থাকে, কিন্তু আপনাকে কেবল কয়েক মিনিট বা সেকেন্ড দরকার, তবে ffmpeg প্রয়োজনীয় টুকরো কাটা (cut out) করতে পারে। একইভাবে, আপনি একাধিক ফাইলকে এক স্ট্রিম (one stream)-এ কম্বাইন (combine) করতে পারেন - ভিডিও এবং অডিও দুটোই। Ffmpeg আপনাকে ডিজায়ারড স্টার্ট (desired start) এবং এন্ড টাইমস্ট্যাম্প (end timestamps) বেছে নেওয়ার সুযোগ দেয়, তাই আপনার টাস্কটি হ্যান্ডেল (handle) করার জন্য আপনার पास অনেক লeway (leeway) আছে।
-t duration রেকর্ড বা ট্রান্সকোড "duration" সেকেন্ড অডিও/ভিডিও
-to time_stop রেকর্ড বা ট্রান্সকোড স্টপ টাইম
-fs limit_size লিমিট ফাইল সাইজ সেট করুন বাইটে (bytes)
-ss time_off স্টার্ট টাইম অফসেট (start time offset) সেট করুন
-sseof time_off EOF রিলেটিভ (relative to EOF) স্টার্ট টাইম অফসেট সেট করুন
-seek_timestamp -ss-এ টাইমস্ট্যাম্প (timestamp) দিয়ে সিকিং (seeking) এনেবল/ডিজেবল (enable/disable) করুন
-timestamp time রেকর্ডিং টাইমস্ট্যাম্প ('now' করেন করেন্ট টাইম (current time) সেট করতে)
সেট করুন)
তো, আপনি কিছু এই মত চেষ্টা করতে পারেন:
ffmpeg -i MVI_1348.MOV -ss 4 -t 4 spliced.mp4
এই কমান্ডটি ইনপুট ক্লিপ (input clip) থেকে ৪ সেকেন্ড এক্সট্রাক্ট (extract) করবে ৪ সেকেন্ড টাইম অফসেট (time offset) থেকে শুরু করে। আপনি শর্ট নোটেশন (short notation) (৪ ইন্ডিকেটস সেকেন্ডস/indicates seconds) বা ফুল নোটেশন (full one) hh:mm:ss.mmm ব্যবহার করতে পারেন। এটি আপনাকে এক মিলিসেকেন্ড (one millisecond) পর্যন্ত একুরেসি (accuracy) দেয়, যা সকল প্র্যাক্টিকেল ইউজকেস (practical usecases)-এর জন্য চাইতে চাইতেও বেশি হওয়া উচিত।
ফাইলগুলো জয়েন (Joining files) করা একটু বেশি কমপ্লিকেটেড (complicated)। টেকনিক্যালি টার্মড কনক্যাটেনেশন (concatenation/concat), এটি কাটিং অপশন (cutting option)-এর থেকে আলাদা কাজ করে। আপনি কমান্ড লাইনে (command line) জয়েন করার জন্য ডিজায়ারড পার্টস (desired parts) স্পেসিফাই (specify) করেন না, আপনি সেগুলো একটি ফাইলে রাখেন, একটি খুব স্পেসিফিক নোটেশন (notation) ব্যবহার করে, এবং তারপর সেই ফাইলটি ffmpeg-এ পড়েন। উদাহরণস্বরূপ:
ffmpeg -f concat -i list.txt -codec copy joined.mp4
list.txt ফাইলটির কন্টেন্টস (contents) হবে:
file 'part-1.mp4'
file 'part-2.mp4'
file 'part-3.mp4'
দয়া করে 'file' শব্দ এবং সিঙ্গুল কোটেশন মার্কস (single quotation marks) ব্যবহার নোট (note) করুন। আপনি অ্যাবসোলিউট (absolute) এবং রিলেটিভ (relative) পাথ (paths) দুটোই ব্যবহার করতে পারেন। আপনি যদি ফাইল ফরম্যাটে (file format) মিস্টেক (mistake) করেন, তবে আপনি একটি এরর (error) দেখবেন:
[concat @ 0x555ca89c38c0] Line 1: unknown keyword 'part-1.mp4'
list.txt: Invalid data found when processing input
আপনি যদি ফাইল তালিকা (list of files) কমান্ড লাইনে (command line) দিতে চান (টেক্সট ফাইলের বদলে):
part-1.mp4: Invalid data found when processing input
সাবটাইটেল এমবেড এবং এক্সট্রাক্ট (Embed and extract subtitles)
আমার ভিএলসি (VLC) এবং সাবটাইটেল আর্টিকেল মনে করুন? ভালো, যদি আপনি কমান্ড লাইন (command line) দ্বারা অভয় বায় না হন, তবে আপনি একই জিনিস ffmpeg-এও করতে পারেন। একটি তুচ্ছ উদাহরণ (trivial example) আকারে, ধরি আপনার আলাদা অডিও এবং সাবটাইটেল ফাইল আছে। যেকোনো অতিরিক্ত প্রসেসিং (additional processing) ছাড়া, আপনি শুধু ভিডিও ফিল্টারিং অপশন (video filtering option) এই জন্য ব্যবহার করতে পারেন:
ffmpeg -i input.avi -vf subtitles=subtitle.srt output.avi
একটি আরও জটিল ইউজ কেস (use case), নিচের কমান্ডটি আলাদা এমপি৪ (MP4) এবং সাবটাইটেল ফাইল নেবে, এবং সেগুলোকে একটি আউটপুট ফাইলে কম্বাইন করবে ভিডিও ট্রান্সকোডিং (video transcoding) সহ। -map অপশনগুলো (দুইবার শো করছে, ইরর নয়) ডিফাইন (define) করে স্ট্রিমগুলো আউটপুটে কী অর্ডারে (order) ম্যাপ (mapped) হবে। কিন্তু তারপর একটি চালাক এবং কিছুটা কনফিউজিং (confusing) কোডেকের লিস্টিং (listing) আছে। যেহেতু আমাদের একাধিক স্ট্রিম (multiple streams) আছে, আমরা কেবল ভিডিও পার্ট (video part) ম্যানিপুলেট (manipulate) করতে চাই - কিন্তু অডিও বা সাবটাইটেল না।
সেটির জন্য, -c copy স্পেসিফাই (specifies) করে সব কোডেক কপি (copy) করা উচিত, কিন্তু -c:v ব্যবহার করে এটি একটি ওভাররাইড (override) প্রদান করে এই অপশনের, এবং ভিডিও স্ট্রিম (video stream) ট্রান্সকোড (transcoded) হবে। যেহেতু আমরা libx264 কোডেক ব্যবহার করছি, আমরা কনস্ট্যান্ট রেট ফ্যাক্টর (Constant Rate Factor/CRF) অপশনও ব্যবহার করছি ভেরিয়েবল বিটরেট (variable bitrate) এর জন্য, ২৩ সেট (set) করে (রেঞ্জ lossless ০ থেকে lowest-quality ৫১) এবং veryfast প্রিসেট (preset), যা একটি রিলেটিভলি স্মল আউটপুট (relatively small output) তৈরি করে।
ffmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4
সাবটাইটেল এক্সট্রাক্ট (Extracting subtitles) নিচের ফর্ম নেয়:
ffmpeg -txt_format text -i input.file out.srt
ভিডিও স্পিড আপ এবং স্লো (Speed up and slow videos)
এটি আরেকটি আকর্ষণীয় ইউজকেস (usecase)। যেকোনো মানুষের মতো, আপনি যেকোনো ভিডিও নিতে পারেন, সেটিকে ২x স্পিড আপ (speed up) করতে পারেন, এবং তারপর বেনি হিল মিউজিক (Benny Hill music) যোগ করতে পারেন, এবং তখন অনেক আনন্দ (rejoicing) হওয়া উচিত। আপনি অ্যাকশন স্লো ডাউন (slow down action) করতে পারেন, এবং তারপর, জিনিসগুলো স্পাইস আপ (spice up) করার জন্য, স্মুথিং (smoothing) ও যোগ করতে পারেন যাতে স্লোড সিকোয়েন্স (slowed sequence) স্টিল্টেড (stilted) লাগে না।
উদাহরণস্বরূপ, আমাদের একটি স্টপ মোশান ভিডিও (stop motion video) থাকতে পারে - শুধু ১৫-২০ থাম্বনেইল (thumbnails) দিয়ে, এটি কেবল এক সেকেন্ডে প্লে (play) হয়ে যায়। তাই আপনি হয়তো এটিকে ৫ সেকেন্ডে স্ট্রেচ (stretch) করতে চান, কিন্তু এর মানে প্রতিটি ফ্রেম (frame) পাঁচ গুণ বেশি সময় দেখাবে। বদলে আপনি পটেনশিয়ালি "ইনসার্ট" (insert) করতে পারেন এক্সট্রা ফ্রেম (extra frames) যাতে এটি একটি স্মুথ স্লো-মো (smooth slo-mo) দেখায়। আমরা এটি একটি ইন্টেরিয়ার ডিজাইন গ্যালারি (interior design gallery)-এর সাথে আগে করেছিলাম। আমরা এভিসিন্থ (AviSynth) এবং ভার্চুয়ালডাব (VirtualDub) এই টাস্কের জন্য ব্যবহার করেছিলাম।
ভিডিও স্পিড ফিল্টার (video speed filter) কাজ করে প্রতিটি ভিডিও ফ্রেমের (video frame) প্রেজেন্টেশন টাইমস্ট্যাম্প (presentation timestamp/PTS) পরিবর্তন করে। সিম্পলি বলতে, ফ্র্যাকশনাল ভ্যালু (fractional values) ভিডিও স্পিড আপ (speed up) করে, ১ থেকে বড় মাল্টিপ্লায়ার (multipliers) এটিকে স্লো ডাউন (slow down) করে। আপনি যখন স্পিড আপ (speed up) করেন, ffmpeg ফ্রেম ড্রপ (drop frames) করে, কিন্তু আপনি একটি উচ্চ ফের (higher framerate) স্পেসিফাই (specify) করতে পারেন। আসলটি সংরক্ষণ (preserve) করতে, আপনি আপনার ইনপুটের FPS কে ১/PTS দিয়ে গুণ (multiply) করতে পারেন যা আপনি ব্যবহার করছেন। তাই আপনি আপনার ২৪ FPS ক্লিপের (clip) স্পিড ডাবল (double) করলে, আপনাকে ৪৮ FPS রেট (rate) ব্যবহার করা উচিত।
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
ffmpeg -i input.mp4 -r 96 -filter:v "setpts=0.25*PTS" output.mp4
ffmpeg -i input.mp4 -filter:v "setpts=2*PTS" output.mp4
ভিডিও স্মুথিং (Smoothing videos) আরও কমপ্লিকেটেড (complicated)। আমাকে ডকুমেন্টেশন (documentation) কনসাল্ট (consult) করতে পড়েছিল। এসেনশিয়ালি (Essentially), একটি ভিডিও যা ৫ গুণ স্লোডাউন (slowed down) (এবং আসলের চেয়ে ৫ গুণ লম্বা), আমি ভিডিও ইন্টারপোলেশন (video interpolation) ব্যবহার করছি স্মুথিং ইফেক্ট (smoothing effect) তৈরি করতে। এখানেও, আপনাকে FPS যোগ করতে হবে, যাতে ffmpeg-র পর্যাপ্ত ডেটা থাকে মাঝপথের ফ্রেমগুলো অনুমান (guess) করার জন্য। আমার উদাহরণে, ৫x স্লোডাউন, আপনার ৫x২৪ FPS (আসল স্পিড), এরগো (ergo) ১২০ FPS দরকার।
ffmpeg -i input.mp4 -filter:v "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=120'" output.mp4
এটি একটি সিপিইউ-ইনটেনসিভ (CPU-intensive) টাস্ক, এবং এটি ফিনিশ (finish) হতে কিছু সময় নিতে পারে। আমি ffplay ব্যবহার করেছি ভিডিও প্রিভিউ (preview videos) করার জন্য, এবং আমি রেজাল্টগুলো রিজনেবল (reasonable) পেলাম, কিন্তু আপনি কিছুই ম্যাজিক (magic) করতে পারবেন না কিছুই নেই (nothing) থেকে, তাই যদিও এটি কাজ করে, এটি ভালো কাজ করে যখন ছোট পরিমাণ ডেটা মিসিং (missing) থাকে (নয় one frame per second every two seconds বা এমনকি)।
অডিওর জন্য, আপনি atempo ব্যবহার করতে পারেন। এই অপশনের (option) একটি রেঞ্জ (range) আছে ০.৫-২.০, যেটি মানে অর্ধেক বা ডাবল স্পিড (half or double the speed) সর্বোচ্চ, যাইহোক, একাধিক atempo ফিল্টার চেইন (chain) করা সম্ভব অতিরিক্ত স্পিড চেঞ্জ (speed changes) পাওয়ার জন্য। নিচের উদাহরণের মত কিছু:
ffmpeg -i input.mp4 -filter:a "atempo=2.0,atempo=2.0" -vn output.mp4
এবং এটি এই টিউটোরিয়ালের (tutorial) শেষে আনে।
উপসংহার
আশা করি আপনি এটি ফ্রুটফুল (fruitful), エンজয়েবল (enjoyable) এবং রেলেভেন্ট (relevant) পেয়েছেন। এফএফএমপিইজি (ffmpeg) ওয়ার্কহোর্স (workhorse) - না, এটি একটি পুরো ক্যাবallería (cavalry) - লিনাক্স (Linux)-এ অডিও এবং ভিডিও টুইকিং (tweaking)-এর, এবং এর এতটুকু প্র্যাক্টিক্যাল টুল (practical tools), অপশন (options) এবং কনফিগারেশন (configurations) আছে যে শুরুতে শুরু করা কনফিউজিং (confusing) এবং হয়তো এমনকি অভ্যন্তরীণ (intimidating) হতে পারে। সেই ইমোশনগুলো (emotions) এখন পর্যন্ত বाष্পীভূত (evaporated) হয়ে গেছে যেহেতু আপনি এই টিউটোরিয়ালটি (tutorial) পড়ে ফেলেছেন।
যাইহোক, আমরা কথা বলেছি রূপান্তর এবং ট্রান্সকোডিং (conversion and transcoding), স্কেলিং এবং কোয়ালিটি (scaling and quality), ইমেজ এক্সট্রাকশন, কম্বিনেশন এবং জিআইএফ ক্রিয়েশন (image extraction, combination and GIF creation), ভিডিও স্প্লিটিং এবং জয়েনিং (splitting and joining of videos), সাবটাইটেল এক্সট্রাকশন এবং এমবেডিং (subtitle extraction and embedding), ভিডিও স্পিডআপ এবং স্লোডাউন (video speedup and slowdown), এবং তারপর কিছু। সেটি আপনাকে কিছুক্ষণ খুশি এবং ব্যস্ত রাখতে পারবে। আপনার যদি কোনো ffmpeg-রিলেটেড রিকোয়েস্ট (requests) বা প্রশ্ন (questions) থাকে, ফায়ার আওয়ে (fire away), ইমেইল (email) কেবল এক ক্লিক দুরে। বা কিছু। চূড়ান্ত, আপনি যদি এই টিউটোরিয়ালটি সত্যিই উপযোগী (truly useful) মনে করেন, তবে কিছু প্রেম (love) ফেরত দিন, কারণ কেন না।
চেয়ার্স (Cheers)।