Новости

розуміємо FFmpeg

  1. Отримуємо інформацію про фото
  2. Конвертуємо в mp4
  3. Вирізаємо фрагмент відео
  4. Фільтри. міняємо дозвіл
  5. Об'єднання фільтрів. прискорюємо відтворення
  6. Склеюємо файли в один
  7. Водяний знак

FFmpeg - це набір бібліотек для обробки відео і аудіо файлів. FFmpeg конвертує mov в mp4, накладе водяний знак, склеїть кілька відео файлів в один, поміняє дозвіл, перекодовує потокове відео, створить потік сам. FFmpeg корисний для тих, хто професійно працює з відео, розробляє медіа додатку або просто обробляє домашні записи.

FFmpeg не має графічного інтерфейсу і управляється командами з консолі. Багато користувачів працюють з ним, копіюючи потрібні команди з інтернету, не розуміючи, що значить той чи інший прапор. Навчимося усвідомлено працювати з FFmpeg на прикладі кількох корисних команд.

Сьогодні ми пройдемо шлях від отримання інформації про фото до застосування декількох фільтрів одночасно, вирішуючи завдання, з якими часто стикаєшся при роботі з відео. Встановимо ffmpeg і вперед!

Отримуємо інформацію про фото

ffmpeg -i file.mp4

Тут все просто, вводимо шлях до файлу, отримуємо інформацію про ньому за допомогою найсучасніших кількість доріжок, дозвіл, бітрейт і фреймрейт. Ми вказуємо шляхи до файлів прапором -i (input):

-i file1.mp4 -i file2.mp4.

Конвертуємо в mp4

Припустимо у нас є сайт, на якому відео програвалося через Flash плеєр. Ми хочемо поміняти його на HTML5 Video. Для цього конвертуємо відео файли на сервері з flv формату в mp4.

ffmpeg -i flashvideo.flv -vcodec libx264 -acodec libvo_aacenc output.mp4

У порівнянні з попередньою командою додалося три поля.

  • output.mp4 - шлях до конвертувати файлу.
  • -vcodec libx264 - вказуємо який відео кодек хочемо отримати. У нашому випадку це H264, який підтримується більшістю браузерів .
  • -acodec libvo_aacenc - аудіо кодек AAC .

Список підтримуваних вашим ffmpeg кодеків можна отримати через ffmpeg -codecs.

Замість -vcodec зустрічається запис -codec: v і -c: v. Якщо не вказати кодеки для конвертації ffmpeg -i flashvideo.flv output.mp4, то ffmpeg встановить дефолтні кодеки для формату файлу на виході .

При конвертації задають не тільки кодеки. Збільшимо число налаштувань:

ffmpeg -i flashvideo.flv -b: v 700k -r 25 -pix_fmt yuv420p -vcodec libx264 \ -b: a 128k -ar 44100 -acodec libvo_aacenc -y output.mp4

Ми встановили бітрейт для відео -b: v і аудіо -b: a в 700 і 128 кб / c. Бітрейт можна позначити іншими прапорами: -vb і -b для відео або -ab для аудіо.

Решта три параметра - це фреймрейт -r 25 в кадрах в секунду, формат YUV рівна звичайного значення yuv420p і частота дискретизації звуку 44100 Гц. Прапор -y потрібен для перезапису файлу, якщо він вже існує.

Вирізаємо фрагмент відео

ffmpeg -ss 10 -t 20 -i source_video.mp4 -vcodec copy -acodec copy result.mp4

Прапором -ss вказуємо з якого моменту вихідного відео обрізаємо, -t - тривалість. На виході ми отримаємо двадцяти секундне відео, яке почнеться з десятої секунди вихідного. Запис -ss 00: 00: 10.250 -t 00: 00: 20.120 знадобиться для вказівки більш точного проміжку часу. До версії 2.1 FFmpeg в обох випадках обрізав відео по найближчому ключового кадру . У нових версіях підсумкове відео в максимальному наближенні до зазначеного інтервалу.

Ми додали -vcodec copy -acodec copy, щоб зберегти кодеки вихідного відео. Інакше ffmpeg перекодував б їх в кодеки за замовчуванням. Зараз, відео перекодируется і команда виконається швидко. Далі спростимо цю запис прапором -c copy.

Якщо розташувати прапори -ss і -t після вхідного відео, то підсумкове відео буде таким же, але команда буде виконуватися довше. Прапори будуть ставитися до підсумкового відео і FFmpeg буде декодувати фрагмент відео до -ss. У першому випадку ця частина буде проігнорована.

Прапор -t можна замінити на -to, вказавши замість тривалості кінцеву точку. Цей прапор не можна застосувати до вхідного відео:

ffmpeg -ss 10 -i source_video.mp4 -to 30 -c copy result.mp4

Команда дала нам інший результат: тридцяти секундне відео з десятої секунди вихідного. Це сталося, тому що -to використовував тимчасову шкалу result.mp4, тридцятий секунда на якому дорівнює сороковий секунді source_video.mp4. Щоб використовувати вихідну шкалу додамо прапор -copyts. Так ми отримаємо таке ж відео, як від першої команди:

ffmpeg -ss 10 -i source_video.mp4 -to 30 -copyts -c copy result.mp4

Фільтри. міняємо дозвіл

Один з найпотужніших інструментів ffmpeg - фільтри. Вони можуть додавати ефекти, накладати різні відео один на одного, зшивати кілька файлів в один. Побачити список встановлених фільтрів ми можемо по команді ffmpeg -filters. Змінимо з їх допомогою дозвіл відео:

ffmpeg -i source_video.avi -vf scale = 640: 480 source_preview.avi

Ми використовували прапор -vf, вказавши фільтр scale і дозвіл 640: 480. Цей фільтр може зберігати пропорції і обчислювати дозвіл динамічно .

Об'єднання фільтрів. прискорюємо відтворення

ffmpeg -i source_video.mp4 \ -filter_complex "[0: v] setpts = 0.5 * PTS; [0: a] atempo = 2.0" accelerated.mp4

Ми об'єднали кілька фільтрів в один прапором filter_complex і отримали прискорений в два рази файл. Щоб розібратися застосуємо фільтри поодинці.

ffmpeg -i source_video.mp4 -vf setpts = 0.5 * PTS accelerated_video.mp4

Ми прискорили відтворення відео доріжки фільтром setpts. Однак аудіодоріжка не змінилася, і файл вийде тієї ж тривалості що і був: відео програється в 2 рази швидше, а останній кадр буде висіти всю другу половину файлу. Якщо прибрати аудіо доріжку прапором -an, то тривалість підсумкового файлу буде визначатися по відео доріжці і буде в два рази менше вихідної.

Навпаки, якщо потрібна тільки прискорене аудіо без відео, скористаємося фільтром atempo, а прапором vn приберемо відео доріжку.

ffmpeg -i source_video.mp4 -af atempo = 2.0 -vn accelerated_audio.mp3

Додавши filter_complex і застосувавши обидва фільтра, ми прискорили файл цілком.

Граф фільтрів застосовує послідовність з декількох фільтрів до вихідного файлу. Ми вказали прискорення setpts для відео доріжки [0: v] і atempo для аудіо [0: a]. За допомогою комбінацій фільтрів ми можемо вирішити більшість завдань по редагуванню відео.

Склеюємо файли в один

ffmpeg -i input1.mp4 -i input2.mp4 \ -filter_complex "[0: 0] [0: 1] [1: 0] [1: 1] concat = n = 2: v = 1: a = 1 [v ] [a] "\ -map" [v] "-map" [a] "-y output.mp4

Ми бачимо новий прапор map. Він вказує ffmpeg які доріжки хочемо отримати в підсумковому файлі. Якщо в наших вихідних відео файлах гарантовано одна відео і аудіо доріжка, і стільки ж ми хочемо отримати на виході, то прапор map не потрібен. Інші приклади використання Map можна подивитися на сайті ffmpeg .

Виконаємо ту ж операцію іншим методом:

ffmpeg -f concat -i list.txt -c copy output.mp4

У FFmpeg є елементи, які читають або записують медіа в певних форматах. Вони називаються демультиплексор і мультиплексор . -f concat - це демультиплексор, який приймає текстовий файл, зі списком медіа файлів і склеює їх в один. Подивитися інші елементи можна командою ffmpeg -formats.

Вміст list.txt:

file 'input1.mp4' file 'input2.mp4'

Такий метод зручний, якщо у нас багато файлів і треба склеїти їх один за одним. Він не перекодує відео і працює швидше першого методу.

Але перший метод застосовується частіше. По-перше, він може прийняти на вхід відео з різними кодеками. По-друге, дає велику гнучкість. Наприклад, якщо потрібна тільки частина першого відео, ми можемо скористатися прапорами -ss і -t. Зверніть увагу, ці прапори діють тільки на перший файл input1.mp4.

ffmpeg -ss 5 -t 2 -i input1.mp4 -i input2.mp4 \ -filter_complex "[0: 0] [0: 1] [1: 0] [1: 1] concat = n = 2: v = 1 : a = 1 [v] [a] "\ -map" [v] "-map" [a] "-y result.mp4

Водяний знак

Останній приклад, який ми розглянемо - це накладення водяного знака. Фільтр overlay приймає на вхід координати розташування водяного знака на підсумковому відео.

Розташуємо водяний знак по центру. Знаючи розмір вихідного відео і png картинки, можна обчислити координати самим. Наприклад при відео 1280 × 720 і водяному знаку 200 × 200, положення по горизонталі x = (1280 - 200) / 2 = 540 і по вертикалі y = (720 - 200) / 2 = 260. Відповідно значення фільтра "overlay = 540: 260 ". Однак зручніше написати універсальну команду, щоб ffmpeg порахував все за нас. Розмір відео отримаємо з параметрів main_w і main_h, а водяного знака з overlay_w і overlay_h. Далі ту формулу, по якій ми вираховували координати запишемо в значення фільтра "overlay = (main_w-overlay_w) / 2: (main_h-overlay_h) / 2". Готово, ми отримали команду для накладення водяного знака по центру:

ffmpeg -i source_video.mp4 -i watermark.png \ -filter_complex "overlay = (main_w-overlay_w) / 2: (main_h-overlay_h) / 2" \ -codec: a copy video_protected.mp4

FFmpeg - потужний інструмент для роботи з відео. Рішення інших завдань з його допомогою можна подивитися в статті 19 команд ffmpeg для всіх потреб .

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: