Я пытаюсь кодировать видео в том же качестве в том же формате, но выходной файл в несколько раз больше, чем входной файл. Почему это происходит? Я хочу исправить ошибки кодирования, но я не могу сделать это без потери качества или увеличения размера файла. Как кодировать видео в формате mp4, не теряя качества и не увеличивая размер в терминале Linux?

Я хочу использовать видео для показа онлайн на моем сайте. Я использую вызов ffmpeg ниже

ffmpeg input.mp4 -c:v libx264 -preset placebo -crf 0 -c:a aac -movflags faststart output.mp4

PS Я добавлю сюда пример ошибок. Даже если я попаду сюда, я хочу понять, почему ffmpeg увеличивает мои файлы. Я сталкиваюсь с этим регулярно. Это главный вопрос.

[h264 @ 0x56524c25dea0] Invalid NAL unit 0, skipping.
[h264 @ 0x56524c25dea0] error while decoding MB 32 2, bytestream -7
[h264 @ 0x56524c216260] Invalid NAL unit 0, skipping.
[h264 @ 0x56524c216260] error while decoding MB 46 16, bytestream -5
[h264 @ 0x56524c25dea0] Invalid NAL unit 8, skipping.
[h264 @ 0x56524c25dea0] error while decoding MB 36 1, bytestream -13
[aac @ 0x56524c1e6ea0] Number of bands (57) exceeds limit (44).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] channel element 3.10 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
...
[aac @ 0x56524c1e6ea0] Number of bands (48) exceeds limit (44).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] Error decoding AAC frame header.
Error while decoding stream #0:1: Error number -50531338 occurred
[aac @ 0x56524c1e6ea0] Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x56524c1e6ea0] decode_pce: Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12350464
[null @ 0x56524c1e7d20] Application provided invalid, non monotonically increasing dts to muxer in stream 1: 12351488 >= 12351488

1 ответ1

2

Почему перекодированное видео в несколько раз больше входного файла?

Вы заставляете кодировщик использовать настройку качества видео без потерь с -crf 0 . Это приводит к тому, что ваше выходное видео будет намного больше входного (при условии, что ваше входное видео кодируется с настройкой с потерями).

Настройка без потерь сильно ограничивает возможности сжатия кодера. Говоря простым языком: высокая производительность сжатия, достигаемая большинством видеокодеков, таких как x264, достигается за счет кодирования видео с потерями, которое пытается сохранить "воспринимаемое" качество, одновременно избавляясь от незначительно воспринимаемых данных.

Как кодировать MP4 видео без потери качества и увеличения размера файла?

Из-за того, как работает кодирование с потерями, буквально невозможно перекодировать ранее закодированное видео с потерями без потери качества, если только вы не используете настройку без потерь, которая, как вы столкнулись, увеличивает размер файла.

Скорее, вы можете попробовать поэкспериментировать с различными значениями -crf чтобы увидеть, какое качество / размер файла вы получаете в выходном видео. С кодированием с потерями это всегда будет компромиссом между качеством и размером файла. Вы можете прочитать о контроле битрейта кодирования здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .