Если нужно сделать повторный стриминг небольшого файла (или просто сделать большой файл из нескольких повторов маленького), то поможет такая команда:
ffmpeg -re -f lavfi -i "movie=filename=/some/path/input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" -ar 44100 -f flv rtmp://some.server/app/live
Чуть подробнее:
-re
процессит входные фреймы так, как если бы это был live stream- формат входного файла
lavfi
говорит, что входной файл, это не регулярный файл, устройство или сетевой ресурс, а описание графа фильтра (комплексного) - соответственно аргументом
-i
становится описание графа фильтра: 1.movie
- фильтр задаёт источник данных, а его параметрloop=N
задаёт число повторов, 0 - бесконечное число раз, отличное от нуля - будет сделано именно такое число повторов. 2.setpts
- предыдущий фильтр действует принципу KISS: попросили повторять файл - буду, но PTS будет оставаться без модификаций, соответсвенно муксеру это может (и даже, скорее всего, обязательно) показаться неприятным. Соответственно нам нужно пересчитать PTS на основе прошедших (N
) кадров, фреймрейта (FRAME_RATE
) и time-base входного PTS (TB
, про time-base я уже писал)
Дальнейшие опции роли не играют и могут сильно варьироваться. Выходным файлом может быть что угодно. Проблемы могут быть с входными файлами с переменным фреймрейтом, но я таких не видел.
Продублировал как ответы на вопросы на сайта Stack Exchange: