FFMPEG / x264: можно ли использовать проход 1 из одного сеанса кодирования в качестве прохода 2 для другого?

653
Mark Gerolimatos

Вопрос:

Разрешено ли использовать кодирование «pass 1» исходного видео с одним разрешением / битрейтом в качестве входа для кодирования «pass 2» того же источника с другим разрешением / битрейтом? Я попробовал это, и это похоже на работу, но я не совсем уверен, что это будет в общем случае: профиль потока (выбор кадра I / P / B и т. Д.) Выглядит иначе, чем использование одних и тех же параметров для обоих проходов, но также выглядит "достаточно хорошо".

Я нахожусь в точке, где мне нужен авторитетный ответ на этот вопрос.

Почему в tarnation 1 вы бы это сделали?

Поскольку двухпроходное кодирование исправляет сводящую с ума ошибку в FFMPEG (действительно x264), которая, вероятно, не будет исправлена ​​в ближайшее время: в зависимости от скорости вашего компьютера, первые ~ 1 секунда или около того видео часто будут очень неуместными битрейт. Это очень легко воспроизводится с помощью источника с высокой скоростью передачи битов, транскодированного до низкой скорости передачи на очень быстрой машине (такой как EC2 c4.8xlarge ). Неработающий четырехъядерный MacBook Pro i7 НЕ достаточен для воспроизведения этой ошибки.

Это будет либо чрезвычайно высоко:

  • один проход ЦБР, без VBV указано

    (игнорируйте тот факт, что CBR без VBV вовсе не является CBR )

или слишком низко:

  • однопроходной CBR с VBV
  • однопроходный VBR: QScale с VBV и макс.

Измерения качества как VIFp, так и SSIM показывают, что низкие / высокие битрейты действительно соответствуют излишне пониженному / повышенному качеству (т.е. битрейт НЕ должен был быть выше или ниже).

Выполнение двухпроходного кодирования CBR прекрасно работает и решает проблему ... если у вас есть время для этого. К сожалению, я не могу позволить себе задержку двухпроходного кодирования для одного разрешения.

Так что же вы хотите сделать?

В настоящее время я выполняю первоначальный транскод с меньшим разрешением (480). Это будет охватывать как можно больше устройств воспроизведения. Я хотел бы использовать это в качестве моего прохода 1. Поскольку разрешение 480 все равно отстой, я могу просто опубликовать этот проход 1 видео как мой 480, независимо от каких-либо глупых битрейтов в первую секунду видео.

Затем я хотел бы использовать информацию 480 pass 1 и только pass 2 на моих более высоких разрешениях. В случае CBR / VBV это будет:

ffmpeg -i source.mp4 -pass 1 -vf scale=852:480 -c:v libx264 -b:v 1000k ... 480.mp4 ffmpeg -i source.mp4 -pass 2 -vf scale=1280:720 -c:v libx264 -b:v 2500k ... 720.mp4 

Барни Гугл

0
Не могли бы вы опубликовать полный журнал FFmpeg? Я чувствую, что ваши кодировки используют слишком много потоков, учитывая эти низкие разрешения, что отрицательно сказывается на качестве. Ely 9 лет назад 0
На какую ошибку вы ссылаетесь? LordNeckbeard 9 лет назад 0
Пожалуйста, смотрите эту ссылку: http://ffmpeg.gusari.org/viewtopic.php?f=11&t=2296&p=6652 Mark Gerolimatos 9 лет назад 0
@ Привет, Эли! Это я, Марк! Я до сих пор не убежден, что это проблема с потоками, или, возможно, я убежден, что проблема слишком большого количества потоков - это красная сельдь в том смысле, что она просто допускает ошибку. Помните, что при высокой скорости передачи битов мне требуется куча потоков и очень быстрые машины для обеспечения своевременного транскодирования. Mark Gerolimatos 9 лет назад 0
@LordNeckbeard (переделан, чтобы дать вам "в" / уведомление). Вот URL, по которому мы с Эли обсуждали: http://ffmpeg.gusari.org/viewtopic.php?f=11&t=2296&p=6652. Mark Gerolimatos 9 лет назад 0

0 ответов на вопрос

Похожие вопросы