Моя работа потребует от меня кодирования нескольких тысяч фильмов за несколько дней. Каждый фильм должен быть закодирован в трех разных форматах. Я использую ffmpeg для вывода этих форматов параллельно с одним чтением источника ввода, как описано здесь: http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputsffmpeg и gnu parallel
Кроме того, я использую GNU Parallel для кодирования из нескольких видеофайлов параллельно. У нас есть четыре blade-сервера различных конфигураций (48, 32, 16 и 16 ядер), которые кодируют видео параллельно. В идеале мы должны иметь возможность кодировать 112 видео параллельно.
Однако, похоже, что кодирование выполняется быстрее на машинах с меньшими ядрами. У меня 16 завершенных кодов на 16-ядерных серверах примерно за 4 часа, а для 48-битной системы требуется около 10 часов для 48 кодировок. Что может быть узким местом? Типичная команда кодирования выглядит следующим образом:
ffmpeg -i sample.mpg -y -vcodec libx264 -vprofile baseline -level 30 -acodec libfdk_aac -ab 128k -ac 2 -b:v 500K -threads 1 encoded/sample_enc.mp4
Любые указания очень ценятся. Благодаря!
Хранение может быть узким местом. Это похоже на какое-то общее хранилище, которое вы используете. Это общий ресурс NFS? Посмотрите на структуру загрузки процессора на blade-серверах, чтобы проверить, ждут ли процессы IO или заняты, ожидая какой-либо другой ресурс ОС. –
Действительно, моя догадка - это хранилище, которое является узким местом. К сожалению, у меня нет времени для копирования содержимого с переносимых дисков, которые я получаю. Копирование TBs данных само по себе займет некоторое время. Я просто прикрепляю их к серверам и начинаю кодирование. Прямо сейчас, я пытаюсь предложить alexbuisson. Будет обновляться через пару часов. – souvik