Я хочу показать логотип на видео, когда оно начнется. Я уже нашел эту команду:

ffmpeg -i input.mp4 -framerate 30000/1001 \
-loop 1 -i test.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 Bigout.mp4

Как добавить мой логотип за первые 30 секунд в видео с ffmpeg?

Но проблема в том, что ширина / высота моего видео различаются, и каждый раз, когда я добавляю логотип, он не охватывает все видео. Что мне делать, если я хочу установить ширину / высоту логотипа на ширину / высоту видео?

ОБНОВЛЕНИЕ После ответа @Behroozfar я попытался использовать scale2ref с помощью команды ниже:

ffmpeg -i input.mp4 -framerate 30000/1001 -loop 1 -i biglogo.png -filter_complex "[1:v] [0:v] scale2ref = iw/1:-1 [ovrl] [0v]; [0v] [ovrl] overlay = 0:0 [v] "-map" [v]; [1:v] fade = out:st = 2:d = 1:alpha = 1 [ov] "-map 0:a -c:v libx264 -c:копия -shortest Bigout.mp4

но вопрос в том, что я не могу показать логотип только на одну секунду. Он существует во время всего воспроизведения видео.

2 ответа2

2

Использовать фильтр scale2ref

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

0

Чтобы отобразить полноразмерный логотип в течение одной секунды, а затем небольшой логотип, используйте

ffmpeg -i input.mp4 -framerate 30000/1001 -loop 1 -i test.png
       -filter_complex
         "[1]fade=out:st=1:d=0.9:alpha=1,trim=0:2[f]; \
          [1]fade=st=2:d=0.5:alpha=1,trim=0:3[s]; \
          [f][0]scale2ref[fs][video];[s][fs]scale2ref=iw/8:-1[ss][fo];
          [video][fo]overlay=eof_action=pass[v0]; \
          [v0][ss]overlay=W-w-5:H-h-5[v]" \
       -map "[v]" -map 0:a -c:v libx264 -c:a copy Bigout.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .