С нами с 06.10.11
Сообщения: 295
Рейтинг: 258
|
Добавлено: 30/07/18 в 13:59 |
Задача: при конвертации видео файла нужно вставлять текст (что то типа This video uploaded...) бегущей строкой.
У ffmpeg для этого есть фильтр drawtext , который по умолчанию вставляет текст на весь видеофайл, т.е. от начала до конца. Для указания конкретного времени отображения текста используется тег enable=between(t, 10, 20) , где 10 и 20 - время начала и окончания вставки текста, в секундах.
Вопрос: т.к. видосы разной продолжительности, каким образом вставлять текст единажды , продолжительностью 10 сек, в середине видоса ? К примеру, если видос длительностью 3 мин - текст вставляется с 00:01:30 по 00:01:40 .
Понятное дело что можно было бы изначально определять длительность видоса, а затем подставлять нужную цифру в between , но в конкретном случае не выйдет, т.к. нужно оформить это дело одной строкой, которая используется сторонним скриптом в качестве "Опции FFmpeg".
Заранее спасибо!
|
|
|
|
+
С нами с 09.05.17
Сообщения: 661
Рейтинг: 586
|
Добавлено: 30/07/18 в 15:01 |
тебе нужно получить длительность видео через 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"
}
|
не узнавая сначала длительность видео, никак...
|
|
|
|
+
С нами с 09.05.17
Сообщения: 661
Рейтинг: 586
|
Добавлено: 30/07/18 в 15:09 |
Хотя может как то так будет работать, негде сейчас проверить
Код: | between(t, t/2-5 , t/2+5) |
|
|
|
|
С нами с 06.10.11
Сообщения: 295
Рейтинг: 258
|
Добавлено: 30/07/18 в 15:26 |
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 |
И да. Спасибо что подтвердил мои догадки. Тоже почему то казалось изначально, что сделать это без предварительного определения длительности - невозможно.
|
|
|
|
С нами с 14.03.14
Сообщения: 294
Рейтинг: 410
|
Добавлено: 30/07/18 в 15:31 |
а у парней из поддержки KVS не спрашивал?
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |