通過 ffmpeg 加速影片並沒有減小文件大小
我正在跟進
加快播放速度
https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video
但是,當我將播放速度提高 1.5 倍時,我預計影片的大小會減少到與/大約相同的水平,然而,這就是我得到的:
-rwxrwxr-x 1 me me 10000000 2021-10-10 16:56 original_video.mp4* -rwxrwxr-x 1 me me 10060896 2022-01-02 16:27 speed_up_output.mkv*
即,文件大小更大。
是否可以加快播放速度並將影片大小減小到相同程度?
該連結中提到的大多數命令都會更改播放速度。為了減少幀數,您不一定需要改變播放速度。
mininterpolate 過濾器可以減少幀數,但這是一個相當有損的過程。
您可以每隔一幀丟幀,但大多數人會注意到幀速率低於 24 fps。
減少幀數將減少數據量。對於未壓縮的影片,您可以期待線性相關性。 本文包括一些範例。請注意,這些圖表是廢話,因為 x-tics 分佈不均勻。
在大多數最終使用者場景中,都會使用壓縮影片。H264 是一種廣泛使用的壓縮器。它使用差分又名。預測的幀。丟幀會干擾光流檢測,使影片更難壓縮(前提是您希望保持相同的每幀質量)。出於這個原因,降低幀速率將產生小於線性的文件大小減小。相關:https ://superuser.com/questions/283515/video-encoding-how-much-does-the-video-file-size-increase-with-fps
我剛剛嘗試使用 ffmpeg 的抽取過濾器:
ffmpeg -i raw_footage.ts -an -c:v libx264 -crf 21 30fps.mkv ffmpeg -i 30fps.mkv -filter:v decimate=cycle=2 -c:v libx264 -crf 21 -t 30 15fps.mkv
文件大小:
- 30fps.mkv 9,4M
- 15fps.mkv 8,2M
隨著幀速率的降低,影片非常跳躍且難以觀看。在我看來,完全被屠殺了。然而文件大小只減少了 12%。不划算。
對於大多數案例,保持幀數並降低每幀的圖像質量要容易得多。
ffmpeg -i original_video.mp4 -c:v libx264 -crf 31 -c:a aac -b:a 64k -movflags +faststart output.mp4
crf
是一個質量設置。數字越大意味著“壓縮更多”。根據您所做的事情,切換到更高的配置文件也會有所幫助。降低幾何解析度也有幫助。如果可用,您可以使用更好的壓縮器,例如 libx265。