Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (2)

Лучшие ответы пользователя

Все ответы (2)
  • Какие "железные" составляющие влияют на скорость конвертации в ffmpeg?

    @deadmoroz2
    Доброго и вам!

    Собираемся делать массовую обработку видео из mp4 в x264 в HLS формат, для того, чтобы им заменить незащищенный HTML5 плеер на видеоплощадке.

    Можно подойти к задаче несколько иначе, а именно кодировать не в нарезанный на сегменты HLS, этим вы ограничите своё вещание только этим форматом, а в MP4, а уже непосредственно раздачу клиентам делать на базе стороннего модуля для nginx - Kaltura nginx-vod. Озвученное расширение поддерживает вещание во всех распостранённых форматах из MP4 файлов, на лету делая сегментацию для того же HLS.

    В нашем довольно крупном CDN мы пошли именно по такому пути, о чём ни разу не пожалели.

    Что важнее для конвертации видео видеокарта или процессор? Т.к. вроде бы сейчас множество алгоритмов, которые позволяют конвертировать на GPU, и по тестам в интернете они дают существенный прирост. Очень интересно, как обстоят дела в реальном использовании. Сейчас стоит выбор арендовать сервер без GPU, но с мощным набором CPU или наоборот искать компьютер с хорошей видеокартой.

    Если выбор пал на ffmpeg, то выбор в нём ограничен софтверным транскодингом на CPU или же аппаратно ускоренным средствами Intel QuickSync и Nvidia NVENC.

    Самое медленное делать весь процессинг на CPU, сюда попадёт decoding, deinterlacing (если нужно), scaling и encoding, последнее самое ресурсоёмкое. У себя несколько лет назад оценивали производительность на разных CPU: серверных одиночных Intel Xeon E3 v3/v4/v5/v6, парных Intel Xeon E5 v2/v3, а так же десктопных Intel Core i7-3930K и AMD FX-6300. Оказалось, что многоядерные процессоры Xeon E5 не давали кратный прирост скорости кодирования, т.к. decoding по сути однопоточный, соотвественно для него лучше одно высокочастотное ядро. Это справедливо для одиночного процесса ffmpeg, но никто не запрещает запускать нужное количество параллельно.

    Intel QuickSync использует встроенное процессор видеоядро Intel HD, а это основном свежие десктопные модели или относительно редкие модели Xeon E3 с индексом, оканчивающимся на 5-ку. Позволяет вынести весь процессинг на GPU. Даёт ускорение кодирования в несколько раз. Не самое универсальное решение, к тому же с кучей неудобств и ограничений в серверном сегменте.

    Nvidia NVENC требует в системе выделенного GPU (GTX, Quadro, Tesla), количество видеокарт ограничено только наличием свободных PCIe слотов, места под их установку и подвода питания, если оно требуется. Также позволяет вынести весь процессинг на GPU. Ускорение получалось от 8 до 20 раз относительно софтового средствами Xeon E3 в зависимости от количества выходных разрешений. Экономически оно тоже оправдано, т.к. пара GPU будет стоить значительно дешевле пары средне-топовых процессоров E5. Со свой стороны я бы рекомендовал смотреть в этом направлении.

    Сами начинали с программного CPU, но как только появилась первая подержка Nvidia GPU в ffmpeg, плавно перевели всё на аппаратное кодирование нa GPU. На руку этому решению сыграло наличие уже купленных 1U серверов на базовых E3, в которые оказалось достаточно доустановить однослотовую самую бюджетную Quadro за 10-20% цены нового такого сервера и получить минимум 5-ти кратное увеличение производительности транскодинга при одновременной разгрузке почти в ноль основного CPU.

    Можно ли экономить на ОЗУ и скорости SSD, или они тоже играют существенную роль?

    По опыту даже для пары десятков параллельно запущенных ffmpeg с вашим профилем большого объёма RAM не требуется. Об SSD стоит задумываться только тогда, когда вам потребуется произвольно считывать с HDD на скорости свыше 400-500Mbps, запись же прекрасно кэшируется. HDD же конечно должны быть не SMR.
    Ответ написан
    1 комментарий