В общем, нашел "хак". Если в начало сабов добавить еще одну строчку:
Код:
0
00:00:00,000 --> 00:15:00,000
Тогда варнинги пропадают и тайминги нормальные.
Т.е. в начало добавляется "пустая строка" (U+2002)
Насколько я понял, в mp4 проблема с 32-битными числами длин "кусков" сабов.
Бред... И что теперь вручную так извращаться? У меня в автомате несколько тысяч видео переконвертировано с этим багом...
Вроде бы разобрался. Поправьте если не так.
По умолчанию, если просто добавлять сабы в контейнер, им выставляется максимальный фреймрейт: time_base=1/1000000
Поэтому timestamp принимает очень большие значения и не влезает в 32 бита.
Если добавить опцию
-time_base, то она выставляется для сабов и этих проблем уже нет.
Я выставлял такую же как и у дороги видео (1/16000), т.е.:
Код:
ffmpeg -i video.mp4 -i subs.srt -map 0:v -map 0:a -map 1:s -c:v copy -c:a copy -c:s mov_text -time_base 1:16000 out.mp4
Только вот не пойму можно ли задавать какое-то фиксированное, универсальное, значение для всех видео?