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

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

Вопрос:

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

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

Почемув проклятии 1Вы бы это сделали?

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

Это будет либоОЧЕНЬвысокий:

  • однопроходный CBR безВБВуказанный

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

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

  • однопроходный CBR сВБВ
  • однопроходный VBR:QScaleсВБВи максрейт

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

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

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

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

Тогда я хотел бы использовать480 проход 1 информацияи только пройти 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

Барни Гугл

Связанный контент