stprorab
Задача: при конвертации видео файла нужно вставлять текст (что то типа
This video uploaded...) бегущей строкой.
У ffmpeg для этого есть фильтр
drawtext , который по умолчанию вставляет текст на весь видеофайл, т.е. от начала до конца. Для указания конкретного времени отображения текста используется тег
enable=between(t, 10, 20) , где 10 и 20 - время начала и окончания вставки текста, в секундах.
Вопрос: т.к. видосы разной продолжительности, каким образом вставлять текст единажды , продолжительностью 10 сек, в середине видоса ? К примеру, если видос длительностью 3 мин - текст вставляется с 00:01:30 по 00:01:40 .
Понятное дело что можно было бы изначально определять длительность видоса, а затем подставлять нужную цифру в between , но в конкретном случае не выйдет, т.к. нужно оформить это дело одной строкой, которая используется сторонним скриптом в качестве "Опции FFmpeg".
Заранее спасибо!
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"
}
не узнавая сначала длительность видео, никак...
Oswell E. Spencer
Хотя может как то так будет работать, негде сейчас проверить
Код:
between(t, t/2-5 , t/2+5)
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
И да. Спасибо что подтвердил мои догадки. Тоже почему то казалось изначально, что сделать это без предварительного определения длительности - невозможно.