FFMPEG: добавить изображение фиксированного размера на видео, независимо от его ширины и размера; высота (разрешение)

Это мой код, который добавляет изображение к видео, запущенному через PHP:

exec('ffmpeg -i input.mp4 -i logo.png -filter_complex
"[0:v][1:v] overlay=10:10"  -pix_fmt yuv420p -c:a copy output.mp4');

Это работает хорошо, но проблема в том, что изображение уменьшается или увеличивается в соответствии с разрешением видео. Например, на следующих изображениях ширина логотипа 50px но разрешение видео отличается:

введите описание изображения здесь

и этот

введите описание изображения здесь

Как я могу предотвратить масштабирование изображения вниз / вверх?


Благодаря Mulvya, он предложил эти коды

ffmpeg -i input.mp4 -i logo.png -filter_complex
"[1:v][0:v]scale2ref=(W/H)*ih/8:ih/8[wm][base];[base][wm]overlay=10:10"-pix_fmt yuv420p -c:a copy output.mp4

а также

ffmpeg -i input.mp4 -i logo.png -filter_complex
"[1:v][0:v]scale2ref=(W/H)*ih/8:ih/8[wm][base];[wm]setsar=1[wmsar];
[base][wmsar]overlay=10:10"-pix_fmt yuv420p -c:a copy output.mp4

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

введите описание изображения здесь

и этот

введите описание изображения здесь

Можно ли улучшить это решение?

18

Решение

Вы можете использовать фильтр scale2ref.

ffmpeg -i input.mp4 -i logo.png -filter_complex
"[1:v][0:v]scale2ref=(W/H)*ih/8/sar:ih/8[wm][base];[base][wm]overlay=10:10"-pix_fmt yuv420p -c:a copy output.mp4

Это позволит изменить размер логотипа до 1/8 высоты видео.

Вы должны заменить W/H со значениями для изображения, например если PNG 320×270, то он должен быть scale2ref=(320/270)*ih/8:ih/8

10

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]