
Ich habe eine Theora/Vorbis-Ogg-Videodatei. Mir fällt jedoch auf, dass die Dateigröße durch die Verwendung von gzip/xz um 20 %/75 % reduziert werden kann. Daher vermute ich, dass das interne Format den Inhalt nicht wirklich gut komprimiert. Gibt es eine Möglichkeit, Video/Audio verlustfreier zu komprimieren, ohne ein externes Komprimierungsformat zu verwenden? Eine Lösung mit ffmepg ist vorzuziehen.
Ausgabe von 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
Antwort1
Die kurze Antwort lautet:NEIN.
Wenn Sie Ihre Datei in ein Archiv komprimieren (z. B. zip, 7z, rar, gzip, ...), sucht der Algorithmus nach Möglichkeiten, die gegebenen Informationen kürzer zu speichern. Dies geschieht beispielsweise überHuffman-Kodierung, wobei der Algorithmus die Häufigkeit der Werte prüft und dann den am häufigsten verwendeten Wert in der kürzesten Zahl, den am zweithäufigsten verwendeten in der zweitkleinsten Zahl speichert,... (das ist extrem vereinfacht- bitte lesen Sie den verlinkten Wikipedia-Artikel für eine bessere Erklärung. Außerdem ist die Huffman-Kodierung natürlich nur ein (sehr einfaches) Beispiel für Komprimierung. Dies erklärt auch, warum die Komprimierung eines Archivs die Dateigröße oft weiter reduziert.
Ihre 75%ige Reduzierung der Dateigröße ist also darauf zurückzuführen, dass das Komprimierungstool einen effizienteren Weg findet, die Informationen zu speichern, als es der Video- und Audioencoder tat. Normalerweise gibt es jedoch keine Möglichkeit, einem Encoder mitzuteilen, wie die Informationen gespeichert werden sollen, da dies im Standard festgelegt ist. Manchmal kann eine neuere Version des Codierungsprogramms aufgrund besserer Implementierungen des Standards hilfreich sein, aber normalerweise gilt dies nur für brandneue Codecs.
Ihr Videoplayer kann jedoch nicht mehrere Komprimierungen gleichzeitig verarbeiten. Ich denke, das liegt hauptsächlich daran, dass er ziemlich viele Ressourcen (sowohl RAM als auch CPU) benötigt, um die Archivdatei zu dekomprimieren und dann die Datei selbst zu lesen. Außerdem müsste er trotzdem zuerst das Ganze dekomprimieren, genau wie Sie es tun müssen, weil es ziemlich schwierig ist, aus einer Datei, die Sie nicht haben, abzuschätzen, wo welcher Stream gespeichert ist und so weiter und so fort.
Wenn Sie also mit Theora/Vorbis arbeiten müssen, können Sie nicht viel dagegen tun. Wenn die Dateigröße Ihre Priorität ist, empfehle ich Ihnen, sich Folgendes anzusehen:VP8/VP9/x264/x265Wenn Sie den VP9-Weg gehen möchten, empfehle ich etwas in der Art des Encode/VP9-Guide von FFmpeg (Link direkt oben):
ffmpeg -i <input> -c:v libvpx-vp9 -crf 15 -b:v 0 -c:a copy <output>
Ersetzen Sie <input>
und <output>
durch die entsprechenden Dateinamen (und Dateierweiterungen). Sowohl *.mkv als auch *.webm funktionieren (ich habe nur diese beiden ausprobiert), allerdings scheint *.webm zu erfordernVorbisals Audio-Codec (z. B. -c:a libvorbis -q:a 6
anstelle von -c:a copy
), wobei *.mkv keine Anforderungen zu haben scheint.
-crf
gibt einen konstanten Ratenfaktor an (stellen Sie sich das als „konstante visuelle Qualität“ vor), wobei niedrigere Werte eine bessere Qualität bedeuten.
All das oben Gesagte setzt natürlich voraus, dass Ihre Dateien effizient (z. B. ohne Angabe einer Bitrate von 6 Gb/s) und mit einem ordnungsgemäß funktionierenden Programm codiert wurden. Ich für meinen Teil konnte noch nie viel aus verlustbehaftet komprimierten Audio- oder Videodateien komprimieren (aber ich verwende selten Theora oder Vorbis).