2013-08-16 3 views
2

Моя работа потребует от меня кодирования нескольких тысяч фильмов за несколько дней. Каждый фильм должен быть закодирован в трех разных форматах. Я использую 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 

Любые указания очень ценятся. Благодаря!

+0

Хранение может быть узким местом. Это похоже на какое-то общее хранилище, которое вы используете. Это общий ресурс NFS? Посмотрите на структуру загрузки процессора на blade-серверах, чтобы проверить, ждут ли процессы IO или заняты, ожидая какой-либо другой ресурс ОС. –

+0

Действительно, моя догадка - это хранилище, которое является узким местом. К сожалению, у меня нет времени для копирования содержимого с переносимых дисков, которые я получаю. Копирование TBs данных само по себе займет некоторое время. Я просто прикрепляю их к серверам и начинаю кодирование. Прямо сейчас, я пытаюсь предложить alexbuisson. Будет обновляться через пару часов. – souvik

ответ

0

1 кодирование разбиты на несколько п ядра хорошо, но п кодирование параллельно 1 на ядро ​​приведет к насыщению полосы пропускания ...

попытка активировать 4 потока для каждого транскодер, чтобы ускорить пропускную способность 1 видео и предела до 2 или 3 количество видео, которое вы кодируете параллельно, но которое зависит от вашей памяти, от вашей полосы пропускания и от видео (например, от SD до HD)

+0

Спасибо! Попробуйте это прямо сейчас и опубликуйте результаты здесь. Любое эмпирическое правило для оптимальных кодов параллельно и количество потоков, каждый из которых используется в кодировке, или мне нужно ударить по правильной цифре проб и ошибок? Очень ценю вашу помощь. – souvik

+0

Если правило существует, оно должно быть сложным, так как существует много тезисов по распределенной кодировке .... – alexbuisson

+0

Держу пари, это было бы сложно. Хорошо, я последовал твоему совету, и до сих пор он творит чудеса. Теперь я использую ffmpeg с опцией '-threads 4' и используя gnu параллельно с параметром '-j 25%', и каждый час могу выпускать 4 полных кодировки (все три формата) на 16 ядер. Благодаря! – souvik