Video
來自 PNG 幀的 H.264/MPEG-4:如何以及如何調整壓縮
我經常通過準備 .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 的值會增加壓縮率。