Разрешить MEncoder использовать больше процессора
Я использую MEncoder, чтобы объединить огромное количество изображений JPG в замедленном видео. У меня есть две основные папки с примерно 10 подпапками в каждой, и для автоматизации процесса, который я запускаю:
find . -type d -name img -exec sh -c '(cd {} && /Volumes/SAMSUNG/PedestrianBehaviour/BreakableBonds/jpg2avi.sh t*)' ';'
где jpg2avi - настройки для MEncoder.
mencoder 'mf://t00*.jpg' -mf fps=10 -o raw.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=2000 -o out.avi
Чтобы распараллелить его, я запустил эту команду в двух папках BreakableBonds и UnBreakableBonds. Однако каждый процесс использует только около 27%, то есть чуть больше 50%. Есть ли способ, которым я могу ускорить это? так что каждый процесс занимает около 50%. (Я знаю, что 50% на каждый процесс не представляется возможным.)
1 ответ
В зависимости от используемого видеокодека (хороший выбор - x264), один кодировщик должен насыщать несколько ядер процессора. Я обычно использую ffmpeg напрямую, потому что mencoder был разработан с некоторыми AVI-подобными допущениями.
Посмотрите вики-страницу ffmpeg о том, как это сделать.
Опять же, я бы настоятельно рекомендовал h.264 в контейнере mkv или mp4, а не в контейнере avi. h.264 в avi - это хак, а обычным кодеком для avi является divx (h.263). h.264 - это большой шаг вперед.
h.264 для видео, а mp3 для аудио: первый достаточно хороший кодек, появившийся как раз в то время, когда процессоры становились достаточно быстрыми, чтобы делать это в реальном времени, а диски и сети были способны обрабатывать файлы с хорошим размером. качественный. Используйте его с ffmpeg в качестве внешнего интерфейса для libx264.
h.265 (и vp9) являются лучшими кодеками (с точки зрения эффективности сжатия), чем h.264, но гораздо менее широко поддерживаются и занимают больше процессорного времени. Если вы хотите использовать их, используйте ffmpeg в качестве интерфейса для libx265 или libvpx. x265 находится в стадии интенсивной разработки, поэтому, вероятно, он улучшен, но несколько месяцев назад, при равном времени процессора кодирования, x265 не побил x264 по качеству на битрейт. Учитывая гораздо больше процессорного времени, x265 может отлично справиться с задачей и создавать хорошо выглядящие кодировки с гораздо меньшей скоростью передачи данных, чем x264.
Все 3 из этих кодеков являются многопоточными и могут насыщать 4 ядра даже при быстрых настройках. При более высоких настройках (тратя больше процессорного времени на блок), вы можете насытить не менее 16 ядер, я думаю. Я не уверен, но я думаю, что вы можете эффективно использовать 64 ядра, а может и больше, в кодировке HD x265.
При быстрых настройках и высоких битрейтах последний этап энтропийного кодирования в стиле gzip (например, CABAC для x264) ограничивает количество процессоров, которые вы можете занять. Это последовательная задача, поэтому весь код выполняется только так быстро, как один процессор может сжать конечный поток битов.