1

У меня есть видео файл 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 ответ1

2

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

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

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

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

Так что, если вам нужно работать с theora/vorbis, вы ничего не можете с этим поделать. В противном случае, если размер файла является вашим приоритетом, я бы рекомендовал изучить VP8 / VP9 / x264 / x265. Если вы хотите пойти по пути VP9, я рекомендую кое-что из руководства FFmpeg по Encode / VP9 (ссылка чуть выше):

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

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

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

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