Я хочу использовать FFmpeg для добавления водяного знака, но я хочу, чтобы видео было такого же качества. Как мне это сделать?
Я пытался использовать, -vcodec copy -acodec copy
но водяной знак отсутствовал:
ffmpeg -y -i treino.mp4 -vf "movie=logo.png [watermark]; [in][watermark] overlay=10:main_h-overlay_h-10 [out]" -vcodec copy -acodec copy video2.mp4
решение1
Вы используете фильтр, а фильтрация требует перекодирования, поэтому вы не можете использовать -vcodec copy
его дляпотоковое копированиевидео. Если вы хотите "того же качества", то вам нужно использовать кодер без потерь:
ffmpeg -i video.mp4 -i image.png -filter_complex overlay -c:v libx264 -crf 0 -c:a copy -movflags +faststart output.mp4
Полученный файл может быть огромным: это ожидаемо для выходных данных без потерь.
Ваш проигрыватель или устройство, возможно, не сможет воспроизвести файл без потерь.
Если вам нужен вывод «визуально без потерь», который технически не является таковым, но выглядит почти так, то используйте
-crf 18
вместо-crf 0
.Нет необходимости вфильмФильтр источника. Просто добавьте свое наложенное изображение как на входе, как и любой другой файл, как показано в моем примере.
Поскольку вы используете PHP, я предполагаю, что вы собираетесь представить видео через прогрессивную загрузку. Добавьте,
-movflags +faststart
чтобы начать воспроизведение до того, как файл будет полностью загружен.