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ć?


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.


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 .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.