壓縮 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% 是因為壓縮工具找到了比視訊和音訊編碼器更有效的方式來儲存資訊。但是,通常無法告訴編碼器如何儲存訊息,因為這是標準中指定的內容。有時,由於標準的更好實現,較新版本的編碼程式可以提供幫助,但通常,這僅適用於全新的編解碼器。

但是,您的視訊播放器無法同時處理多個壓縮。我認為這主要是因為它需要相當多的資源(RAM 和 CPU)來解壓縮存檔文件,然後讀取文件本身。此外,它仍然需要先解壓縮整個內容,就像您需要做的那樣,因為從沒有儲存哪個串流的檔案等中估計是相當困難的。

因此,如果您需要使用 theora/vorbis,您無能為力。否則,如果檔案大小是您的首要任務,我建議您研究一下VP8/VP9/x264/x265。如果您想採用 VP9 方式,我推薦 FFmpeg 的 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 Gb/s 的位元率)並且使用了正常運行的程式。我自己從未能夠從任何有損壓縮音訊或視訊檔案中壓縮很多內容(但我很少使用 theora 或 vorbis)。

相關內容