
Tengo un archivo de vídeo theora/vorbis ogg. Sin embargo, lo que noto es que usar gzip/xz puede reducir el tamaño del archivo en un 20%/75%. Por lo tanto, sospecho que el formato interno no comprime bien el contenido. ¿Existe alguna forma de comprimir el vídeo/audio sin pérdidas sin utilizar un formato de compresión externo? Se prefiere una solución que utilice ffmepg.
Salida de 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
Respuesta1
La respuesta corta es:No.
Cuando comprime su archivo en un archivo (como zip, 7z, rar, gzip,...), el algoritmo busca formas de almacenar la información proporcionada de una manera más corta. Esto se hace, por ejemplo, medianteCodificación Huffman, donde el algoritmo comprueba la frecuencia de los valores y luego almacena el valor más frecuente en el número más corto, el segundo más utilizado en el segundo número más pequeño,... (esto es extremadamente simplificado- lea el artículo vinculado de Wikipedia para obtener una mejor explicación. Además, por supuesto, la codificación de Huffman es sólo un ejemplo (muy sencillo) de compresión). Esto también explica por qué la compresión de un archivo a menudo reduce aún más su tamaño.
Entonces, la reducción del 75% en el tamaño del archivo se debe a que la herramienta de compresión encuentra una manera más eficiente de almacenar la información que el codificador de video y audio. Sin embargo, normalmente no hay forma de decirle a un codificador cómo almacenar la información, ya que esto es algo que está especificado en el estándar. A veces, una versión más nueva del programa de codificación puede ayudar debido a mejores implementaciones del estándar, pero por lo general, eso solo se aplica a códecs nuevos.
Sin embargo, su reproductor de vídeo no puede manejar múltiples compresiones simultáneamente. Creo que esto se debe principalmente a que se necesitarían bastantes recursos (tanto RAM como CPU) para descomprimir el archivo y luego leer el archivo en sí. Además, aún sería necesario descomprimir todo primero, tal como debe hacerlo, porque es bastante difícil estimar a partir de un archivo que no tiene dónde se almacena qué secuencia y así sucesivamente.
Entonces, si necesita trabajar con theora/vorbis, no hay mucho que pueda hacer al respecto. De lo contrario, si el tamaño del archivo es su prioridad, recomendaría investigarVP8/VP9/x264/x265. Si desea seguir el camino VP9, le recomiendo algo junto con la Guía de codificación/VP9 de FFmpeg (enlazada justo arriba):
ffmpeg -i <input> -c:v libvpx-vp9 -crf 15 -b:v 0 -c:a copy <output>
reemplace <input>
y <output>
con los respectivos nombres de archivo (y extensiones de archivo). Tanto *.mkv como *.webm funcionan (sólo probé estos dos), sin embargo, *.webm parece requerirVorbiscomo códec de audio (por ejemplo, -c:a libvorbis -q:a 6
en lugar de -c:a copy
), donde *.mkv no parece tener requisitos.
-crf
especifica un factor de velocidad constante (imagínelo como "calidad visual constante"), donde valores más bajos significan mejor calidad.
Todo lo anterior, por supuesto, supone que sus archivos fueron codificados de manera eficiente (por ejemplo, sin especificar una tasa de bits de 6 Gb/s) y con un programa que funcione correctamente. Por mi parte, nunca he podido comprimir mucho ningún archivo de audio o video comprimido con pérdida (pero rara vez uso theora o vorbis).