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
, но разрешение видео отличается:
![введите описание изображения здесь]()
и этот
![введите описание изображения здесь]()
Как я могу предотвратить масштабирование изображения вниз/вверх?
Update
Благодаря 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
который работает очень хорошо, но он не поддерживает пропорции логотипа.
Я пробовал этот код на двух видео с разным разрешением, и это результат
![введите описание изображения здесь]()
и этот
![введите описание изображения здесь]()
Можно ли улучшить это решение?
Ответы
Ответ 1
Вы можете использовать фильтр 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 равен 320x270, тогда он должен быть scale2ref=(320/270)*ih/8:ih/8