Dodaj nakładkę obrazu przed wideo za pomocą ffmpeg


31

Mam wiele filmów i muszę umieścić przed nimi obraz na około 5 sekund, ale dodawanie go ręcznie i renderowanie za każdym razem potrwa naprawdę długo, więc pytam, czy można to zrobić za pomocą ffmpeg i czy mógłby mi pomóc, ponieważ nie mam doświadczenia z ffmpeg. Znalazłem już niektóre polecenia, ale żadne z nich nie działało. Ten na przykład.

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4

1
Czy po prostu skopiowałeś to polecenie lub napisałeś je zgodnie z Twoimi potrzebami? Pytam, ponieważ polecenie to obejmuje wyciszenie i wszelkiego rodzaju inne rzeczy nie ujęte w twoim pytaniu. Czy potrzebujesz tylko nałożyć obraz, czy potrzebujesz czegoś więcej?
PTS

Skopiowałem go skądś, wszystko czego potrzebuję, to po prostu umieścić obraz przed wideo.
Azthy,

Odpowiedzi:


44

Możesz wykonać prostą nakładkę obrazu, używając następującej składni:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 oznacza, że ​​chcemy ustawić obraz 25px w prawo i 25px w dół, zaczynając od lewego górnego rogu (0: 0).

enable='between(t,0,20)' oznacza, że ​​chcemy, aby obraz wyświetlał się między sekundą 0 a 20.

[0:v][1:v]oznacza, że ​​chcemy, aby pierwszy plik wideo, który importujemy -i, w naszym przypadku input.mp4 lub jak ffmpeg go widzi, plik wejściowy wideo numer 0, aby znajdował się pod plikiem wejściowym wideo 1, w naszym przypadku image.png. :voznacza tylko, że chcemy wideo 0 i wideo 1. [0:a]oznaczałoby to, że chcemy pierwszej importowanej ścieżki audio. Który również pochodziłby z input.mp4, ale wskazywałby na ścieżkę audio zamiast ścieżki wideo w pliku mp4.

Jeśli chcesz określoną jakość / ustawienia obrazu, a nie ustawienia wybrane przez ffmpeg, dodaj obraz i / lub opcje kodowania dźwięku, których chcesz użyć. Domyślnym koderem wideo będzie x264. Sprawdź przewodnik kodowania H.264, aby sprawdzić możliwe ustawienia.

Polecenie -acodec copy/ -c:a copy, które masz w swoim poleceniu fe, po prostu ponownie użyłoby dźwięku z pliku źródłowego. Chociaż oczywiście nie można tego zrobić z wideo (w tym przypadku), należy go transkodować, ponieważ tworzymy nowe źródło wideo.

Jeśli chcesz transkodować dźwięk, usuń -c:a copyczęść. Może być konieczne jawne określenie kodera, np -c:a aac -strict experimental. Więcej informacji można znaleźć w przewodniku kodowania AAC .


Następująca iteracja powyższego polecenia działała dla mnie na Androidzie, ponieważ oryginalny daje, a błąd jak aac jest funkcją eksperymentalną: ffmpeg -i input.mp4 strict -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: enable = 'between (t, 0,20)' output.mp4
muneikh

czy w ogóle jest pozycja na dole bez znajomości wysokości? lub daleko w prawo, nie znając szerokości?
chovy

jasne, po prostu przeanalizuj wideo za pomocą ffprobe i wyodrębnij wymiary wideo z wyjścia. Być może istnieje także opcja zintegrowana z ffmpeg, ale nie jestem tego świadomy.
PTS

3
Twoje polecenie zastępuje fragment oryginalnego pliku wideo, ale użytkownik może chcieć dodać (w ten sposób zwiększając długość wideo) obraz przed i / lub po wideo. Proszę o pomoc
porton

1
@laurent, który zależy od pliku źródłowego i / lub wyniku. pix_fmt oznacza format pikseli. Istnieje wiele różnych formatów pikseli dla różnych koderów-dekoderów, podając jeden, aby nie skończyć się czymś, co nie działa. yuv420p jest najbardziej obsługiwanym formatem pikseli, jeśli chodzi o h264, ale są też na przykład yuv422p i yuv444p.
PTS
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.