
我有很多用手機拍攝的視頻,考慮到它們的長度,它們相當龐大(例如,1920×1080 的 3 分鐘視頻超過 400MB)。
我認為這是因為手機更重視電池壽命和品質而不是儲存空間,所以我想我可以透過 Avidemux 運行它們來重新編碼它們並減小它們的大小,同時又不會過多地影響它們的品質。我意識到某些退化是不可避免的。但由於有這麼大的壓縮空間,我認為應該可以避免大量可察覺的降解。
影片在 MP4 容器中以 H264/AAC 編碼。我可以直接在 Avidemux 中複製音訊。但是如何推導出 H264 編碼器的一些近似值以保持視訊品質?我認為 H264 格式不會保留有關其輸入參數的資訊。可以選擇一個使檔案大小完全膨脹而沒有增益的品質級別,也可以選擇一個使視訊變得很糟糕的品質級別;有沒有某種方法可以分析輸入以找出“最佳點”,在該點上可以減小視訊大小而不會對品質產生太大影響?
我意識到這個問題存在一定程度的主觀性;什麼會我認為是「可察覺的」退化?然而,考慮到視訊編碼器傳統上是透過感知質量來參數化的,是否有可能得出一些基本參數的近似範圍?
答案1
有幾種命令列或 GUI 工具可以顯示 H264 影片的一些簡化編碼參數,例如ffmpeg
或者mediainfo
:
$ mediainfo myvideo.mp4
[... look for the "Video" section ...]
Format profile : High@L4
Bit rate : 17.0 Mbps
$ ffprobe -show_streams myvideo.mp4
[... look for a [STREAM] header followed by codec_type=video ...]
profile=High
level=40
bit_rate=16996359
請注意profile
和level
(in ffmpeg
) 參數。不用擔心比特率,它並不能真正告訴您文件大小不能告訴您的任何資訊。我思考level
in的輸出ffmpeg
是實際值的 10 倍(即40
表示等級 4、41
表示 4.1 等)。
Avidemux 允許您使用簡化的設置,您可以在其中進行設置,並將更精細的設置保留為 Avidemux 的預設值。
我認為這些是相應的設定:
- 使用進階配置未選取。
- 輪廓高。
- IDC級別是 4。
使用較慢的預設值將提高這些參數內的品質(在一定程度上)。
您也可以使用兩遍編碼來進一步減小檔案大小。我不知道有什麼好方法來預測合理的文件大小,但是 1920×1080 的良好兩次通過平均比特率是 6-8Mbps。不要以原始檔案大小為目標或比特率:您最終會得到一個相同大小的檔案。
就我而言,只需以品質等級20(Avidemux 的預設值)進行一次編碼即可將檔案大小減半,並且使用Bino 和Kinovea 進行比較(對我來說)沒有顯示任何差異,即使在運動模糊或高對比度幀上也是如此。以 7Mbps 的速度進行兩次編碼(這是單遍編碼的結果)將其降低至 40%。