- ऑडियो और वीडियो को encode, decode, transcode करने और stream करने के लिए FFmpeg framework की संरचना और उपयोग को कवर करता है
- ffmpeg, ffplay, ffprobe जैसे command-line tools और libavcodec, libavformat, libavfilter जैसी core libraries की भूमिकाओं को विस्तार से समझाता है
- AVFormatContext, AVCodecContext, AVPacket, AVFrame के केंद्र में stream analysis और decoding प्रक्रिया को step-by-step implement करता है
- meson/ninja build system का उपयोग करके example code को अपने-आप download·compile करता है, और sample media files का analysis करके result output करता है
- FFmpeg के internal working principles और decoding pipeline की समझ के लिए इसे hands-on introductory material की तरह इस्तेमाल किया जा सकता है
FFmpeg पैकेज संरचना
- FFmpeg विभिन्न ऑडियो·वीडियो formats को encode, decode, transcode करने और network के जरिए stream करने के लिए tools और libraries का एक संग्रह है
-
FFmpeg tools
- ffmpeg: command-line आधारित multimedia format conversion tool
- ffplay: SDL और FFmpeg libraries पर आधारित एक सरल media player
- ffprobe: multimedia streams का analysis करने वाला tool
-
FFmpeg libraries
- libavformat: input/output और muxing/demuxing सुविधाएँ प्रदान करता है
- libavcodec: encoding/decoding सुविधाएँ प्रदान करता है
- libavfilter: graph-based filters के जरिए raw media processing
- libavdevice: input/output devices का समर्थन
- libavutil: common multimedia utilities प्रदान करता है
- libswresample: audio resampling, sample format conversion, audio mixing का समर्थन
- libswscale: color conversion और image scaling सुविधाएँ
- libpostproc: video post-processing (deblocking, noise filter आदि) सुविधाएँ
FFmpeg simple player
- FFmpeg के बुनियादी उपयोग का तरीका multimedia stream को demux करके उसे audio और video streams में अलग करना, फिर उसे raw audio/video data में decode करना है
-
मुख्य structures
- AVFormatContext: stream synchronization, metadata, muxing को manage करने वाला top-level structure
- AVStream: लगातार चलने वाली audio या video stream
- AVCodec: data encoding और decoding के तरीके को define करता है
- AVPacket: stream के भीतर encoded data
- AVFrame: decoded raw video frame या audio sample
-
stream analysis और demux प्रक्रिया
avformat_alloc_context() से AVFormatContext memory allocate करना
avformat_open_input() से multimedia file खोलना
avformat_find_stream_info() से file के भीतर stream information का analysis करना
- हर stream का time base, frame rate, start time, duration, type, FourCC code output करना
avformat_close_input() से file बंद करना और memory free करना
-
codec खोज और initialization
avcodec_find_decoder() से AVStream के codec ID के अनुरूप decoder खोजना
- video stream के मामले में resolution (width, height), audio stream के मामले में channel count और sample rate output करना
avcodec_alloc_context3() से AVCodecContext बनाना
avcodec_parameters_to_context() से stream के codec parameters को decoder context पर लागू करना
avcodec_open2() से decoder खोलना
-
packet reading और decoding
AVPacket और AVFrame structures को क्रमशः encoded packet और decoded frame को store करने के लिए allocate करना
av_read_frame() से input file से packets को क्रमवार पढ़ना
- packet के stream_index के जरिए यह पहचानना कि वह किस stream से आया है
- चुनी गई video stream (
first_video_stream_index) के packets ही decoder को भेजना
avcodec_send_packet() से packet को decoder तक पहुँचाना
avcodec_receive_frame() से decoded frames को बार-बार receive करना
- हर frame का number, type (I/P/B), format, PTS, keyframe है या नहीं output करना
av_packet_unref() से packet memory को reuse करना
- सारी processing पूरी होने पर
av_packet_free(), av_frame_free(), avcodec_free_context(), avformat_close_input() से memory free करना
-
execution और result example
- example code GitHub repository में उपलब्ध है
- meson और ninja की मदद से build किया जा सकता है (
pip3 install meson ninja)
meson setup build चलाने पर FFmpeg अपने-आप download और configure हो जाता है
ninja -C build से build करने के बाद ./build/ffmpeg-101 sample.mp4 से run करें
- execution result में file format, stream information (video/audio), codec, resolution, sample rate, हर packet का PTS और decoded frame information output होती है
-
output example summary
- video stream: H.264 (avc1), resolution 206x80, frame rate 30fps
- audio stream: AAC (mp4a), 2 channels, 44.1kHz
- हर packet का PTS और frame type (I/P) क्रम से दिखाया जाता है, और decoding प्रक्रिया console पर output होती है
build और execution environment
- ज़रूरी tools: Python, pip, meson, ninja
- installation command:
pip3 install meson ninja
-
build प्रक्रिया
- example archive file को
ffmpeg-101 folder में extract करें
meson setup build चलाएँ
ninja -C build से build करें
./build/ffmpeg-101 sample.mp4 से run करें
- अगर FFmpeg system में install नहीं है, तो यह अपने-आप download और configure हो जाएगा
अभी कोई टिप्पणी नहीं है.