FFmpeg наложение и смешивание видео

Я пытаюсь использовать FFmpeg для наложения одного видео поверх другого с использованием аддитивной смеси. Одно видео — это настоящее видео, которое я хочу перекодировать, другое — это видео длиной ~ 10 секунд, которое я хочу поместить в один угол, что-то вроде анимированного водяного знака. Видео водяного знака представляет собой белый анимированный материал с черным фоном.

До сих пор я пробовал что-то в этом роде:

$ /d/ffmpeg/ffmpeg.exe -i actualvideo.mkv -i myoverlay.mp4 \
-filter_complex "[1:0] setsar=sar=1 [1sared]; [0:0][1sared] blend=all_mode='addition':repeatlast=1" \
test.mkv

Казалось setsarнеобходимым, иначе он бы жаловался:

[Parsed_blend_0 @ 00000000043e0e40] First input link top parameters (size 1280x720, SAR 1:1) do not match the corresponding second input link bottom parameters (1280x720, SAR 0:1)

С изображением setsarпретензий нет, но видео на выходе выглядит... в основном розовым. Оба видео выглядят нормально при просмотре сами по себе, прежде чем я загружаю их в FFmpeg.

Любые идеи? Я делаю что-то неправильно?

Ответы (1)

Я нашел полезный пост в stackoverflow, посвященный этой проблеме: https://stackoverflow.com/a/21400416/377875 .

Судя по всему, проблема с цветовым пространством. Что-то вроде этого работает:

ffmpeg -i "$1" -i "$2" \
-filter_complex "[1:0] setsar=sar=1,format=rgba [1sared]; [0:0]format=rgba [0rgbd]; [0rgbd][1sared]blend=all_mode='addition':repeatlast=1:all_opacity=1,format=yuva422p10le" \
-c:v libx264 -preset slow -tune film -crf 19 \
-c:a aac -strict -2 -ac 2 -b:a 256k \
-pix_fmt yuv420p "$3"

(замените $1своим фактическим видео, $2своим оверлеем и $3именем выходного файла)