Си шарп, ffmpeg и шрифты


Эта заметка больше для себя, но может кто тут и найдет что полезное. Здесь я покажу несколько тонкостей, которые надо знать при создании надписи на видео с помощью ffmpeg и C#. Данная заметка пересекается с этой, фактически логическое продолжение.

Общий синтаксис команды (опции), накладывающей текст на видео ffmpeg

p.StartInfo.Arguments = " -i \"" + audio + "\" -ignore_loop 0 -i \"" + gifFile
             + "\" -vf \"scale=1080:-1,pad=1080:1920:(ow-iw)/2:((oh-ih)/2)+960:"
             + "color=" + backgroud_color + ","
             + "drawtext=fontfile=" + newStr + ":text='"
        + txt
        + "':fontcolor="+ color_txt + ":x=" + leftText + ":y=" + topText + ":fontsize=" + sizeText + "\" "
        + " -shortest -strict -2 -c:v libx264 -threads 4 -c:a aac -b:a 192k -pix_fmt yuv420p "
        + " -shortest -s 1080x1920 -t "
        + lenght_mp3;
Тут много лишнего, выделим основные переменные:

  • newStr – адрес файла шрифта
  • color_txt – цвет текста
  • leftText – сдвиг текста от верхнего края
  • topText – сдвиг текста от верхнего края
  • sizeText + - размер текста
Задание файла шрифта

Вот тут самое интересное. Во-первых, не все системы Windows понимают, если путь и/или название файла шрифта имеет кириллические символы. Так что лучше их не используйте.

Во-вторых, путь к файлу шрифта должен выглядеть как-то так

newStr = "C\\\\:/Windows/Fonts/arial.ttf";
То есть, например, если путь к файлу шрифта выбирается через элемент openFileDialog (свойство FileName имею в виду), то его надо конвертировать так

newStr = font_file.Replace("\\", "/");
newStr = newStr.Replace(":/", "\\\\:/"); 
Вот пара таких мелочей, которые если бы я знал, то существенно ускорили бы мне написание программы на си шарп, которая с помощью ffmpeg создает видео из гиф и накладывает на него музыку и текст.

Небольшой бонус: как получить список шрифтов, установленных в системе
comboBox1.Items.AddRange(FontFamily.Families.Select(f => f.Name).ToArray());
В итоге, кстати, получилась вот такая программа:

программа конвертации гиф в видео
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, видео, шрифты, ffmpeg




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Перенос сайта на другую CMS
Приключения детей после смерти в другом мире
Алгоритм Soundex на C#