Есть задача организовать запись видео по расписанию через ffmpeg. Но очень критично важно, чтобы запись начиналась ровно в назначенное время, например в 09:00:00. Продолжительность тоже должна быть точной, например 60 минут 00 секунд.
С ключом -t знаком, он устанавливает продолжительность кодирования/записи. Это решает вопрос с длительностью файла. Однако, не понимаю, как подготовить ffmpeg, чтобы он начинал запись ровно в назначенное время, ведь он только в это время начинает стартовать и получается начало записи сдвигается на 1-2 секунды. Собственно и весь вопрос, возможно ли это исправить?
Нельзя. Можно только генерировать постоянно поток таймкода отдельной софтиной, включать запись в ffmpeg чуть заранее, подмешивая таймкод, а потом, после окончания записи, обрезать по таймкоду и удалять его поток.
Moskus, можете поподробнее рассказать про отдельную софтину, как с помощью нее взаимодействовать с ffmpeg?
И может быть Вы знаете, подобный софт (как ffmpeg), с помощью которого можно решить мою задачу более элегантно?
MusicMan_08, берете софтовый генератор LTC типа этого anthonymillerdesign.net/blog/reaper-ltcmtc-setup , стартуете, а потом, когда запускаете ffmpeg, берете с соответствующего аудиоинтерфейса (через какой-нибудь https://www.vb-audio.com/Cable/ ) аудиопоток таймкода.
"Более элегантно" == "существенно дороже", если вас интересует также легальность решения задачи. Потому что придется использовать профессиональные коммерческие решения типа AVID Interplay - такие программы умеют сидеть и ждать определенного момента для начала/конца записи, синхронизируясь с NTP-сервером, отдающим точное время.
Moskus, конечно не уверен. Поэтому и интересуюсь. В приоритете opensource, но коммерческие решения также интересны, просто чтобы понимать как это может работать.
реалтайм программирование - это вообще отдельная песня, поэтому решения для вашего случая нет - просто запуск и инициализация цепочки кодеков может занять больше секунды. То есть в принципе на обычном компе, в условиях многозадачной ОС привязываться к срокам менее секунды - нет смысла.