Какими ключами задать ffmpeg повтор и ожидание при закачке ts из m3u8 (HLS)?
Закачиваю себе HLS-поток при помощи ffmpeg (Windows 7 Pro 64 bit Rus) командой
ffmpeg.exe" -i "URL m3u8" -c copy "имя.mp4"
и внезапно замечаю, что часть сегментов не качается или качается не до конца из-за нестабильного Интернета. В результате итоговый mp4-файл выходит битым.
Нет ли каких ключей командной строки, чтобы ffmpeg не выбрасывал сбойный сегмент, а выкачивал его "до победного"? Или же скачивал отдельно маленькие ts-ики и где-то для себя помечал, какие из них не скачались, чтобы при следующем перезапуске скачивал бы только их?
Предложенные в Интернете решения перезакачивают весь фильм целиком, мне так не надо, потому что файл большой и по теории вероятности на нём всегда возникают сбои, каждый раз на новом месте, и скачать фильм никак не удаётся. Вот если бы сохранялись успешные закачки ts-сегментов с предыдущих попыток, можно было бы выкачать за несколько раз, а так - Сизифов труд и Танталовы муки.
Или опять всё руками - самому парсить m3u8 и выкачивать ts-ики, как раньше?
Чтобы сохранялись промежуточные закачки, предлагаю сохранять выкачанное фрагментами по 2-10сек (зависит от длины сегмента стрима). Потом сделаете 1 конкат для файлов и получите большой фильм. Фильтр -f segment в помощь.
Да по кусочкам я и так сам выкачаю через m3u8 и незачем ffmpeg'у мучать, тем более, что каждый раз будет грузиться *.exe по 60 Мб - брррр. Тут идея ровно в том, что подаёшь на вход m3u8 и получаешь сразу готовый mp4.
Но за ключи спасибо, попробую и, если подойдёт, отмечу решением.
DWZ, разница в том, что при -f segment ffmpeg сам будет выкачивать по кусочкам (при этом грузиться он будет 1 раз). Поэтому если соединение оборвется, останется столько-то завершенных файлов.
Попробовал. Последний параметр пришлось увеличить аж до 200, но и то примерно каждый 4 файл - битый. Плюс в начале закачки, когда ffmpeg жалуется, что "MIME type not RFC compliant" появилась ошибка "end of file", которую ffmpeg пытается забороть, удваивая время между попытками до достижения тех самых 200 сек, причём 2 раза, что существенно удлиняет закачку. Можно было бы спросить ключ, как это побороть или просто терпеть, если бы работло, но - увы (((((
ffmpeg, похоже, не перекачивает ts-файлы, которые скачались не до конца - как только ошибка "stream size такой, а должен быть сякой", как сразу лезут ошибки DTS, и файл оказывается битый.
Так что придётся вернуться к истокам. Обидно, что есть вещь, а пользоваться ей всё рано нельзя. Но всё равно спасибо за участие.
h8nor, Мне НЕ нужно расширение, у меня автоматическая обработка заранее заданного списка. К тому же все расширения, которые мне попадались, нещадно тупили (от хорошей жизни , что ли, я стал качать сам?). И что-то меня сомнения гложут, что расширение будет отрабатывать reconnect И докачку сегментов. Так что даже смотреть не буду
P.S. И когда только люди научатся отвечать на вопрос, который задали, а не на который удобнее отвечать :((((((((
DWZ, не стоит благодарностей :)
Писали пару раз с полтоковой трансляции без кусков и обрывов. Внутри тот же ffmpeg, и никакой магии. Если у вас кусками пишет, значит соединение плохое.
Ответ на ваш последний вопрос: никогда. Зачем что-то менять, если все работает ))
Писали пару раз с полтоковой трансляции без кусков и обрывов
- Доктор, у меня болит нога
- Странно, у меня такая же нога, но почему-то не болит
Внутри тот же ffmpeg, и никакой магии
И поэтому под управлением addon'a ffmpeg будет делать то, что stand alone не способен, так?
Если у вас кусками пишет, значит соединение плохое.
А я-то думал, в чём тут дело? А оказывается, всего-то навсего соединение плохое. Спасибо, Вы меня здорово выручили, сам бы я ни за что не догадался бы до этой прстой истины
Зачем что-то менять, если все работает ))
Если бы всё работало, я бы сюда не пришёл вопросы задавать.