Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: theshit в Dec 27, 2013, 16:12



Титла: ffmpeg: фиксиране на лого в клип, при конвертиране
Публикувано от: theshit в Dec 27, 2013, 16:12
Здравейте, как да направя така, че логото да е с едни и същи размери при всички клипове, които конвертирам с ffmpeg. Идеята е такава, че при клипове с голяма резолюция логото излиза нормално а при клипове с малка такава - логото излиза огромно. Няма  ли някакъв начин да въведа размера на логото в процент а не в пиксели?  ??? ??? Мисля, че все трябва да има някакъв начин  >:(


Титла: Re: ffmpeg: фиксиране на лого в клип, при конвертиране
Публикувано от: neter в Dec 27, 2013, 18:49
Не зная и не намирам такава опция във филтрите на ffmpeg (между другото, поне в Debian 7 вече се казва avconv), затова ще ти предложа да си направиш изчислението за размера извън командата и след това да плесваш готовата стойност във филтрите. Изчислението можеш да го направиш например така:
Код
GeSHi (Bash):
  1. video_file='/път/до/видео/файла'
  2. logo_file='/път/до/логото'
  3. logo_size_percent=5
  4. output_file='/път/до/крайния/файл'
  5.  
  6. video_size=$(exiftool $video_file | awk '/Image Size/ {print $4}')
  7. video_width=${video_size%x*}
  8. video_height=${video_size#*x}
  9.  
  10. logo_width=$((video_width*$logo_size_percent/100))
  11. logo_height=$((video_height*$logo_size_percent/100))
  12.  
  13. avconv -i $video_file -vf "movie=$logo_file, scale=$logo_width:$logo_height [watermark]; ....." $output_file
Тук използвам инструмента ExifTool ($2), за да взема размерите на видеото. Ако го нямаш инсталиран, пакетът в Debian-базираните дистрибуции е libimage-exiftool-perl. В RedHat-базираните май е perl-Image-ExifTool. По принцип размерите на видеото могат да се видят и директно с avprobe (ffprobe, "ffmpeg -i", "avconv -i"), но форматът на изписване там не е така ясен, зад размера понякога има запетая, друг път има интервал... може да се направи и с него, но е по-чупливо, така че, ако имаш възможност за exiftool, ползвай него.

П.П.: Забравих да кажа, че при горния вариант (задаване и на височина, и на широчина, на логото) логото няма да си запазва пропорциите с оригиналната картинка, а ще се сплесква и разтегля спрямо процентното съотношение на височината и широчината на видеото. Ако пропорциите на логото трябва да се запазят такива, каквито са в оригиналната картинка, тогава премахваме изчисленията за височина и в avconv (ffmpeg) заменяме височината на логото с "-1". Т.е.
Код
GeSHi (Bash):
  1. video_file='/път/до/видео/файла'
  2. logo_file='/път/до/логото'
  3. logo_size_percent=5
  4. output_file='/път/до/крайния/файл'
  5.  
  6. video_width=$(exiftool $video_file | awk '/Image Width/ {print $4}')
  7.  
  8. logo_width=$((video_width*$logo_size_percent/100))
  9.  
  10. avconv -i $video_file -vf "movie=$logo_file, scale=$logo_width:-1 [watermark]; ....." $output_file