Як додати мій логотип за перші 30 секунд у відео з ffmpeg?


9

Я намагаюся додати свій логотип протягом перших 30 секунд у відео з ffmpeg. У мене є відео під назвою d1.mp4та логотип logo.png.

Коли відео починається, водяний знак повинен знаходитися у верхньому лівому або верхньому правому куті відео і зникати через 30 секунд.

Чи можете ви мені, будь ласка, покажіть, як її додати?


моє відео звуть d1.mp4, а мій логотип - logo.png, дякую ..
iwocan

Тоді що ffmpeg -i d1.mp4 -i logo.pngпоказує? Будь ласка, просто введіть цю команду і покажіть нам, що таке вихід. Задаючи питання щодо цього ffmpeg, ви завжди повинні містити якомога більше детальних відомостей про те, який у вас є відео / аудіо матеріал, що ви вже пробували та повний вихід командного рядка всього, що ви пробували.
slhck

ось що я отримую на своєму cmd екрані. pastebin.com/bPCnhXh2
iwocan

Відповіді:


13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

Це передбачає, що логотип - це єдине нерухоме зображення з альфа-каналом, і ви хочете накласти його на відео з частотою кадрів 30000/1001 (швидкість NTSC). Змініть, -framerateщоб відповідати вхідному відео, якщо воно інше. Якщо ваш логотип - це відео, опустіть -framerate 30000/1001 -loop 1. Якщо логотип не має альфа-каналу, додайте його, вставивши, наприклад, format=yuva420p,безпосередньо перед цим fade.

Це відображатиме логотип у x, y положенні 10,10 протягом 30 секунд, після чого 1 секунда зникає.


1
Дуже цікаво! Чи не могли б ви пояснити , чому framerateі loopпотрібно в даному випадку , а не для простого накладення без завмирання фільтра?
Раджиб

Дуже дякую mark40, але коли я пишу цей код, cmd-екран не зупиняється .. Я не знаю чому, але він не працював для мене ..
iwocan

Привіт LordNeckbeard, ось знімок екрана .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan

1
@iwocan Я вважаю, що ви можете скопіювати речі з вікна Windows. Я припускав, що ви будете шукати, як це зробити, але подивіться на Копіювати в буфер обміну з командного рядка Windows .
llogan

4
@Rajib: Причина -framerateі -loopдля нерухомого зображення полягає в тому, що зникнення спрацює. Якщо є лише один кадр, то він не може затухати через інтервал 1 секунду. В ідеалі вона повинна бути такою ж частотою кадрів, що і відео, щоб зникнення було максимально плавним.
mark4o

19

Використовуючи overlayвідеофільтр, щоб додати логотип до відео:

введіть тут опис зображення

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

Щоб зрозуміти цю команду, вам потрібно знати, що таке специфікатор потоку , і допоможе прочитати Вступ до фільтрації FFmpeg . [0:v]посилається на відеопотік (и) першого входу ( video.mp4) і [1:v]посилається на відеопотік другого входу ( logo.mp4). Ось як ви можете сказати, overlayякі входи використовувати. Ви можете опустити [0:v][1:v], і overlayвсе одно буде працювати, але рекомендується бути явним і не покладатися на можливі невідомі значення за замовчуванням.

За замовчуванням логотип буде розміщено у верхньому лівому куті.

Використання -codec:a copyбуде потік копіювати аудіо. Це просто переутворює звук замість повторного кодування. Подумайте про це як про "копіювання та вставлення" аудіо.

Переміщення логотипу

Цей приклад перемістить логотип на 10 пікселів праворуч і 10 пікселів вниз: введіть тут опис зображення

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

Цей приклад перемістить логотип на 10 пікселів з правого боку та на 10 пікселів вниз:

введіть тут опис зображення

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wвідноситься до ширини "основного" вводу (фону або [0:v]) і overlay_wпосилається на ширину введення "накладення" (логотип або [1:v]). Отже, у прикладі це можна перекласти на overlay=320-90-10:10або overlay=220:10.

Час накладання накладки

Деякі фільтри можуть обробляти редагування тимчасової шкали, що дозволяє використовувати арифметичні вирази, щоб визначити, коли слід застосувати фільтр. Дивіться, щоб ffmpeg -filtersпобачити, які фільтри підтримують редагування часової шкали.

Цей приклад показуватиме логотип до 30 секунд:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

Якщо ви хочете згасати логотип, зверніться до відповіді mark4o .


Дуже дякую! :) Прошу вибачення за свою розбиту англійську мову знову. Ця команда працює ідеально! :)
iwocan

нарешті щось зрозуміле! що я повинен використовувати, щоб він з’явився на початку, ніж наприкінці?
cikatomo

Я мав на увазі з'явитися на початку І в кінці? Два рази. я спробував enable = between (t \, 0 \, 30): enable = between (t \, 50 \, 60), але єдина остання часова шкала діє
cikatomo

@cikatomo enable=not(between'(t,30,50)'). Це показуватиме накладення постійно, але не тривалістю 30-60 секунд.
логіан

Ідеально, дякую. Незважаючи на ваше попередження не використовувати overlayвсе самостійно, я це зробив, тому що за замовчуванням вгорі ліворуч було те, що я хотів. (Отже, врешті-решт, мої прапори були просто filter_complex overlay.)
колись
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.