LINUX.ORG.RU

Фильтры FFMPEG. Проблема

 ,


0

0

Здравствуйте.

Есть скрипт, который показывает водный знак каждые N секунд, работает отлично

-i source.mp4 -loop 1 -i watermark.png -filter_complex "[1]trim=0:999,fade=in:st=0:d=1:alpha=1,fade=out:st=9:d=1:alpha=1,loop=999:7000:0,setpts=N/24/TB[w];[0][w]overlay=main_w-overlay_w-10:main_h-overlay_h-10:shortest=1" -vcodec h264_nvenc -level 4.1 -rc vbr_2pass -c:a aac -b:a 128k out.mp4

Но я захотел добавить учитывание размеров видео, а то на больших FULLHD выглядит опрятно, а на 480P на пол экрана Вот второй скрипт, который это делает

-i source.mp4 -i watermark.png -filter_complex "[1:v][0:v]scale2ref=iw*0.05:(iw*0.05)*1.42[logo1][base];[base][logo1]overlay=0:0[v]" -map [v] -map 0:a -y -b:v 1600k -vcodec h264_nvenc -level 4.1 -rc

Пробую слепить их в одно целое и все время какая-то ошибка. Могли бы друзья-программисты помочь с проблемой. Буду очень признателен

Может тебе в скрипте узнать размер видео и делать разные параметры для ffmpeg в зависимости от него?

P.S. а может не надо водяные знаки?..

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

База видео очень большая и ручками что-то делать не вариант. P.S. Моя просьба слишком времязатратная или почему советуете не использовать ?

dentaltube
() автор топика
Ответ на: комментарий от dentaltube

P.S. Моя просьба слишком времязатратная

Если «времязатратная» в смысле времени перекодирования, то зависит от мощности твоего железа и смысла перекодирования.
Если «времязатратная» в смысле реализации скрипта, то если умеешь хоть в какой-нибудь скриптовый язык типа bash/python/perl то вообще не проблема, от силы пара минут.

или почему советуете не использовать ?

Если видео не созданное тобой а просто скачанное чужое и ты решил пропиарить себя наложив водяной знак, то это выглядит «не очень красиво».

V1KT0P ★★
()
Ответ на: комментарий от deep-purple

Все еще нет, актуально В долгу не останусь

dentaltube
() автор топика
Ответ на: комментарий от dentaltube

Вот пример как на bash скрипте можно сделать. Не надо все пихать в одну строку если можно разбить на части, так понятнее будет и проще реализовать.

watermark.sh:

#!/bin/bash
#./watermark.sh source.mp4 watermark.png out.mp4

#get source size
IFS='x' read -r -a sourceSize <<< "$(ffprobe -v error -show_entries stream=width,height -of csv=p=0:s=x $1)"
sourceWidth=${sourceSize[0]}
sourceHeight=${sourceSize[1]}

#get watermark size
IFS='x' read -r -a watermarkSize <<< "$(ffprobe -v error -show_entries stream=width,height -of csv=p=0:s=x $2)"
watermarkWidth=${watermarkSize[0]}
watermarkHeight=${watermarkSize[1]}

#find minimum side of the video
if [ "$sourceWidth" -gt "$sourceHeight" ]; then
    #"horizontal video"
    sourceMinSize=$sourceHeight
else
    #"vertical video"
    sourceMinSize=$sourceWidth
fi

#calc new watermark size and distance from border
watermarkNewWidth=$(($watermarkWidth * $sourceMinSize / 1080))
watermarkNewHeight=$(($watermarkHeight * $sourceMinSize / 1080))
watermarkMoveDistance=$((10 * $sourceMinSize / 1080))

ffmpeg -i $1 -loop 1 -i $2 -filter_complex "[1]scale=$watermarkNewWidth:$watermarkNewHeight[scaled_logo];[scaled_logo]trim=0:999,fade=in:st=0:d=1:alpha=1,fade=out:st=9:d=1:alpha=1,loop=999:7000:0,setpts=N/24/TB[final_logo];[0][final_logo]overlay=main_w-overlay_w-$watermarkMoveDistance:main_h-overlay_h-$watermarkMoveDistance:shortest=1" -vcodec h264_nvenc -level 4.1 -rc vbr_2pass -c:a aac -b:a 128k $3
V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Огромное спасибо, но есть один косяк с моей стороны. Работаю под виндой, в тулзе AnotherGUI (http://www.stuudio.ee/anothergui/). Этот код можно как-то туда прилепить? Еще раз прошу прощение что не уточнил и пишу на форуме линуксоводов.Вот скрин окна настройки пресетов: i.imgur.com/EhF5TAc.jpg

dentaltube
() автор топика
Ответ на: комментарий от V1KT0P

Я понимаю что могу ручками по 1 видео обрабатывать из под консоли, но база видео слишком большая для мануального решения вопроса, без софта никак :(

dentaltube
() автор топика
Ответ на: комментарий от V1KT0P

Или сказать скрипту что б он брал все видео из папки и проверял,если его нету посчитанного то начинал работать и так перебирал каждое. Для этого кажется есть параметр «-n»

dentaltube
() автор топика
Ответ на: комментарий от dentaltube

Ну раз так, попробуй вот так:

ffmpeg -i source.mp4 -loop 1 -i watermark.png -filter_complex "[1:v][0:v]scale2ref='(main_w*min(iw,ih))/1080:(main_h*min(iw,ih))/1080'[scaled_logo][video];[scaled_logo]trim=0:999,fade=in:st=0:d=1:alpha=1,fade=out:st=9:d=1:alpha=1,loop=999:7000:0,setpts=N/24/TB[final_logo];[video][final_logo]overlay='main_w-overlay_w-((10*min(main_h,main_w))/1080)':'main_h-overlay_h-((10*min(main_h,main_w))/1080)':shortest=1" -vcodec h264_nvenc -level 4.1 -rc vbr_2pass -c:a aac -b:a 128k out.mp4

То-же самое что и в скрипте, если ничего не напутал. В scale2ref беру наименьшую сторону и по ней вычисляю нужный размер лого. В overlay также беру наименьшую сторону и вычисляю смещение от границы в зависимости от размера видео.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Обязательно, еще раз выражаю огромную благодарность, удачи

dentaltube
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.