Pull to refresh

Comments 34

Великолепная вещь! Являясь медиа-компанией периодически кодировать видео приходится всем, кроме водителей и уборщиц. Давно думал о чем-то подобном. Было бы замечательно раскинуть worker`ы и клиенты на все станции, с возможными лимитами на процессор, общей очередью и простым гуем. Вот только все клиенты на винде.
В любом случае огромное спасибо за работу, ушел смотреть.
Надеюсь, скоро все будет. Пожалуйста не забывайте, что это всего лишь анонс первого коммита :)
Очень очень нужный проект! Вот только указанная проблема с возможной рассинхронизацией все портит. Можно хотя бы перед началом работы определить такие файлы и пускать их в однопоточную обработку, а не через этот комбайн?

Кстати что-то может испортиться если на разных серверах стоят разные ОС и разные версии ffmpeg?
Можно хотя бы перед началом работы определить такие файлы и пускать их в однопоточную обработку, а не через этот комбайн?

Конечно. Это можно посмотреть через mediainfo, например. VFR — нечастое явление в современном видео.
Вполне возможно, что некоторые VFR-файлы работают правильно, я только на одном проверил.

Кстати что-то может испортиться если на разных серверах стоят разные ОС и разные версии ffmpeg?

Предполагается, что в будущем будет статическая сборка ffmpeg с воркером.
ArjLover, сейчас попробовал другое VFR-видео — все работает, рассинхрона нет.
Да, спасибо, крепко задумался как бы это попробовать… для серверов не в одном ДЦ скорость передачи исходника может оказаться значительной…
Но пока наткнулся на еще одну проблему тоже с рассинхроном, может знаешь в чем тут дело. Мне надо нарезать из файла на час-полтора несколько кусочков, с перекодированием конечно. Если нужный кусок начинается в 55 минут, то по команде
ffmpeg -i source.avi -ss 55:00…
ффмпег начинает проигрывать этот файл до нужного момента, именно декодировать, конечно в 8 ядер он доползает до нужного места минут за 5, но иногда встречаются файлы которые он умеет только в одно ядро и тогда он доматывает минут за 15-20… Кошмарная потеря времени! На днях узнал что можно поменять опции местами(!) и это приведет к интересному эффекту (они точно курили когда это делали)
ffmpeg -ss 55:00 -i source.avi…
эта команда заставляет прыгнуть сразу на нужное место и заняться делом. Но тут у большинства файлов или просто у всех на выходе получается серьезный рассинхрон видео со звуком… А счастье было так близко… Кто-нибудь понимает в чем тут проблема?
Ыхыхы.
На самом деле, все довольно умно, просто не очень очевидно. Параметры до инпута (-i) отвечают за одно, а после — за другое. И в этом случае так же: -ss перед инпутом делает seek() на потоке, а после инпута — что-то вроде seek() внутри декодера.
Дело в том, что -ss перед -i ищет по GOP, а после -i может искать точно. И их можно комбинировать.

Например, вы примерно знаете размер GOP, да даже если не знаете.
ffmpeg -ss 00:53:50 -i source.avi -ss 00:00:10 …

Т.е. сначала будет примерный seek() файла по времени, а потом точное декодирование 10 секунд.

Но рассинхрона в любом случае быть не должно, может быть у вас какой-то поломанный файл, или ffmpeg старой версии?

В общем, man ffmpeg-all.
Если я правильно понял, то это stream copy без перекодирования? Как я упомянул выше, мне нужно обязательно перекодировать — с нужным битрейтом и в mp4 для онлайн просмотра.
Вы вполне можете одновременно резать и перекодировать сегменты.
ffmpeg -i cut-002.mkv -map 0 -f segment -segment_time 00:00:30 -reset_timestamps 1 -c copy -c:v libx264 -preset faster -crf 20 precure-%02d.mkv

На выходе вы получите перекодированные precure-00.mkv, precure-01.mkv…
Очень рекомендую еще про опцию map почитать.
Кажется я понял что делает этот комплекс опций. Это не совсем то, мне не надо просто разрезать весь файл на куски. Мне надо сделать несколько кусков по одной минуте с точно определенного места.
film.arjlover.net/info/adjutant.ego.prevoshoditelstva.1.avi.html
вот фильм, для него отобраны некоторые удачные скриншоты, хочу еще сделать онлайн просмотр точно одной минуты именно с этого места по нажатию на кадр. Это все чтобы люди могли более точно узнать и вспомнить фильм. Думаю segment & map тут лишние — а вот первый вариант должен помочь, а то 6 раз мотать до 90 минут — холостого хода больше чем нужной работы.
Я всегда знал что если один убивает несколько дней(!) на решение проблемы, то обязательно есть другой кто просто знает готовый ответ. Вся сложность — найти этого другого. )))
Правильно понимаю? что указанная строчка приземлит меня точно в 54:00 минуту и без рассинхрона? Насколько большим должен быть второй параметр для 100% гарантии? Длина фрейма?
Нет, не точно на 54 минуту. -ss перед input ищет по GOP, «округляя» в левую сторону, т.е. у вас получится где-то, не знаю, 00:53:49, например. Вам нужно подгонять -ss после -i, чтобы вырезать нужную часть.

В общем, я вам выше про -f segment написал, вам нужно использовать именно его, он сам все нарежет.

У вас там не HLS, случаем? А то ffmpeg умеет HLS делать самостоятельно.
>Богом забытый msmpeg2 в avi в HEVC в mkv? Да запросто!
avi тоже правильно режется для правильной раздачи workerам?
Да. Все исходные файлы режутся и муксируются в mkv, воркеры получают mkv, потом можно соединить в любой контейнер.
Простите за занудство, а почему именно mkv? Он разве может содержать любые видео-форматы?
Harmonic ProMedia Carbon умеет кодировать фермами, но его цена заоблачна.
Вот бы мануал в репозитории заиметь. Может Wiki какую-нибудь?
Прошло почти 3 года, и судя по пословице 4 апреля 2017 всё обязано быть :)
Сервис, который я хотел использовать для аренды вычислительных мощностей, закрылся почти сразу после выхода этой статьи, но я нашел новый. Я задумываюсь над развитием идеи, возможно, запущу публичную демку на взломанных дедиках.
Ну, я уже написал свой распределённый перекодировщик с сервером очередей и куртизанками :). Логика как оказалась довольно проста, нарезал файл, раздал задачи и пусть воркеры трудятся.
Поделитесь с сообществом )
Если работодатель будет не против ;)
как бальзам на душу! На прошлой неделе размышлял о таком!!! При ближайшей необходимости буду пробовать.
Спасибо, очень одобряю! :)
Хотелось бы чтобы в скором времени была возможность добавлять свои мощности в некую общую сеть кодировщиков и по принципу торрент-трекеров на основе рейтингов кодировать и «чужое», когда ресурсы простаивают, но и в ответственный момент запустить на кодирование и свои нужды.
Подскажите, а у вас не было проблем с конкатенацией MPEG-ов?
У нас FFMPEG съедает 1 кадр при конкатенации, хоть ты тресни. Если сливать больше 2 файлов, то начиная с третьего — съедается первый кадр каждой склейки.
Не годится, он клеит только в MKV с переменным битрейтом (несмотря на мои очевидные попытки сказать ему --compression -1:none)
А нам нужно MPEG CBR в MPEG CBR
Ну, так, вам нужно перекодировать в mpeg cbr, контейнер тут не при чем. Параметр --compression у mkvmerge означает, если я не ошибаюсь, сжатие потока и/или заголовка контейнера (через zlib и другие методы).
Перекодирование как раз не нужно. Исходники MPEG CBR, несколько кусков. Их нужно склеить без перекодирования, простая конкатенация с рестримом потом (чтобы заголовки нормальными были).
Из командных утилит только FFMPEG это умеет делать, но, как оказалось -криво
Скиньте семпл, я посмотрю.
Хех. Пока искали ответ снаружи, нашелся внутри. Свежий FFMPEG умеет правильно склеивать, если ему скормить
ffmpeg -i concat:"имяфайла1|имяфайла2|etc..."
то есть использовать протокол, а не фильтр, как в старом.
Sign up to leave a comment.

Articles