Сжатие видео theora/vorbis

Сжатие видео theora/vorbis

У меня есть видеофайл theora/vorbis ogg. Однако я заметил, что использование gzip/xz может уменьшить размер файла на 20%/75%. Поэтому я подозреваю, что внутренний формат не очень хорошо сжимает содержимое. Есть ли способ сжать видео/аудио более без потерь, не используя внешний формат сжатия? Предпочтительным является решение с использованием ffmepg.

Вывод mediainfo:

Format                                   : Ogg
File size                                : 90.9 MiB
Duration                                 : 27 min 52 s
Overall bit rate mode                    : Variable
Overall bit rate                         : 456 kb/s
Writing application                      : Lavf57.56.101

Video
ID                                       : 1911251410 (0x71EB61D2)
Format                                   : Theora
Duration                                 : 27 min 52 s
Bit rate                                 : 298 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate                               : 30.000 FPS
Compression mode                         : Lossy
Bits/(Pixel*Frame)                       : 0.005
Stream size                              : 59.4 MiB (65%)
Writing library                          : Lavf57.56.101

Audio
ID                                       : 2001534440 (0x774CFDE8)
Format                                   : Vorbis
Format settings, Floor                   : 1
Duration                                 : 27 min 52 s
Bit rate mode                            : Variable
Bit rate                                 : 131 kb/s
Channel(s)                               : 2 channels
Sampling rate                            : 48.0 kHz
Compression mode                         : Lossy
Stream size                              : 26.1 MiB (29%)
Writing library                          : Lavf57.56.101

решение1

Короткий ответ:нет.

Когда вы сжимаете файл в архив (такой как zip, 7z, rar, gzip,...), алгоритм ищет способы сохранить заданную информацию в более коротком виде. Это делается, например, черезКодирование Хаффмана, где алгоритм проверяет частоту значений, а затем сохраняет наиболее часто используемое значение в самом коротком числе, второе по частоте использования — во втором наименьшем числе,... (это крайне упрощенно- пожалуйста, прочтите связанную статью в Википедии для лучшего объяснения. Также, конечно, кодирование Хаффмана - это только один - очень простой - пример сжатия). Это также объясняет, почему сжатие архива часто еще больше уменьшает размер файла.

Итак, ваше уменьшение размера файла на 75% происходит потому, что инструмент сжатия находит более эффективный способ хранения информации, чем видео- и аудиокодировщик. Однако, как правило, нет способа указать кодировщику, как хранить информацию, поскольку это то, что указано в стандарте. Иногда может помочь более новая версия программы кодирования из-за лучшей реализации стандарта, но обычно это применимо только к новым кодекам.

Однако ваш видеоплеер не может обрабатывать несколько сжатий одновременно. Я думаю, что это в основном потому, что ему понадобятся довольно большие ресурсы (как ОЗУ, так и ЦП) для распаковки архивного файла, а затем чтения самого файла. Кроме того, ему все равно придется сначала распаковать все, как и вам нужно, потому что довольно сложно оценить по файлу, которого у вас нет, где какой поток хранится и т. д. и т. п.

Так что если вам нужно работать с theora/vorbis, то тут мало что можно сделать. В противном случае, если размер файла для вас в приоритете, я бы рекомендовал рассмотретьВП8/ВП9/х264/х265. Если вы хотите пойти по пути VP9, ​​я рекомендую что-то вроде FFmpeg's Encode/VP9-Guide (ссылка чуть выше):

ffmpeg -i <input> -c:v libvpx-vp9 -crf 15 -b:v 0 -c:a copy <output>

замените <input>и <output>на соответствующие имена файлов (и расширения файлов). Оба *.mkv и *.webm работают (я пробовал только эти два), однако, *.webm, похоже, требуетВорбискак аудиокодек (например, -c:a libvorbis -q:a 6вместо -c:a copy), где *.mkv, похоже, не имеет требований. -crfуказывает постоянный коэффициент скорости (представьте себе это как «постоянное визуальное качество»), где более низкие значения означают лучшее качество.

Все вышесказанное, конечно, предполагает, что ваши файлы были эффективно закодированы (например, не указан битрейт 6 Гбит/с) и с помощью правильно работающей программы. Лично мне никогда не удавалось сжать много из любого сжатого с потерями аудио- или видеофайла (но я редко использую theora или vorbis).

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