Вопрос:
Разрешено ли использовать кодирование "pass 1" исходного видео с одним разрешением / битрейтом в качестве входа для кодирования "pass 2" того же источника с другим разрешением / битрейтом? Я попробовал это, и это похоже на работу, но я не совсем уверен, что это будет в общем случае: профиль потока (выбор кадра I / P / B и т.д.) Выглядит иначе, чем использование одних и тех же параметров для обоих проходов, но также выглядит "достаточно хорошо".
Я нахожусь в точке, где мне нужен авторитетный ответ на этот вопрос.
Почему в tarnation 1 вы бы это сделали?
Поскольку двухпроходное кодирование исправляет сводящую с ума ошибку в FFMPEG (действительно x264), которая, вероятно, не будет исправлена в ближайшее время: в зависимости от скорости вашего компьютера, первые ~ 1 секунда или около того видео часто будут очень неуместными битрейт. Это очень легко воспроизводится с помощью источника с высокой скоростью передачи битов, транскодированного до низкой скорости передачи на очень быстрой машине (такой как EC2 c4.8xlarge). Неработающий четырехъядерный MacBook Pro i7 НЕ достаточен для воспроизведения этой ошибки.
Это будет либо очень высокое:
однопроходной CBR без указания VBV
(игнорируйте тот факт, что CBR без VBV вовсе не является CBR)
или слишком низко:
- однопроходной CBR с VBV
- однопроходный VBR: QScale с VBV и макс.
Измерения качества как VIFp, так и SSIM показывают, что низкие / высокие битрейты действительно соответствуют излишне пониженному / повышенному качеству (т.е. битрейт НЕ должен был быть выше или ниже).
Выполнение двухпроходного кодирования CBR прекрасно работает и решает проблему ... если у вас есть время для этого. К сожалению, я не могу позволить себе задержку двухпроходного кодирования для одного разрешения.
Так что же вы хотите сделать?
В настоящее время я выполняю первоначальный транскод с меньшим разрешением (480). Это будет охватывать как можно больше устройств воспроизведения. Я хотел бы использовать это как мой проход 1. Так как разрешение 480 в любом случае отстой, я могу просто опубликовать этот видеоролик с моим 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