![image](https://habrastorage.org/getpro/habr/post_images/149/a35/0eb/149a350ebcd9fe340c5cd87896583f30.png)
Думаю, большинству хабрапользователей хоть раз да приходилось кодировать видео. Возможно, вы хотели посмотреть свежую серию любимого сериала в метро, а ваш смартфон или иное портативное устройство никак не хотело играть этот кодек, или SmartTV отказывался декодировать звук в видеофайле, либо же вы застряли в 2004 и транскодировали H.264 в MPEG-4 для вашего старого DVD-проигрывателя. Или же, например, сжимали невероятного размера видео, снятое фотоаппаратом, во что-то более-менее приличное по размеру. Наверняка вы замечали, что это не самый быстрый процесс.
Для кодирования видео сделано огромное количество софта, начиная от программ типа «жми крестик чтобы кодировать» и заканчивая софтом, который принимает
AviSynth-скрипты на вход. Однако программы, поддерживающие хоть какое-то распределение кодирования, можно пересчитать по пальцам одной руки.
Что вообще следует понимать под распределенным кодированием видео? В моем представлении, есть 2 разных задачи:
- Кодирование большого количества видеофайлов на множестве компьютеров одновременно
- Кодирование одного видеофайла по частям на множестве компьютеров одновременно
Первая задача подразумевает наличие большого количества видеофайлов, сильно больше, чем компьютеров, на которых их можно кодировать, и довольно легко автоматизируется с использованием CLI-кодировщиков, например,
HandBrake или
FFmpeg и любых средств автоматизации, которые поддерживают распределение, вроде
GNU Parallel или
PPSS (к слову, о нем мало кто знает, рекомендую!).
Вторая же задача подразумевает наличие малого количества файлов и большого числа компьютеров, и она несколько сложнее: нам необходимо, во-первых, разбить файл на маленькие части, во-вторых, перекодировать их, и в-третьих, собрать обратно.