FFMPEG-BITSTREAM-FILTERS(1) FFMPEG-BITSTREAM-FILTERS(1)

ffmpeg-bitstream-filters - فیلترهای جریان بیت در FFmpeg

این سند فیلترهای جریان بیت ارائه‌شده توسط کتابخانه libavcodec را شرح می‌دهد.

یک فیلتر جریان بیت روی داده‌های جریان کدگذاری‌شده عمل می‌کند و اصلاحات در سطح جریان بیت را بدون انجام رمزگشایی انجام می‌دهد.

هنگامی که بیلد FFmpeg خود را پیکربندی می‌کنید، تمامی فیلترهای جریان بیت پشتیبانی‌شده به طور پیش‌فرض فعال هستند. می‌توانید با استفاده از گزینه پیکربندی "--list-bsfs" فهرستی از تمام موارد موجود را مشاهده کنید.

می‌توانید تمامی فیلترهای جریان بیت را با استفاده از گزینه پیکربندی "--disable-bsfs" غیرفعال کنید، و هر فیلتر جریان بیت را با استفاده از گزینه "--enable-bsf=BSF" به صورت گزینشی فعال نمایید، یا یک فیلتر جریان بیت مشخص را با استفاده از گزینه "--disable-bsf=BSF" غیرفعال کنید.

گزینه "-bsfs" در ابزارهای ff* فهرستی از تمامی فیلترهای جریان بیت پشتیبانی‌شده گنجانده‌شده در بیلد شما را نمایش می‌دهد.

ابزارهای ff* گزینه -bsf را دارند که به ازای هر استریم اعمال می‌شود و فهرستی از فیلترها را که با کاما جدا شده‌اند دریافت می‌کند؛ پارامترهای هر فیلتر پس از علامت '=' به دنبال نام فیلتر می‌آیند.

ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT

در ادامه توضیحات فیلترهای جریان بیت فعلی در دسترس به همراه پارامترهای آن‌ها (در صورت وجود) آورده شده است.

تبدیل جریان بیت MPEG-2/4 AAC ADTS به پیکربندی صوتی ویژه MPEG-4 (Audio Specific Configuration).

این فیلتر یک MPEG-4 AudioSpecificConfig از روی هدر MPEG-2/4 ADTS ایجاد کرده و هدر ADTS را حذف می‌کند.

این فیلتر برای نمونه هنگام کپی کردن یک استریم AAC از یک ظرف خام ADTS AAC یا کانتینر MPEG-TS به MP4A-LATM، به یک فایل FLV، یا به فایل‌های MOV/MP4 و فرمت‌های مرتبط مانند 3GP یا M4A مورد نیاز است. لطفاً توجه داشته باشید که این فیلتر به صورت خودکار برای MP4A-LATM و MOV/MP4 و فرمت‌های مرتبط درج می‌شود.

اصلاح متادیتای تعبیه‌شده در یک استریم AV1.

درج یا حذف OBUهای جداکننده زمانی (temporal delimiter) در تمام واحدهای زمانی استریم.
درج یک TD در ابتدای هر TU که از قبل فاقد آن است.
حذف TD از ابتدای هر TU که دارای آن است.
تنظیم فیلدهای توصیف رنگ در استریم (بخش 6.4.2 استاندارد AV1 را ببینید).
تنظیم محدوده رنگ در استریم (بخش 6.4.2 استاندارد AV1 را ببینید؛ توجه داشته باشید که این فیلد را نمی‌توان برای استریم‌هایی که از مشخصات اصلی BT.709، ویژگی انتقال sRGB و ضرایب ماتریس همانی (RGB) استفاده می‌کنند تنظیم کرد).
محدوده محدود (Limited range).
محدوده کامل (Full range).
تنظیم مکان نمونه کروما در استریم (بخش 6.4.2 استاندارد AV1 را ببینید). این فیلد تنها برای استریم‌های 4:2:0 قابل تنظیم است.
موقعیت چپ (منطبق بر پیش‌فرض در MPEG-2 و H.264).
موقعیت بالا-چپ.
تنظیم نرخ تیک (time_scale / num_units_in_display_tick) در اطلاعات زمان‌بندی هدر دنباله (sequence header).
تنظیم تعداد تیک‌ها در هر تصویر برای مشخص کردن این که استریم دارای نرخ فریم ثابت است. در صورتی که tick_rate نیز تنظیم نشده باشد، نادیده گرفته می‌شود.
حذف OBUهای پدینگ (Padding OBUs).

حذف پدینگ صفر در انتهای یک بسته (packet).

استخراج هسته اصلی از یک استریم DCA/DTS، با صرف‌نظر از پسوندهایی مانند DTS-HD.

دستکاری متادیتای Dolby Vision در یک جریان بیت HEVC/AV1، با امکان اختیاری فعال‌سازی فشرده‌سازی متادیتا.

در صورت فعال بودن، تمامی متادیتای Dolby Vision (رکورد پیکربندی + بلوک‌های داده RPU) از استریم حذف می‌شوند.
کدام سطح فشرده‌سازی فعال شود.
بدون فشرده‌سازی متادیتا.
طرح فشرده‌سازی محدود متادیتا. باید با اکثر دستگاه‌ها سازگار باشد. این حالت پیش‌فرض است.
فشرده‌سازی گسترش‌یافته متادیتا. دستگاه‌ها ملزم به پشتیبانی از آن نیستند. توجه داشته باشید که این سطح در حال حاضر در libavcodec رفتاری همانند limited دارد.

تفکیک یک جریان بیت چندلایه‌ای HEVC با پروفایل ۷ دالبی ویژن (Dolby Vision Profile 7). پروفایل ۷ جریان بیت HEVC لایه ارتقا (enhancement-layer) را به صورت درهم‌تنیده داخل واحدهای دسترسی لایه پایه حمل می‌کند که درون واحدهای NAL مشخص‌نشده توسط کاربر از نوع ۶۳ (UNSPEC63) بسته‌بندی شده‌اند، و متادیتای RPU نیز به عنوان یک NAL مشخص‌نشده توسط کاربر از نوع ۶۲ (UNSPEC62) در کنار آن قرار دارد.

کدام مؤلفه‌های Dolby Vision در جریان بیت خروجی حفظ شوند.
تنها لایه پایه: حذف تمام UNSPEC63 (لایه EL) و تمام UNSPEC62 (متادیتای RPU). خروجی یک استریم ساده HEVC بدون هیچ نشانگر Dolby Vision خواهد بود. این حالت پیش‌فرض است.
لایه پایه به همراه حفظ NAL مربوط به RPU.
تنها لایه ارتقا: برای هر NAL از نوع UNSPEC63، هدر خارجی دو بایتی NAL حذف شده و بار داده داخلی صادر می‌شود. نتیجه یک جریان بیت مستقل HEVC است. واحد UNSPEC62 (RPU) حذف می‌شود.
لایه ارتقا با حفظ عین به عین NALهای RPU. همانند el، اما NALهای RPU از نوع UNSPEC62 نیز در کنار NALهای بازشده EL صادر می‌شوند.

اضافه کردن extradata به ابتدای بسته‌های فیلترشده به جز زمانی که بسته‌های مذکور دقیقاً با همان extradata که قرار است اضافه شود آغاز شده باشند.

آرگومان اضافی مشخص می‌کند که کدام بسته‌ها باید فیلتر شوند. مقادیر زیر را می‌پذیرد:
افزودن extradata به تمام بسته‌های کلیدی (key packets).
افزودن extradata به تمام بسته‌ها.

اگر مشخص نشود، پیش‌فرض k در نظر گرفته می‌شود.

برای نمونه دستور ffmpeg زیر یک هدر سراسری را در بسته‌های H.264 تولیدشده توسط اینکودر "libx264" اجبار می‌کند (و در نتیجه هدرهای بسته‌های فردی را غیرفعال می‌سازد)، اما با افزودن هدر ذخیره‌شده در extradata به بسته‌های کلیدی، آن‌ها را اصلاح می‌نماید:

ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts

بلوک‌هایی در DV که به عنوان آسیب‌دیده علامت‌گذاری شده‌اند با بلوک‌هایی با رنگ مشخص‌شده جایگزین می‌شوند.

رنگی که بلوک‌های آسیب‌دیده با آن جایگزین می‌شوند.
یک ماسک ۱۶ بیتی که مشخص می‌کند کدام یک از ۱۶ مقدار ممکن وضعیت خطا باید با بلوک‌های رنگی جایگزین شوند. 0xFFFE مقدار پیش‌فرضی است که تمامی مقادیر وضعیت خطای غیر صفر را جایگزین می‌کند.
بدون خطا، بدون پنهان‌سازی (concealment).
خطا، بدون پنهان‌سازی.
رزرو شده.
خطا یا پنهان‌سازی.
رزرو نشده.
کد وضعیت خطای خاص.

صفحات ۴۴-۴۶ یا بخش 5.5 از پیوند زیر را ببینید: http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf

استخراج هسته از یک استریم E-AC-3، با صرف‌نظر از کانال‌های اضافی.

تبدیل یک استریم "EIA_608" به یک استریم داده "SMPTE_436M_ANC"، با بسته‌بندی زیرنویس‌های بسته (closed captions) در بسته‌های CTA-708 CDP VANC.

انتخاب شماره خطی که بسته‌های VANC تولیدشده باید در آن قرار گیرند. معمولاً خط ۹ (پیش‌فرض) یا ۱۱ مد نظر است.
انتخاب نوع بسته‌بندی SMPTE 436M، پیش‌فرض vanc_frame است. مقادیر زیر را می‌پذیرد:
فریم VANC (فریم درهم‌بافته یا پیش‌رونده بخش‌بندی‌شده).
انتخاب کدگذاری نمونه SMPTE 436M، پیش‌فرض 8bit_luma است. مقادیر زیر را می‌پذیرد:
8bit_luma
نمونه‌های روشنایی (luma) مؤلفه ۸ بیتی.
8bit_color_diff
نمونه‌های تفاضل رنگ مؤلفه ۸ بیتی.
8bit_luma_and_color_diff
نمونه‌های روشنایی و تفاضل رنگ مؤلفه ۸ بیتی.
10bit_luma
نمونه‌های روشنایی مؤلفه ۱۰ بیتی.
10bit_color_diff
نمونه‌های تفاضل رنگ مؤلفه ۱۰ بیتی.
10bit_luma_and_color_diff
نمونه‌های روشنایی و تفاضل رنگ مؤلفه ۱۰ بیتی.
8bit_luma_parity_error
نمونه‌های روشنایی مؤلفه ۸ بیتی همراه با خطای پاریتی.
8bit_color_diff_parity_error
نمونه‌های تفاضل رنگ مؤلفه ۸ بیتی همراه با خطای پاریتی.
8bit_luma_and_color_diff_parity_error
نمونه‌های روشنایی و تفاضل رنگ مؤلفه ۸ بیتی همراه با خطای پاریتی.
مقدار اولیه فیلدهای عدد صحیح بدون علامت ۱۶ بیتی "cdp_hdr_sequence_cntr" و "cdp_ftr_sequence_cntr" در CDP. پیش‌فرض 0 است.
تنظیم فیلد "cdp_frame_rate" در CDP. این گزینه در عمل زمان‌بندی استریم داده را تغییر نمی‌دهد، بلکه صرفاً مقادیر درج‌شده در آن فیلد را در بسته‌های تولیدشده CDP تغییر می‌دهد. پیش‌فرض 30000/1001 است.

استخراج extradata درون‌باندی (in-band extradata).

برخی کدک‌ها اجازه می‌دهند هدرهای بلندمدت (مانند هدرهای دنباله MPEG-2 یا (VPS/)SPS/PPS در H.264/HEVC) یا به صورت «درون‌باندی» (یعنی به عنوان بخشی از جریان بیت حاوی فریم‌های کدگذاری‌شده) یا «برون‌باندی» (مانند سطح کانتینر) ارسال شوند. این حالت اخیر در اصطلاحات FFmpeg با نام «extradata» شناخته می‌شود.

این فیلتر جریان بیت هدرهای درون‌باندی را شناسایی کرده و آن‌ها را به عنوان extradata در دسترس قرار می‌دهد.

هنگامی که این گزینه فعال باشد، هدرهای بلندمدت پس از استخراج از جریان بیت حذف می‌شوند.

حذف واحدهایی با انواعی در مجموعه مشخص‌شده یا خارج از آن از استریم.

فهرستی از انواع واحد یا محدوده‌ای از انواع واحد برای عبور دادن، در حالی که همه موارد دیگر حذف می‌شوند. این فهرست با '|' از مقادیر نوع واحد یا محدوده‌ای از مقادیر با '-' مشخص می‌شود.
همانند pass_types، با این تفاوت که واحدهای موجود در مجموعه داده‌شده حذف شده و تمام موارد دیگر عبور داده می‌شوند.

انواع مورد استفاده توسط pass_types و remove_types متناظر هستند با انواع واحد NAL به نام (nal_unit_type) در H.264، HEVC و H.266 (جدول 7-1 در مشخصات H.264 و HEVC یا جدول 5 در مشخصات H.266 را ببینید)، مقادیر نشانگر (marker) برای JPEG (بدون پیشوند 0xFF) و کدهای شروع بدون پیشوند کد شروع (یعنی بایت بعد از 0x000001) برای MPEG-2. برای VP8 و VP9، هر واحد دارای نوع صفر است.

داده اضافی (Extradata) توسط این تبدیل بدون تغییر باقی می‌ماند، اما توجه داشته باشید اگر استریم شامل مجموعه‌های پارامتر درون‌خطی باشد، در صورت حذف آن‌ها ممکن است خروجی غیرقابل استفاده شود.

برای نمونه، جهت حذف تمامی واحدهای NAL غیر VCL از یک استریم H.264:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT

جهت حذف تمامی AUDها، SEI و پرکننده‌ها (filler) از یک استریم H.265:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT

جهت حذف تمامی داده‌های کاربر از یک استریم MPEG-2، شامل زیرنویس‌های بسته (Closed Captions):

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT

جهت حذف تمامی SEI از یک استریم H264، شامل زیرنویس‌های بسته:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT

جهت حذف تمامی پیشوندها و پسوندهای SEI از یک استریم HEVC، شامل زیرنویس‌های بسته و HDR پویا:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT

استخراج بخش Rgb یا Alpha از یک فایل HAPQA، بدون فشرده‌سازی مجدد، به منظور ایجاد یک فایل HAPQ یا HAPAlphaOnly.

بافتی را که باید نگه داشته شود مشخص می‌کند.

تبدیل HAPQA به HAPQ:

ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov

تبدیل HAPQA به HAPAlphaOnly:

ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov

اصلاح متادیتای تعبیه‌شده در یک استریم H.264.

درج یا حذف واحدهای NAL از نوع AUD در تمام واحدهای دسترسی استریم.

پیش‌فرض pass است.

تنظیم نسبت ابعاد نمونه استریم در پارامترهای VUI. جدول E-1 در H.264 را ببینید.
تنظیم این که آیا استریم برای نمایش با overscan مناسب است یا خیر (بخش E.2.1 در H.264 را ببینید).
تنظیم فرمت ویدیو در استریم (بخش E.2.1 و جدول E-2 در H.264 را ببینید).
تنظیم توصیف رنگ در استریم (بخش E.2.1 و جدول‌های E-3، E-4 و E-5 در H.264 را ببینید).
تنظیم مکان نمونه کروما در استریم (بخش E.2.1 و شکل E-1 در H.264 را ببینید).
تنظیم نرخ تیک (time_scale / num_units_in_tick) در پارامترهای VUI. این کوچک‌ترین واحد زمانی قابل نمایش در استریم است و در بسیاری از موارد نرخ فیلد استریم را نشان می‌دهد (دو برابر نرخ فریم).
تنظیم این که آیا استریم دارای نرخ فریم ثابت است یا خیر - معمولاً نشان می‌دهد که نرخ فریم دقیقاً نصف نرخ تیک است، اما معنای دقیق به درهم‌بافتگی و ساختار تصویر وابسته است (بخش E.2.1 و جدول E-6 در H.264 را ببینید).
صفر کردن پرچم‌های constraint_set4_flag و constraint_set5_flag در SPS. این بیت‌ها در نسخه قبلی مشخصات H.264 رزرو شده بودند، و از این رو برخی دیکودرهای سخت‌افزاری نیاز دارند که این‌ها صفر باشند. نتیجه صفر کردن این‌ها همچنان یک جریان بیت معتبر است.
تنظیم آفست‌های برش فریم در SPS. این مقادیر در صورتی که استریم از قبل برش داده شده باشد، جایگزین مقادیر فعلی خواهند شد.

این فیلدها بر حسب پیکسل تنظیم می‌شوند. توجه داشته باشید که اگر کروما ساب‌سمپل شده باشد یا استریم درهم‌بافته باشد، ممکن است برخی اندازه‌ها قابل نمایش نباشند (بخش 7.4.2.1.1 در H.264 را ببینید).

درج یک رشته به عنوان داده کاربری ثبت‌نشده SEI (unregistered user data). آرگومان باید به فرم UUID+string باشد که در آن UUID به صورت ارقام هگزادسیمال است که احتمالاً با خط تیره جدا شده‌اند، و رشته می‌تواند هر چیزی باشد.

برای نمونه، 086f3693-b7b3-4f2c-9653-21492feee5b8+hello رشته «hello» را که به UUID داده‌شده مرتبط است درج می‌کند.

حذف هر دو واحد NAL پرکننده و پیام‌های پرکننده SEI.
درج، استخراج یا حذف پیام‌های SEI جهت نمایش (Display orientation). برای نحو و معناشناسی، بخش‌های D.1.27 و D.2.27 استاندارد H.264 را ببینید.

پیش‌فرض pass است.

حالت درج (insert) همراه با گزینه‌های "rotate" و "flip" کار می‌کند. هرگونه پیام از پیش موجود جهت نمایش در حالت‌های insert یا remove حذف خواهد شد. حالت استخراج (extract) ماتریس نمایش را به عنوان داده جانبی (side data) به بسته پیوست می‌کند.

تنظیم چرخش در SEI جهت نمایش (زاویه پادساعت‌گرد بر حسب درجه). محدوده از -360 تا +360 است. پیش‌فرض NaN است.
تنظیم وارونگی (flip) در SEI جهت نمایش.

پیش‌فرض تنظیم‌نشده است.

تنظیم سطح (level) در SPS. به بخش A.3 و جدول‌های A-1 تا A-5 در H.264 مراجعه کنید.

آرگومان باید نام یک سطح (برای نمونه 4.2)، یک مقدار level_idc (برای نمونه 42)، یا نام ویژه auto باشد که نشان می‌دهد فیلتر باید تلاش کند سطح را از ویژگی‌های استریم ورودی حدس بزند.

تبدیل یک جریان بیت H.264 از حالت طول با پیشوند (length prefixed) به حالت کد شروع با پیشوند (start code prefixed)، مطابق با تعریف در پیوست B از مشخصات ITU-T H.264.

این تبدیل برای برخی فرمت‌های پخش زنده، معمولاً فرمت استریم انتقال MPEG-2 (میکسر "mpegts") مورد نیاز است.

برای نمونه جهت ریمکس کردن یک فایل MP4 حاوی استریم H.264 به فرمت mpegts با ffmpeg، می‌توانید از دستور زیر استفاده کنید:

ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts

لطفاً توجه داشته باشید که این فیلتر برای فرمت‌های خروجی MPEG-TS (میکسر "mpegts") و خام H.264 (میکسر "h264") به صورت خودکار درج می‌شود.

این فیلتر یک اصلاح ویژه را روی برخی استریم‌های H264 دیسک بلو-ری BDMV که شامل PPSهای زائد هستند اعمال می‌کند. این PPSها پارامترهای نامربوط استریم را تغییر می‌دهند و باعث سردرگمی سایر تبدیلات می‌شوند که به extradata صحیح نیاز دارند.

اینکودر مورد استفاده در این استریم‌های متأثر، PPSهای اضافی را در سرتاسر استریم اضافه می‌کند و مقدار اولیه QP و فعال بودن یا نبودن پیش‌بینی وزنی را تغییر می‌دهد. این امر پس از کپی کردن استریم در کانتینری با هدر سراسری مشکلاتی ایجاد می‌کند، زیرا PPS آغازین برای ادامه استریم مناسب نیست. به عنوان یک اثر جانبی، برای نمونه، پرش در ویدیو (seeking) تا زمان ظاهر شدن یک PPS جدید خروجی به‌هم‌ریخته ارائه می‌دهد.

این فیلتر جریان بیت (BSF) این PPSهای اضافی را حذف کرده و هدرهای برش را بازنویسی می‌کند به گونه‌ای که استریم از یک PPS راهنمای منفرد در هدر سراسری استفاده کند، که مشکل را برطرف می‌سازد.

اصلاح متادیتای تعبیه‌شده در یک استریم HEVC.

درج یا حذف واحدهای NAL از نوع AUD در تمام واحدهای دسترسی استریم.
تنظیم نسبت ابعاد نمونه در پارامترهای VUI استریم.
تنظیم فرمت ویدیو در استریم (بخش E.3.1 و جدول E.2 در H.265 را ببینید).
تنظیم توصیف رنگ در استریم (بخش E.3.1 و جدول‌های E.3، E.4 و E.5 در H.265 را ببینید).
تنظیم مکان نمونه کروما در استریم (بخش E.3.1 و شکل E.1 در H.265 را ببینید).
تنظیم نرخ تیک در پارامترهای VPS و VUI به صورت (time_scale / num_units_in_tick). همراه با num_ticks_poc_diff_one، این گزینه می‌تواند یک نرخ فریم ثابت در استریم تنظیم کند. توجه داشته باشید که اگر استریم در یک کانتینر باشد، احتمالاً توسط پارامترهای کانتینر نادیده گرفته می‌شود.
تنظیم poc_proportional_to_timing_flag در VPS و VUI و استفاده از این مقدار برای تنظیم num_ticks_poc_diff_one_minus1 (بخش‌های 7.4.3.1 و E.3.1 در H.265 را ببینید). اگر tick_rate نیز تنظیم نشده باشد، نادیده گرفته می‌شود.
تنظیم آفست‌های برش پنجره انطباق (conformance window) در SPS. این مقادیر در صورتی که استریم از قبل برش داده شده باشد، جایگزین مقادیر فعلی خواهند شد.

این فیلدها بر حسب پیکسل تنظیم می‌شوند. توجه داشته باشید که در صورت ساب‌سمپل بودن کروما ممکن است برخی اندازه‌ها قابل نمایش نباشند (بخش 7.4.3.2.1 در H.265).

تنظیم عرض و ارتفاع پس از برش.
تنظیم سطح (level) در VPS و SPS. بخش A.4 و جدول‌های A.6 و A.7 در H.265 را ببینید.

آرگومان باید نام یک سطح (برای نمونه 5.1)، یک مقدار general_level_idc (برای نمونه 153 برای سطح 5.1)، یا نام ویژه auto باشد که نشان می‌دهد فیلتر باید تلاش کند سطح را از ویژگی‌های استریم ورودی حدس بزند.

تبدیل یک جریان بیت HEVC/H.265 از حالت با پیشوند طول به حالت با پیشوند کد شروع (همان‌طور که در پیوست B از مشخصات ITU-T H.265 تعریف شده است).

این تبدیل برای برخی فرمت‌های پخش زنده، معمولاً فرمت استریم انتقال MPEG-2 (میکسر "mpegts") مورد نیاز است.

برای نمونه جهت ریمکس کردن یک فایل MP4 حاوی استریم HEVC به فرمت mpegts با ffmpeg، می‌توانید از دستور زیر استفاده کنید:

ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts

لطفاً توجه داشته باشید که این فیلتر به صورت خودکار برای فرمت‌های خروجی MPEG-TS (میکسر "mpegts") و خام HEVC/H.265 (میکسر "h265" یا "hevc") درج می‌شود.

جریان بیت را اصلاح می‌کند تا در MOV قرار گیرد و توسط دیکودر Final Cut Pro قابل استفاده باشد. این فیلتر تنها برای کدک mpeg2video اعمال می‌شود، و احتمالاً برای Final Cut Pro 7 و نسخه‌های جدیدتر با داشتن -tag:v مناسب نیازی به آن نیست.

برای نمونه، برای ریمکس کردن ۳۰ مگابایت بر ثانیه NTSC IMX به MOV:

ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov

تبدیل بسته‌های MJPEG/AVI1 به بسته‌های کامل JPEG/JFIF.

فرمت MJPEG یک کدک ویدیویی است که در آن هر فریم ویدیو در اصل یک تصویر JPEG است. فریم‌های مجزا را می‌توان بدون اتلاف استخراج کرد، مثلاً با:

ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg

متأسفانه این تکه‌ها تصاویر ناقص JPEG هستند، زیرا بخش DHT مورد نیاز برای دیکود را ندارند. به نقل از http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml:

اوری لی (Avery Lee)، در سال ۲۰۰۱ در گروه خبری rec.video.desktop نوشت: «MJPEG، یا حداقل MJPEG در فایل‌های AVI دارای کد چهارنویسه‌ای (fourcc) از نوع MJPG، یک JPEG محدودشده با یک جدول هافمن ثابت -- و *حذف‌شده* -- است. تصویر JPEG باید در فضای رنگی YCbCr باشد، باید 4:2:2 باشد، و باید از انکود هافمن پایه استفاده کند، نه محاسباتی یا پیش‌رونده. . . . در واقع می‌توانید فریم‌های MJPEG را استخراج کرده و آن‌ها را با یک دیکودر معمولی JPEG رمزگشایی کنید، اما باید بخش DHT را به آن‌ها اضافه نمایید، در غیر این صورت دیکودر هیچ اطلاعی از نحوه از حالت فشرده خارج کردن داده‌ها نخواهد داشت. جدول دقیق مورد نیاز در مشخصات OpenDML ارائه شده است.»

این فیلتر جریان بیت، هدر فریم‌های استخراج‌شده از یک استریم MJPEG را (که شناسه هدر AVI1 را حمل می‌کنند و فاقد بخش DHT هستند) وصله می‌کند تا تصاویر JPEG کاملاً استاندارد تولید شوند.

ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
exiftran -i -9 frame*.jpg
ffmpeg -i frame_%d.jpg -c:v copy rotated.avi

افزودن یک هدر MJPEG A به جریان بیت، برای امکان‌پذیر ساختن رمزگشایی توسط Quicktime.

استخراج یک فایل متنی قابل نمایش از زیرنویس‌های MOV، با حذف هدر متادیتا از هر بسته زیرنویس.

همچنین فیلتر text2movsub را ببینید.

اصلاح متادیتای تعبیه‌شده در یک استریم MPEG-2.

تنظیم نسبت ابعاد نمایش در استریم.

مقادیر ثابت زیر پشتیبانی می‌شوند:

4/3
16/9
221/100

هر مقدار دیگری باعث می‌شود که به جای آن پیکسل‌های مربعی اعلام شوند (بخش 6.3.3 و جدول 6-3 در H.262 را ببینید).

تنظیم نرخ فریم در استریم. این مقدار از جدولی از مقادیر شناخته‌شده همراه با یک ضریب و مقسوم‌علیه کوچک ساخته می‌شود - اگر مقدار ارائه‌شده دقیقاً قابل نمایش نباشد، نزدیک‌ترین مقدار قابل نمایش استفاده خواهد شد (بخش 6.3.3 و جدول 6-4 در H.262 را ببینید).
تنظیم فرمت ویدیو در استریم (بخش 6.3.6 و جدول 6-6 در H.262 را ببینید).
تنظیم توصیف رنگ در استریم (بخش 6.3.6 و جدول‌های 6-7، 6-8 و 6-9 در H.262 را ببینید).

باز کردن فریم‌های B بسته‌بندی‌شده به سبک DivX.

فریم‌های B بسته‌بندی‌شده به سبک DivX فرمت استاندارد و معتبر MPEG-4 نیستند و صرفاً راهکاری برای زیرسیستم معیوب Video for Windows بودند. آن‌ها فضای بیشتری مصرف می‌کنند، می‌توانند باعث مشکلات جزئی همگام‌سازی AV شوند، برای دیکود به توان CPU بیشتری نیاز دارند (مگر اینکه پخش‌کننده صف تصاویر دیکودشده داشته باشد تا سبک فریم در بسته 2,0,2,0 را جبران کند) و اگر در کانتینرهای استانداردی مانند mp4 یا mpeg-ps/ts کپی شوند مشکل‌ساز می‌شوند، زیرا ممکن است دیکودرهای MPEG-4 قادر به دیکود آن‌ها نباشند چون MPEG-4 معتبر نیستند.

برای نمونه جهت اصلاح یک فایل AVI حاوی استریم MPEG-4 با فریم‌های B بسته‌بندی‌شده به سبک DivX با استفاده از ffmpeg، می‌توانید از دستور زیر استفاده کنید:

ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi

محتوای بسته‌ها را مخدوش می‌کند یا به سادگی آن‌ها را بدون آسیب رساندن به کانتینر دور می‌اندازد (drop). می‌تواند برای تست تصادفی (fuzzing) یا آزمودن تاب‌آوری/پنهان‌سازی خطا استفاده شود.

پارامترها:

عبارتی را می‌پذیرد که ارزیابی آن به ازای هر بسته تعیین می‌کند هر چند وقت یک‌بار بایت‌ها در آن بسته تغییر داده شوند. مقداری زیر ۰ به فرکانس متغیر منجر خواهد شد. پیش‌فرض 0 است که منجر به عدم تغییر می‌شود. با این حال، اگر نه amount و نه drop مشخص نشده باشند، amount روی -1 تنظیم خواهد شد. برای متغیرهای پذیرفته‌شده به زیر مراجعه کنید.
عبارتی را می‌پذیرد که به ازای هر بسته ارزیابی می‌شود و مقدار آن مشخص می‌کند که آیا آن بسته دور انداخته شود یا خیر. ارزیابی به یک مقدار مثبت منجر به دور انداختن بسته می‌شود. ارزیابی به یک مقدار منفی منجر به شانس متغیر برای دور انداخته شدن آن می‌شود که تقریباً نسبت معکوس با بزرگی مقدار دارد. پیش‌فرض 0 است که به معنای دور نینداختن است. برای متغیرهای پذیرفته‌شده به زیر مراجعه کنید.
یک عدد صحیح غیرمنفی را می‌پذیرد که شانس متغیری را برای دور انداخته شدن آن اختصاص می‌دهد که تقریباً نسبت معکوس با مقدار دارد. پیش‌فرض 0 است که منجر به دور نینداختن می‌شود. این گزینه برای سازگاری با گذشته حفظ شده است و معادل تنظیم drop به یک مقدار منفی با همان بزرگی است، یعنی "dropamount=4" مشابه "drop=-4" است. اگر drop نیز مشخص شده باشد نادیده گرفته می‌شود.

هر دو گزینه "amount" و "drop" عبارات حاوی متغیرهای زیر را می‌پذیرند:

اندیس بسته، با شروع از صفر.
مبنای زمان (timebase) برای برچسب‌های زمانی بسته.
برچسب زمان ارائه (presentation timestamp) بسته.
برچسب زمان دیکود (decoding timestamp) بسته.
ثابت نمایانگر AV_NOPTS_VALUE.
نخستین مقدار PTS غیر از AV_NOPTS_VALUE که در استریم دیده شده است.
نخستین مقدار DTS غیر از AV_NOPTS_VALUE که در استریم دیده شده است.
مدت‌زمان بسته، در واحدهای مبنای زمان.
موقعیت بسته در ورودی؛ در صورت نامشخص بودن یا عدم تنظیم ممکن است -1 باشد.
اندازه بسته، بر حسب بایت.
این که آیا بسته به عنوان یک فریم کلیدی (keyframe) علامت‌گذاری شده است یا خیر.
یک عدد صحیح شبه‌تصادفی، که عمدتاً از محتوای بار داده بسته مشتق شده است.

نمونه‌ها (Examples)

اعمال تغییر روی هر بایت اما بدون دور انداختن هیچ بسته‌ای:

ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv

دور انداختن تمام بسته‌های ویدیویی که به عنوان فریم کلیدی علامت‌گذاری نشده‌اند پس از برچسب زمان ۳۰ ثانیه، اما بدون تغییر در هیچ‌یک از بسته‌های باقی‌مانده:

ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(pts*tb\,30)*not(key)' output.mkv

دور انداختن یک ثانیه صوت در هر ۱۰ ثانیه و افزودن مقداری نویز تصادفی به بقیه:

ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(pts*tb\,10)\,9\,10)' output.mkv

این فیلتر جریان بیت بسته‌ها را بدون تغییر عبور می‌دهد.

بسته‌بندی مجدد صدای PCM به تعداد ثابتی از نمونه‌ها در هر بسته یا نرخ ثابت بسته در هر ثانیه. این شبیه به فیلتر صوتی asetnsamples است اما به جای فریم‌های صوتی، روی بسته‌های صوتی کار می‌کند.

تنظیم تعداد نمونه‌ها در هر بسته صوتی خروجی. این تعداد به عنوان تعداد نمونه‌ها به ازای هر کانال در نظر گرفته می‌شود. مقدار پیش‌فرض 1024 است.
اگر روی ۱ تنظیم شود، فیلتر آخرین بسته صوتی را با سکوت پر می‌کند (pad)، به طوری که تعداد نمونه‌های آن مشابه (یا تقریباً مشابه، frame_rate را ببینید) بسته‌های قبلی باشد. مقدار پیش‌فرض 1 است.
این گزینه باعث می‌شود فیلتر به جای تعداد ثابتی نمونه در هر بسته، تعداد ثابتی بسته در هر ثانیه خروجی دهد. اگر نرخ نمونه صوتی بر نرخ فریم بخش‌پذیر نباشد، تعداد نمونه‌ها ثابت نخواهد بود بلکه اندکی تغییر می‌کند تا هر بسته تا حد ممکن نزدیک به مرز فریم آغاز شود. استفاده از این گزینه نسبت به nb_out_samples اولویت دارد.

می‌توانید با استفاده از گزینه frame_rate الگوی شناخته‌شده 1602-1601-1602-1601-1602 صدای 48kHz را برای نرخ فریم NTSC ایجاد کنید:

ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -

ادغام دنباله‌ای از بخش‌های زیرنویس PGS منتهی به یک بخش «پایان مجموعه نمایش» (end of display set) در یک بسته واحد.

این برای برخی کانتینرهایی که از زیرنویس‌های PGS پشتیبانی می‌کنند (میکسر "matroska") مورد نیاز است.

اصلاح متادیتای ویژگی‌های رنگ تعبیه‌شده در استریم prores.

تنظیم مشخصات اصلی رنگ (color primaries). مقادیر در دسترس عبارتند از:
حفظ همان ویژگی مشخصات اصلی رنگ (پیش‌فرض).
BT601 625
BT601 525
DCI P3
P3 D65
تنظیم مشخصه انتقال رنگ (color transfer). مقادیر در دسترس عبارتند از:
حفظ همان ویژگی مشخصه انتقال (پیش‌فرض).
BT 601, BT 709, BT 2020
SMPTE ST 2084
ARIB STD-B67
تنظیم ضریب ماتریس (matrix coefficient). مقادیر در دسترس عبارتند از:
حفظ همان ویژگی فضای رنگ (پیش‌فرض).
BT 601

تنظیم فضای رنگ Rec709 برای هر فریم فایل:

ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov

تنظیم پارامترهای Hybrid Log-Gamma برای هر فریم فایل:

ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov

حذف extradata از بسته‌ها.

پارامتر زیر را می‌پذیرد:

مشخص می‌کند که extradata از کدام انواع فریم حذف شود.
حذف extradata تنها از فریم‌های غیرکلیدی.
حذف extradata تنها از فریم‌های کلیدی.
حذف extradata از تمامی فریم‌ها.

تنظیم PTS و DTS در بسته‌ها.

پارامترهای زیر را می‌پذیرد:

تنظیم عبارات برای PTS، DTS یا هر دو.
تنظیم عبارت برای مدت‌زمان (duration).
تنظیم مبنای زمان خروجی.
تنظیم این که آیا فیلدهای زمان پیش از ارزیابی عبارات به مبنای زمان خروجی تعیین‌شده توسط کاربر تبدیل شوند یا خیر. پیش‌فرض 0 است.

عبارات از طریق API ارزیابی (eval API) ارزیابی می‌شوند و می‌توانند شامل ثابت‌های زیر باشند:

شمارش بسته ورودی. با شروع از 0.
برچسب زمان دیمکس در ورودی در صورت وجود گزینه "ts" یا "dts"، یا برچسب زمان ارائه در صورت وجود گزینه "pts".
موقعیت اصلی بسته در فایل، یا تعریف‌نشده در صورتی که برای بسته فعلی نامشخص باشد.
برچسب زمان دیمکس در ورودی.
برچسب زمان ارائه در ورودی.
مدت‌زمان در ورودی.
مقدار DTS نخستین بسته.
مقدار PTS نخستین بسته.
مقدار DTS ورودی قبلی.
مقدار PTS ورودی قبلی.
مدت‌زمان ورودی قبلی.
مقدار DTS خروجی قبلی.
مقدار PTS خروجی قبلی.
مدت‌زمان خروجی قبلی.
مقدار DTS ورودی بعدی.
مقدار PTS ورودی بعدی.
مدت‌زمان ورودی بعدی.
مبنای زمانی که فیلدهای زمانی در آن بیان می‌شوند. در صورت فعال بودن prescale مبنای زمان خروجی تعیین‌شده توسط کاربر است، و در غیر این صورت مبنای زمان ورودی است.
مبنای زمان خروجی.
نرخ نمونه‌برداری استریمی که بسته به آن تعلق دارد.
ثابت AV_NOPTS_VALUE.

برای نمونه، جهت برابر قرار دادن PTS با DTS (در صورت وجود فریم‌های B توصیه نمی‌شود):

ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv

ثبت اطلاعات پایه‌ای بسته‌ها در لاگ. عمدتاً برای آزمون، اشکال‌زدایی و توسعه مفید است.

تبدیل یک استریم داده "SMPTE_436M_ANC" به یک استریم "EIA_608"، با استخراج زیرنویس‌های بسته از بسته‌های CTA-708 CDP VANC و نادیده گرفتن تمام داده‌های دیگر.

تبدیل زیرنویس‌های متنی به زیرنویس‌های MOV (همان‌گونه که توسط کدک "mov_text" استفاده می‌شود) همراه با هدرهای متادیتا.

همچنین فیلتر mov2textsub را ببینید.

ثبت خروجی ردگیری حاوی تمامی عناصر ساختاری (syntax elements) در هدرهای استریم کدگذاری‌شده (همه چیز بالاتر از سطح بلوک‌های کدگذاری‌شده منفرد). این گزینه می‌تواند برای اشکال‌زدایی مشکلات سطح پایین استریم مفید باشد.

از AV1، H.264، H.265، (M)JPEG، MPEG-2 و VP9 پشتیبانی می‌کند، اما بسته به بیلد برنامه ممکن است تنها زیرمجموعه‌ای از این موارد در دسترس باشند.

استخراج هسته اصلی از یک استریم TrueHD، با صرف‌نظر از داده‌های ATMOS.

اصلاح متادیتای تعبیه‌شده در یک استریم VP9.

تنظیم مقدار فضای رنگ در هدر فریم. توجه داشته باشید هر فریمی که روی RGB تنظیم شود به صورت ضمنی روی محدوده PC تنظیم خواهد شد و RGB با پروفایل‌های 0 و 2 ناسازگار است.
تنظیم مقدار محدوده رنگ در هدر فریم. توجه داشته باشید که هر مقداری که توسط فضای رنگ تحمیل شود، بر این مقدار تقدم خواهد داشت.

ادغام مجدد فریم‌های نامرئی (alt-ref) در سوپرفریم‌های VP9. این کار ادغام استریم‌های تقسیم‌شده/بخش‌بندی‌شده VP9 را که در آن‌ها فریم alt-ref از همتای مرئی خود جدا شده است، اصلاح می‌کند.

تقسیم سوپرفریم‌های VP9 به فریم‌های تکی.

در صورت داشتن یک استریم VP9 با برچسب‌های زمانی درست اما احتمالاً نامرتب، بسته‌های show-existing-frame اضافی را برای اصلاح ترتیب درج می‌کند.

ffmpeg(1), ffplay(1), ffprobe(1), libavcodec(3)

توسعه‌دهندگان FFmpeg.

برای جزئیات در مورد نویسندگی، به تاریخچه گیت پروژه (https://git.ffmpeg.org/ffmpeg) مراجعه کنید، به عنوان مثال با تایپ دستور git log در دایرکتوری منبع FFmpeg، یا مرور مخزن آنلاین در https://git.ffmpeg.org/ffmpeg.

نگه‌دارنده‌های اجزای خاص در فایل MAINTAINERS در درخت کد منبع فهرست شده‌اند.