Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Бегущая строка с помощью ffmpeg
цитата
30/07/18 в 13:59
 stprorab
Задача: при конвертации видео файла нужно вставлять текст (что то типа This video uploaded...) бегущей строкой.
У ffmpeg для этого есть фильтр drawtext , который по умолчанию вставляет текст на весь видеофайл, т.е. от начала до конца. Для указания конкретного времени отображения текста используется тег enable=between(t, 10, 20) , где 10 и 20 - время начала и окончания вставки текста, в секундах.

Вопрос: т.к. видосы разной продолжительности, каким образом вставлять текст единажды , продолжительностью 10 сек, в середине видоса ? К примеру, если видос длительностью 3 мин - текст вставляется с 00:01:30 по 00:01:40 .

Понятное дело что можно было бы изначально определять длительность видоса, а затем подставлять нужную цифру в between , но в конкретном случае не выйдет, т.к. нужно оформить это дело одной строкой, которая используется сторонним скриптом в качестве "Опции FFmpeg".

Заранее спасибо!
цитата
30/07/18 в 15:01
 Oswell E. Spencer
тебе нужно получить длительность видео через ffprobe и на основе этих данных посчитать куда вставлять бегущую строку ( movieDuration/2 )

Пример функции на golang для данной задачи

Код:


func getDuration(videoPath string) string {

   args := " -i " + videoPath + " -show_format -v quiet"

   parts := strings.Fields(args)
   cmd := exec.Command("ffprobe", parts...)

   var out bytes.Buffer
   cmd.Stdout = &out

   err := cmd.Run()
   if err != nil {
      log.Printf("ffprobe finished with error: %v", err)
   }

   re1 := regexp.MustCompile(`duration=(.\d*)`)
   result1 := re1.FindAllStringSubmatch(out.String(), -1)
   if len(result1) != 0 {
      return result1[0][1]
   }
   return "0"

}



не узнавая сначала длительность видео, никак...
цитата
30/07/18 в 15:09
 Oswell E. Spencer
Хотя может как то так будет работать, негде сейчас проверить

Код:
between(t, t/2-5 , t/2+5)
цитата
30/07/18 в 15:26
 stprorab
Oswell E. Spencer писал:
Хотя может как то так будет работать, негде сейчас проверить

Код:
between(t, t/2-5 , t/2+5)

Не, так я пробовал еще до того как топик этот создавать. К сожалению не работает.

Про ffprobe я тоже знаю, но к сожалению в данном случае такой вариант не подходит, т.к. в скрипте (KVS в данном случае) есть только поле , в которое можно вписать только опции ffmpeg , которые потом выполняются как :
Код:
/usr/bin/ffmpeg -y -i input_file.mp4 тут_опции_которые_вписаны_в_поле  output_file.mp4


И да. Спасибо что подтвердил мои догадки. Тоже почему то казалось изначально, что сделать это без предварительного определения длительности - невозможно.
цитата
30/07/18 в 15:31
 Gromyko
а у парней из поддержки KVS не спрашивал?


Эта страница в полной версии