Video

來自 PNG 幀的 H.264/MPEG-4:如何以及如何調整壓縮

  • January 9, 2018

我經常通過準備 .png 格式(壓縮最小)的所有幀來創建數字動畫,我需要將其轉換為影片格式以上傳到 reddit、instagram、gfycat 等網站。

我對所有不同的壓縮標準知之甚少,這些網站也不太清楚它們接受什麼格式,但我找到了一個通常對我有用的方法,它創建的文件可以被這些網站接受:

# step 1
mencoder mf://frame*.png -mf w=$WIDTH:h=$HEIGHT:fps=$FPS:type=png \
        -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=16000:keyint=15:mbd=2:trell \
        -oac copy -o step1.avi

# step 2
mencoder step1.avi -o step2.mp4 -of lavf -lavfopts format=mp4 -ovc x264 -sws 9  \
        -x264encopts nocabac:level_idc=30:bframes=0:bitrate=2048:threads=auto:turbo=1:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh

但是我不完全確定它的作用*,因此我無法:

  • 使其成為一條指令
  • 調整壓縮率。

事實上,我通常更喜歡壓縮較少的結果。

從 PNG 幀到網路友好的影片文件(我相信是H.264/MPEG-4 MP4),我可以遵循什麼路線,讓我能夠調整壓縮?


  • 例如:這是一個範例框架

在此處輸入圖像描述 (注意:老實說,在我看來,在 VLC 中觀看它比通過 VLC 工具拍攝快照時看起來更糟 - 這使得很難使問題易於理解並且結果具有可比性)

即使在步驟 1中我已經指定$WIDTH$HEIGHT匹配原始圖像的那些,它顯然已經改變了兩者,並且沒有保留縱橫比。最終圖像也有更多模糊,這可能只是這種調整大小的效果。


**編輯:**查看下面 mplayer 視窗的實際系統截圖(與 VLC 相同)。與 PNG 源和 VLC“內部”螢幕截圖功能相比,瓷磚灌漿非常模糊

在此處輸入圖像描述

細節:

在此處輸入圖像描述

ffmpeg

正如評論中所指出的,ffmpeg提供了一個簡單的“質量”參數的良好一步解決方案:crf或“恆定速率因子”(閱讀這篇解釋 crf 的文章)。

有關使用 ffmpeg 從 PNG 轉換到 H.264 的簡單說明,請參閱這篇文章。

簡而言之:

# Assuming the frames are called frame0000.png, frame0001.png ...
# 
# set $FPS, $WIDTH, $HEIGHT, $FIRSTFRAME, 
# $CRF (see above) to the desired value, then run:

ffmpeg -r $FPS -f image2 -s ${WIDTH}x$HEIGHT -start_number $FIRSTFRAME \
      -i frame%04d.png -vcodec libx264 -crf $CRF -pix_fmt yuv420p output.mp4

$CRF預設為 23;小於 23 的值會提供更好的質量和更大的文件,大於 23 的值會增加壓縮率。

引用自:https://unix.stackexchange.com/questions/415430