文章目錄
- FFmpeg 壓縮視頻文件
- 基本壓縮命令(保持 MP4 格式)
- 轉換為其他格式示例:
- 關鍵參數說明:
- 額外優化選項:
- 在FFmpeg中使用多線程加速
- 1. 幀級多線程 (frame-level multithreading)
- 2. 切片級多線程 (slice-level multithreading)
- 3. 編碼器特定多線程選項
- H.264/H.265 (libx264/libx265)
- VP9
- 4. 硬件加速
- 5. 并行處理多個文件
- 最佳實踐建議
FFmpeg 壓縮視頻文件
使用 FFmpeg 壓縮視頻文件(包括 MPEG-4/MP4 格式)并輸出為其他格式的基本命令如下:
基本壓縮命令(保持 MP4 格式)
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -acodec aac -b:a 128k output.mp4
轉換為其他格式示例:
- 輸出為 MKV 格式:
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 -preset fast -acodec libvorbis output.mkv
- 輸出為 WebM (VP9) 格式:
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
- 輸出為 MOV 格式:
ffmpeg -i input.mp4 -vcodec mpeg4 -q:v 5 -acodec aac output.mov
關鍵參數說明:
-crf
:質量系數(18-28 是常用范圍,值越大壓縮率越高)-preset
:編碼速度/效率平衡(ultrafast/superfast/veryfast/faster/fast/medium/slow/slower/veryslow)- 視頻編碼器:
libx264
:H.264/AVC(兼容性好)libx265
:H.265/HEVC(壓縮率高)libvpx-vp9
:WebM 專用
- 音頻編碼器:
aac
:MP4 常用libopus
:WebM 專用libvorbis
:MKV 常用
額外優化選項:
- 縮放視頻:
-vf "scale=1280:-1"
(設置寬度為1280,高度自動計算) - 降低幀率:
-r 24
(改為24fps) - 裁剪視頻:
-ss 00:01:30 -t 10
(從1分30秒開始,截取10秒)
注意:實際使用時請先確保已安裝 FFmpeg,且支持相關編解碼器(可通過 ffmpeg -codecs
查看)。
在FFmpeg中使用多線程加速
FFmpeg提供了多種方式利用多線程來加速視頻處理,主要包括以下幾種方法:
1. 幀級多線程 (frame-level multithreading)
使用 -threads
參數可以開啟幀級多線程處理:
ffmpeg -threads 4 -i input.mp4 output.mp4
或者分別控制不同組件的線程數:
ffmpeg -threads 4 -i input.mp4 -threads 8 output.mp4
2. 切片級多線程 (slice-level multithreading)
某些編碼器支持切片編碼,可以并行處理:
ffmpeg -i input.mp4 -c:v libx264 -slices 4 output.mp4
3. 編碼器特定多線程選項
不同編碼器有自己特定的多線程選項:
H.264/H.265 (libx264/libx265)
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 -x264-params threads=8 output.mp4
# 或者
ffmpeg -i input.mp4 -c:v libx265 -x265-params pools=8 output.mp4
VP9
ffmpeg -i input.mp4 -c:v libvpx-vp9 -row-mt 1 -threads 8 output.webm
4. 硬件加速
雖然不是嚴格的多線程,但硬件加速可以顯著提高速度:
# NVIDIA硬件加速
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
5. 并行處理多個文件
使用GNU parallel等工具并行處理多個文件:
parallel ffmpeg -i {} -c:v libx264 {.}.mp4 ::: *.mov
最佳實踐建議
- 線程數通常設置為CPU核心數或略多
- 不同階段(I/O、解碼、編碼)可以設置不同線程數
- 使用
-threads 0
讓FFmpeg自動選擇最佳線程數 - 監控CPU使用率調整線程數以達到最佳效果
注意:過多的線程可能會導致性能下降,因為線程管理開銷會增加。