Топ питань
Часова шкала
Чат
Перспективи
FFmpeg
З Вікіпедії, вільної енциклопедії
Remove ads
FFmpeg — це комплекс вільних комп'ютерних програм та програмних бібліотек для обробки відео, аудіо та інших мультимедійних файлів і потоків. У його основі лежить сам інструмент командного рядка ffmpeg, призначений для обробки відео та аудіофайлів. Проєкт широко використовується для перекодування форматів, базового редагування (обрізка та конкатенація), масштабування відео, ефектів постпродакшн відео та для дотримання стандартів (SMPTE[en], ITU).
FFmpeg також включає інші інструменти: ffplay, простий медіа програвач та ffprobe — інструмент командного рядка для відображення медіа-інформації. Серед вхідних бібліотек є libavcodec, бібліотека аудіо-/відео- кодеків, яка використовується багатьма комерційними та безкоштовними програмними продуктами, libavformat (Lavf)[3], бібліотека мультиплексування та демуксування аудіо/відео контейнерів, а також libavfilter, бібліотека для покращення та редагування фільтрів за допомогою фільтр-граф, схожий на GStreamer.[4]
FFmpeg є частиною робочого процесу багатьох інших програмних проєктів, а його бібліотеки є основною частиною медіапрогравачів, таких як VLC, також були включені в основу обробки для YouTube і Bilibili.[5] У комплект входять кодери та декодери для багатьох форматів аудіо та відео файлів, що робить його дуже корисним для перекодування поширених і незвичайних медіафайлів.
FFmpeg публікується під LGPL-2.1 та новішої версії або GPL-2.0 та новішої, залежно від того, які параметри ввімкнено.[6]
Remove ads
Історія
Узагальнити
Перспектива
Проєкт був започаткований Фабрісом Белларом (використовуючи псевдонім «Жерар Лантау») у 2000 році, а з 2004 по 2015 рік його очолював Міхаель Нідермайєр. Деякі розробники FFmpeg також були частиною проєкту MPlayer, а сам FFmpeg був розміщений на сервері проєкту MPlayer.
Назва проєкту навіяна групою стандартів відео MPEG разом із «FF» для «швидкої перемотування».[7] У логотипі використовується зигзагоподібний візерунок, який показує, як відеокодеки MPEG обробляють ентропійне кодування.
13 березня 2011 року група розробників FFmpeg вирішила розділити проєкт під назвою Libav.[8][9][10] Подія була пов’язана з проблемою в управлінні проєктами, у якій розробники не погодилися з керівництвом FFmpeg.[11][12]
10 січня 2014 року двоє співробітників Google оголосили, що протягом попередніх двох років у FFmpeg було виправлено понад 1000 помилок за допомогою fuzz-тестування.
У січні 2018 року програму командного рядка ffserver, який є давнім компонентом FFmpeg, було видалено.[13] Розробники відмовилися від програми, посилаючись на високі зусилля по обслуговуванню через використання внутрішніх інтерфейсів прикладного програмування.[14]
Проєкт публікує новий випуск у середньому кожні три місяці. Хоча версії випуску доступні на вебсайт для завантаження, розробники FFmpeg рекомендують користувачам компілювати програмне забезпечення з вихідного коду, використовуючи останню збірку з їх вихідного коду системи контролю версій Git.[15]
Історія кодеків
Наразі в рамках проєкту FFmpeg створено два формати кодування відео з відповідними кодеками та один формат контейнера. Два відеокодеки – це FFV1 (без втрат якості) та Snow (без втрат або з втратами). Розвиток відеокодека Snow зупинився, а його формат бітового потоку ще не завершено, що робить його експериментальним з 2011 року. Власним форматом мультимедійного контейнера є NUT, який більше активно не розвивається, але все ще підтримується.[16]
Влітку 2010 року розробники FFmpeg Фіона Глейзер, Рональд Бултьє та Девід Конрад анонсували декодер ffvp8. За допомогою тестування вони визначили, що ffvp8 швидший, ніж власний декодер Google libvpx.[17] Починаючи з версії 0.6 FFmpeg також підтримує WebM і VP8.[18]
У жовтні 2013 року до FFmpeg були додані власний відеокодек VP9[19], декодер OpenHEVC, декодер високоефективне кодування відео H.265 (відомий ще як HEVC) з відкритим програмним кодом.[20] У 2016 році власний кодер AAC вважався стабільним, що призвело до зняття підтримки двох зовнішніх кодеків AAC від VisualOn та FAAC. FFmpeg 3.0 (під назвою «Einstein») зберіг підтримку для кодера Fraunhofer FDK AAC.[21] Серед помітних змін в порівнянні з попередніми версіями було поліпшено підтримку апаратного стиснення AAC, поліпшене апаратне пришвидшення стиснення інших алгоритмів. Проте було порушено сумісність програмного та двійкового інтерфейсу з попередніми версіями.[22] Починаючи з версії 3.4 «Cantor» FFmpeg підтримує формат зображення FITS.[23] З листопада 2018 року у версії 4.1 «al-Khwarizmi» AV1 може мультиплікувати в MP4, Matroska та WebM.[24][25]
Remove ads
Компоненти
Інструменти командного рядку
- ffmpeg – програма командного рядка для конвертування одного формату аудіо чи відео у інший. Вона також дозволяє захоплювати і кодувати відео в режимі реального часу від декількох апаратних і програмних джерел,[26] таких як карта захоплення ТБ.
- ffplay – простий медіа програвач, який використовує SDL та бібліотеки FFmpeg.
- ffprobe – інструмент командного рядка для зображення медіа інформації (тексту, CSV, XML, JSON), див. також Mediainfo.
Бібліотеки
- libswresample – бібліотека, що містить функції редискретизації аудіо.
- libavresample – бібліотека, що містить функції редискретизації аудіо з проєкту Libav project, подібна до libswresample із бібліотеки ffmpeg.
- libavcodec – бібліотека, що містить усі власні аудіо/відео кодери і декодери FFmpeg. Більшість кодеків розроблені з нуля, щоб забезпечити найкращу продуктивність і можливість повторного використання коду.
- libavformat (Lavf)[27] – бібліотека, що містить мультиплексори і демультиплексори для форматів контейнерів аудіо/відео.
- libavutil – допоміжна бібліотека, що містить функції спільні для різних частин FFmpeg. Ця бібліотека містить хеш-функції, шифри, LZO декомпресор і Base64 кодер/декодер.
- libpostproc – бібліотека, що містить старіші функції пост-обробки відео на базі H.263.
- libswscale – ця бібліотека містить функції для масштабування зображення відео і конвертації колірного простору/формату пікселів.
- libavfilter – є заміною для vhook, що дозволяє перевіряти чи модифікувати відео/аудіо між процесами декодування і кодування. Фільтри були портовані із багатьох проєктів, включаючи MPlayer і AviSynth.
- libavdevice – бібліотека, що містить аудіо/відео io через внутрішні та зовнішні пристрої.
Remove ads
Підтримуване обладнання
Узагальнити
Перспектива
Процесори
FFmpeg моє програмні реалізації алгоритмів стиснення та розпакування відео та аудіо. Таким чином їх можна компілювати та запускати на різних наборах інструкцій процесора.
Багато поширених наборів інструкцій підтримуються FFmpeg, включаючи x86 (IA-32 та x86-64), PPC (PowerPC), ARM, DEC Alpha, SPARC та MIPS.[28]
Обладнання спеціального призначення
Існує безліч інтегральних схем (ASIC) для стиснення та декомпресії аудіо/відео. Ці ASIC можуть частково або повністю розвантажити обчислення з центрального процесора. Замість повної реалізації алгоритму для використання подібного ASIC потрібен лише API.[29]
Використання з утилітою FFmpeg
Прискорення апаратне декодування включається за допомогою опції -hwaccel. Декодування починається у звичайному режимі, але якщо декодований потік підтримує апаратне забезпечення, тоді декодер призначає всю значну обробку цьому апаратному забезпеченню, таким чином прискорюючи процес декодування. Якщо потоки, які можна декодувати через апаратне забезпечення не виявлено (як це відбувається з непідтримуваним кодеком або профілем), тоді вони будуть декодовані програмним забезпеченням. Параметр -hwaccel_device застосовується, коли апаратне забезпечення потребує певного пристрою для роботи, особливо якщо доступно декілька графічних карт.
Підтримувані кодеки та формати
Узагальнити
Перспектива
Формати зображень
FFmpeg підтримує багато поширених та деякі незвичайні формати зображень.
Формат зображення PGMYUV є саморобним варіантом двійкового (P5) формату PGM Netpbm. FFmpeg також підтримує 16-бітову глибину форматів PGM і PPM, а також двійковий (P7) формат PAM з або без альфа-каналу, глибиною 8 або 16 біт для pix_fmts monob, grey, gray16be, rgb24, rgb48be, ya8, rgba, rgb64be.
Підтримувані формати
На додаток до форматів FFV1 і Snow, які були створені та розроблені з FFmpeg, проєкт також підтримує такі формати:
Дані можна передавати без обробки через -c copy. Одним зі способів є вирізання відеозапису без необхідності часу та обробки перекодування.
Муксери
Вихідні формати (формати контейнерів та інші способи створення вихідних потоків) у FFmpeg називаються «муксерами» (від слова muxers). FFmpeg підтримує наступні:[37]
- AIFF
- ASF
- AVI а також інформацію на вході з AviSynth
- BFI
- CAF
- FLV
- GIF
- GXF, General eXchange Format, SMPTE 360M
- HLS, HTTP Live Streaming
- IFF
- Базовий формат медіафайлу ISO (включаючи QuickTime, 3GP and MP4)
- Matroska (включаючи WebM)
- Maxis XA
- MPEG-DASH
- MPEG program stream
- MPEG transport stream (включаючи AVCHD)
- MXF, Material eXchange Format, SMPTE 377M
- MSN Webcam потік
- NUT
- Ogg
- OMA
- RL2
- Базовий сегмент потока, для створення сегментованих відеопотоків
- Smooth Streaming
- TXD
- WTV
Піксельні формати
FFmpeg підтримує багато форматів пікселів.[38] Деякі з цих форматів підтримуються лише в якості вхідних (від англ. input) форматів.
- англ. bits per pixel (кількість біт на піксель)
- 10-бітові кольорові компоненти з 2-бітовим заповненням (X2RGB10)
- Також підтримуються RGBx (rgb0) і xBGR (0bgr).
- використовується в YUV-центрованих кодеках, таких як H.264
- YVU9, YV12, YV16 та YV24 підтримуються як кодек «rawvideo» в FFmpeg.
- I420 також відомий яка YUV420P
- також відомий як YUY2 в Windows
- UYVY 10bpc без заповнення підтримується як «bitpacked» кодек в FFmpeg. UYVY 10bpc з 2-бітовим заповненнямм підтримується як кодек «v210» в FFmpeg. 16bpc (Y216) підтримується як кодек «targa_y216» в FFmpeg.
- I422 також відомий як YUV422P
- 8bpc (AYUV) не підтримується
- I444 також відомий як YUV444P
- використовується в JPEG2000
FFmpeg не підтримує IMC1-IMC4, AI44, CYMK, RGBE, Log RGB та інші формати. Він також ще не підтримує ARGB 1:5:5:5, 2:10:10:10 або інші формати бітових полів BMP, які зазвичай не використовуються.
Remove ads
Підтримувані протоколи
Відкриті стандарти
Стандарт де-факто
Remove ads
Додатки
Узагальнити
Перспектива
Юридичні аспекти
FFmpeg містить понад 100 кодеків,[42] більшість із яких використовує ті чи інші методи стиснення. Багато таких методів стиснення можуть бути предметом юридичних претензій щодо патентів на програмне забезпечення.[43] Такі претензії можуть мати позовну силу в таких країнах, як Сполучені Штати Америки, які запровадили патенти на програмне забезпечення, але вважаються такими, що не мають позовної сили або є недійсними, наприклад, у країнах-членах Європейського Союзу.[44] Термін дії патентів на багато старіших кодеків, включаючи AC3 і всі кодеки MPEG-1 і MPEG-2, закінчився.
FFmpeg ліцензується згідно з ліцензією LGPL, але якщо певна збірка FFmpeg пов’язана з будь-якою бібліотекою GPL (зокрема, x264), тоді весь двійковий файл ліцензується під ліцензією GPL.
Проєкти, які використовують FFmpeg
FFmpeg використовується програмним забезпеченням, таким як Blender, Cinelerra-GG Infinity, HandBrake, Kodi, MPC-HC, Plex, Shotcut, VirtualDub2 (форк VirtualDub),[45] медіаплеєр VLC, xine і YouTube.[46][47] Він керує відтворенням відео та аудіо в Google Chrome[47] і версії Firefox для Linux.[48] Було розроблено інтерфейс графічного інтерфейсу для FFmpeg, включаючи Multimedia Xpert[49] і XMedia Recode.
FFmpeg використовується ffdshow, FFmpegInterop, плагіном GStreamer FFmpeg, фільтрами LAV і OpenMAX IL для розширення можливостей кодування та декодування відповідних мультимедійних платформ.
У рамках місії НАСА Марс 2020 FFmpeg використовується марсоходом Perseverance для стиснення зображень і відео перед відправкою на Землю.[50]
Remove ads
Деякі приклади застосування
Примітка: Важливо, щоб параметри були вказані в правильному порядку (наприклад, вхід, відео, фільтри, аудіо, вихід). Якщо цього не зробити, параметри можуть бути пропущені або запобігти виконанню FFmpeg.[51]
Переглянути інформацію про будь-який медіафайла:[52]
$ ffprobe вхідний-файл.mkv
Об’єднання потрібних файлів, наприклад VOB-файли, в один потік і мультиплексування їх у MPEG-2:
$ cat вхідний-0.VOB вхідний-1.VOB вхідний-2.VOB | ffmpeg -i - вихідний_відео_файл.mp2
Мультиплексування одного формата в інший, в данном прикладі MPEG-4 в AVI та MPEG-3 в WAV:
$ ffmpeg -i вхідний_відео_файл.mp4 вихідний_відео_файл.avi
$ ffmpeg -i вхідний_аудіо_файл.mp3 вихідний_аудіо_файл.wav
Remove ads
Примітки
Посилання
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads


