Jak dodać moje logo na pierwsze 30 sekund w filmie z ffmpeg?

9

Próbuję dodać moje logo przez pierwsze 30 sekund w filmie z ffmpeg. Mam wideo o nazwie d1.mp4i logo o nazwie logo.png.

Po rozpoczęciu wideo znak wodny powinien znajdować się w lewym górnym lub prawym górnym rogu i zniknąć po 30 sekundach.

Czy możesz mi pokazać, jak to dodać?

iwocan
źródło
moje wideo to d1.mp4, a moje logo to logo.png, dziękuję ..
iwocan
Co zatem ffmpeg -i d1.mp4 -i logo.pngpokazuje? Po prostu wprowadź to polecenie i pokaż nam, jakie są dane wyjściowe. Kiedy zadajesz pytania ffmpeg, zawsze powinieneś podać jak najwięcej szczegółów na temat posiadanego materiału wideo / audio, tego, co już wypróbowałeś, oraz pełnego wyjścia z wiersza poleceń wszystkiego, co próbowałeś.
slhck
oto co dostaję na ekranie cmd. pastebin.com/bPCnhXh2
iwocan

Odpowiedzi:

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

Zakłada się, że logo jest pojedynczym nieruchomym obrazem z kanałem alfa i chcesz nałożyć go na film o liczbie klatek na sekundę 30000/1001 (szybkość NTSC). Zmień, -framerateaby pasowało do wejściowego wideo, jeśli jest inne. Jeśli twoje logo jest filmem, pomiń -framerate 30000/1001 -loop 1. Jeśli logo nie ma kanału alfa, dodaj go, wstawiając np. format=yuva420p,Bezpośrednio przed fade.

Spowoduje to wyświetlenie logo w pozycji x, y 10,10 przez 30 sekund, a następnie 1 sekundowe wygaszanie.

mark4o
źródło
1
Bardzo interesujące! Czy mógłbyś wyjaśnić, dlaczego frameratei loopsą wymagane w tym przypadku, a nie dla prostej nakładki bez filtra zanikania?
Rajib
Dziękuję bardzo mark40, ale kiedy piszę ten kod, ekran cmd się nie zatrzymuje .. Nie wiem dlaczego, ale to nie zadziałało dla mnie ..
iwocan
Cześć LordNeckbeard, oto zrzut ekranu .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan
1
@iwocan Wierzę, że możesz skopiować rzeczy z monitu systemu Windows. Zakładałem, że będziesz szukał, jak to zrobić, ale spójrz na Kopiuj do schowka z wiersza polecenia systemu Windows .
llogan,
4
@Rajib: Powodem, dla -frameratei -loopdla obrazu nieruchomego jest tak, że na blaknięcie będzie działać. Jeśli jest tylko jedna ramka, nie ma możliwości wygaszania w odstępie 1 sekundy. Idealnie powinna być taka sama liczba klatek na sekundę jak wideo, aby zanikanie było możliwie płynne.
mark4o
19

Używając overlayfiltra wideo, aby dodać logo do filmu:

wprowadź opis zdjęcia tutaj

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

Aby zrozumieć to polecenie, musisz wiedzieć, czym jest specyfikator strumienia, a przeczytanie wprowadzenia do filtrowania FFmpeg pomoże. [0:v]odnosi się do strumienia wideo z pierwszego wejścia ( video.mp4) i [1:v]odnosi się do strumienia wideo z drugiego wejścia ( logo.mp4). W ten sposób możesz określić, overlayjakich danych wejściowych użyć. Możesz pominąć [0:v][1:v]i overlaynadal będzie działać, ale zaleca się, aby być jawnym i nie polegać na nieznanych domyślnych ustawieniach domyślnych.

Domyślnie logo zostanie umieszczone w lewym górnym rogu.

Użycie -codec:a copyspowoduje przesłanie strumienia audio. To po prostu remiksuje dźwięk zamiast go ponownie kodować. Pomyśl o tym jak o „skopiuj i wklej” audio.

Przenoszenie logo

Ten przykład przeniesie logo o 10 pikseli w prawo i 10 pikseli w dół: wprowadź opis zdjęcia tutaj

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

Ten przykład przeniesie logo o 10 pikseli z prawej strony i 10 pikseli w dół:

wprowadź opis zdjęcia tutaj

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_wodnosi się do szerokości wejścia „głównego” (tło lub [0:v]) i overlay_wodnosi się do szerokości wejścia „nakładki” (logo lub [1:v]). W tym przykładzie można to przetłumaczyć na overlay=320-90-10:10lub overlay=220:10.

Czas nakładki

Niektóre filtry obsługują edycję osi czasu, co pozwala na użycie wyrażeń arytmetycznych w celu ustalenia, kiedy należy zastosować filtr. Zobacz, ffmpeg -filtersktóre filtry obsługują edycję osi czasu.

Ten przykład pokazuje logo do 30 sekund:

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

Jeśli chcesz zniknąć logo, zapoznaj się z odpowiedzią mark4o .

Llogan
źródło
Dziękuję Ci bardzo! :) Jeszcze raz przepraszam za mój zepsuty angielski. To polecenie działa idealnie! :)
iwocan
wreszcie coś zrozumiałego! czego powinienem użyć, aby pojawił się na początku niż na końcu?
cikatomo
Chciałem pojawić się na początku ORAZ na końcu? Dwa razy. próbowałem enable = between (t \, 0 \, 30): enable = between (t \, 50 \, 60), ale obowiązuje ostatnia oś czasu
cikatomo
@cikatomo enable=not(between'(t,30,50)'). To pokaże nakładkę przez cały czas, ale nie w czasie 30-60 sekund.
llogan
Perfekcyjnie, dziękuję. Mimo twojego ostrzeżenia, aby nie używać overlaywszystkiego samodzielnie, zrobiłem to, ponieważ chciałem domyślnej pozycji lewego górnego rogu. (Więc w końcu moje flagi były po prostu filter_complex overlay.)
felwithe