FFmpeg 入門教學:給初學者的 30 個實戰指令
FFmpeg 是影片處理的瑞士刀。格式轉換、壓縮、剪輯、合併、串流、字幕...幾乎所有影片處理都能做。但指令太豐富,初學者往往不知道從哪裡開始。這篇從安裝到 30 個實戰指令,幫你快速上手。
FFmpeg 安裝
macOS
bash
# 用 Homebrew(推薦)
brew install ffmpeg
# 最新版本
brew install ffmpeg --HEADUbuntu/Debian
bash
# 預設版本
sudo apt install ffmpeg
# 最新版本(PPA)
sudo add-apt-repository ppa:savoury1/ffmpeg4
sudo apt update
sudo apt install ffmpegWindows
- 從 ffmpeg.org 下載 ZIP
- 解壓縮到
C:\ffmpeg - 將
C:\ffmpeg\bin加入 PATH 環境變數
Docker
bash
# 使用官方映像檔
docker run -it --rm -v $(pwd):/data jrottenberg/ffmpeg:latest -i /data/input.mp4 /data/output.mp4確認安裝
bash
ffmpeg -versionFFmpeg 基本概念
指令格式
bash
ffmpeg [輸入選項] -i 輸入檔案 [輸出選項] 輸出檔案重要選項
| 選項 | 意義 |
|---|---|
-i | 輸入檔案 |
-c:v | 視訊編碼器 |
-c:a | 音訊編碼器 |
-c copy | 串流複製(無損) |
-b:v | 視訊位元率 |
-b:a | 音訊位元率 |
-crf | 畫質(18-28,越小越好) |
-s | 解析度 |
-r | 幀率 |
-t | 時長 |
-ss | 起始時間 |
-vn | 移除視訊 |
-an | 移除音訊 |
-y | 覆寫輸出 |
30 個實戰指令
1. 格式轉換(基本)
bash
# MP4 轉 MKV
ffmpeg -i input.mp4 output.mkv
# MP4 轉 WebM
ffmpeg -i input.mp4 -c:v libvpx-vp9 -c:a libopus output.webm
# MKV 轉 MP4
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp42. 無重新編碼轉換
bash
# MP4 容器間轉換(無損、最快)
ffmpeg -i input.mp4 -c copy output.mkv3. 視訊壓縮
bash
# CRF 壓縮(H.264)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a aac -b:a 128k output.mp4
# H.265 壓縮(更小)
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac -b:a 128k output.mp4詳見 影片壓縮完整指南。
4. 改解析度
bash
# 降 to 720p
ffmpeg -i input.mp4 -vf "scale=-1:720" -c:v libx264 -crf 23 -c:a aac output.mp4
# 降 to 480p
ffmpeg -i input.mp4 -vf "scale=-1:480" -c:v libx264 -crf 23 -c:a aac output.mp45. 改幀率
bash
# 30fps
ffmpeg -i input.mp4 -r 30 -c:v libx264 -crf 23 -c:a aac output.mp4
# 24fps(電影感)
ffmpeg -i input.mp4 -r 24 -c:v libx264 -crf 23 -c:a aac output.mp46. 擷取音訊
bash
# MP4 轉 MP3
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3
# 無損擷取 AAC
ffmpeg -i input.mp4 -vn -c:a copy output.aac詳見 MP4 轉 MP3 教學。
7. 擷取視訊(移除音訊)
bash
ffmpeg -i input.mp4 -an -c:v copy output.mp48. 剪輯影片
bash
# 從 30 秒開始擷取 1 分鐘
ffmpeg -ss 00:00:30 -t 00:01:00 -i input.mp4 -c copy output.mp4
# 從 1:30 擷取到 3:45
ffmpeg -ss 00:01:30 -to 00:03:45 -i input.mp4 -c copy output.mp49. 合併影片
bash
# 建立 list.txt
echo "file 'input1.mp4'" > list.txt
echo "file 'input2.mp4'" >> list.txt
# 用 concat demuxer 合併
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4詳見 TS 檔案合併教學。
10. 製作 GIF
bash
# 高畫質 GIF(兩階段演算法)
ffmpeg -i input.mp4 -filter_complex "[0:v] palettegen [p]; [0:v][p] paletteuse" output.gif
# 小型 GIF
ffmpeg -t 5 -i input.mp4 -vf "scale=320:-1:flags=lanczos,fps=10" -filter_complex "[0:v] palettegen [p]; [0:v][p] paletteuse" output.gif詳見 MP4 轉 GIF 教學。
11. 加字幕
bash
# 內嵌字幕(硬字幕)
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" -c:a copy output.mp4
# 外掛字幕(軟字幕)
ffmpeg -i input.mp4 -i subs.srt -c copy -c:s mov_text output.mp412. 擷取字幕
bash
ffmpeg -i input.mkv -map 0:s:0 output.srt13. 加浮水印
bash
# 右下角浮水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" -c:a copy output.mp4
# 置中浮水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=(W-w)/2:(H-h)/2" -c:a copy output.mp414. 改音量
bash
# 音量 2 倍
ffmpeg -i input.mp4 -af "volume=2.0" -c:v copy output.mp4
# 音量標準化
ffmpeg -i input.mp4 -af "loudnorm=I=-16:TP=-1.5:LRA=11" -c:v copy output.mp415. 視訊翻轉/旋轉
bash
# 水平翻轉
ffmpeg -i input.mp4 -vf "hflip" -c:a copy output.mp4
# 垂直翻轉
ffmpeg -i input.mp4 -vf "vflip" -c:a copy output.mp4
# 90 度旋轉
ffmpeg -i input.mp4 -vf "transpose=1" -c:a copy output.mp416. 裁切視訊
bash
# 裁切中央 1280x720
ffmpeg -i input.mp4 -vf "crop=1280:720:(in_w-1280)/2:(in_h-720)/2" -c:a copy output.mp4
# 裁掉上下各 50 像素
ffmpeg -i input.mp4 -vf "crop=in_w:in_h-100:0:50" -c:a copy output.mp417. HLS 切片
bash
# MP4 轉 M3U8
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 6 -hls_playlist_type vod -hls_segment_filename "segment_%03d.ts" output.m3u8詳見 MP4 轉 M3U8 教學。
18. 從圖片建立影片
bash
# 圖片序列轉影片(30fps)
ffmpeg -framerate 30 -i image_%03d.png -c:v libx264 -crf 23 output.mp4
# 單張圖片加音訊
ffmpeg -loop 1 -i image.jpg -i audio.mp3 -c:v libx264 -c:a aac -shortest output.mp419. 從影片擷取圖片
bash
# 每 1 秒擷取一張
ffmpeg -i input.mp4 -vf "fps=1" image_%03d.png
# 擷取第 10 秒的畫面
ffmpeg -ss 10 -i input.mp4 -vframes 1 output.png20. 視訊轉場效果
bash
# 淡入淡出
ffmpeg -i input.mp4 -vf "fade=t=in:st=0:d=1,fade=t=out:st=29:d=1" -c:a copy output.mp421. 加速/慢速
bash
# 2 倍速
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4
# 慢動作 0.5 倍速
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output.mp422. 反轉影片
bash
ffmpeg -i input.mp4 -vf "reverse" -af "areverse" output.mp423. 擷取音訊片段
bash
# 從 1 分鐘開始擷取 30 秒
ffmpeg -ss 00:01:00 -t 00:00:30 -i input.mp4 -vn -c:a libmp3lame -b:a 192k output.mp324. 合併音訊
bash
# 立體聲合併
ffmpeg -i left.mp3 -i right.mp3 -filter_complex "amerge" output.mp325. 音訊淡入淡出
bash
# 開頭 2 秒淡入,結尾 3 秒淡出
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=2,afade=t=out:st=57:d=3" output.mp326. 直播推流
bash
# RTMP 推流
ffmpeg -i input.mp4 -c:v libx264 -preset fast -tune zerolatency -c:a aac -f flv rtmp://server/live/stream_key詳見 直播推流完整指南。
27. 螢幕錄製
bash
# Linux(X11)
ffmpeg -f x11grab -i :0.0 -f alsa -i default output.mp4
# macOS(AVFoundation)
ffmpeg -f avfoundation -i "1:0" output.mp4
# Windows(dshow)
ffmpeg -f dshow -i video="screen-capture-recorder" output.mp428. 網路攝影機錄製
bash
# macOS
ffmpeg -f avfoundation -i "0:0" -c:v libx264 -c:a aac output.mp4
# Linux
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default -c:v libx264 -c:a aac output.mp429. 加入元資料
bash
ffmpeg -i input.mp4 -c copy \
-metadata title="影片標題" \
-metadata artist="作者" \
-metadata year="2026" \
output.mp430. 視訊品質測量
bash
# PSNR(30dB 以上算好)
ffmpeg -i original.mp4 -i compressed.mp4 -filter_complex "psnr" -f null -
# VMAF(80 以上算好)
ffmpeg -i original.mp4 -i compressed.mp4 -filter_complex "libvmaf" -f null -實用技巧
1. 串流複製
不需要重新編碼時用 -c copy,速度最快、無品質損失:
bash
# MP4 容器間轉換
ffmpeg -i input.mp4 -c copy output.mkv
# 擷取片段
ffmpeg -ss 00:00:30 -t 00:01:00 -i input.mp4 -c copy output.mp42. 預設值最佳化
bash
# 高畫質壓縮
ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k output.mp4
# 網頁用影片
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -profile:v high -level 4.0 -pix_fmt yuv420p -movflags +faststart -c:a aac -b:a 128k output.mp43. 批次處理
bash
# 所有 MP4 轉 H.265
for f in *.mp4; do
ffmpeg -i "$f" -c:v libx265 -crf 28 -c:a aac -b:a 128k "${f%.mp4}_h265.mp4"
done常見問題
| 問題 | 原因 | 解決方案 |
|---|---|---|
| 編碼慢 | preset 太慢 | 用 -preset medium 或 fast |
| 檔案巨大 | CRF 太低 | 用 CRF 23-28 |
| iPhone 播放不了 | H.265 或像素格式 | 用 H.264 + yuv420p |
| 沒聲音 | 音訊編碼器不相容 | 用 -c:a aac |
| 跨網域播放失敗 | moov atom 在結尾 | 加 -movflags +faststart |
總結
FFmpeg 是影片處理的必備工具。記住基本格式:
bash
ffmpeg -i 輸入檔案 [輸出選項] 輸出檔案常用編碼器:
- 視訊:
libx264(H.264)、libx265(H.265)、libvpx-vp9(VP9) - 音訊:
libmp3lame(MP3)、aac(AAC)、libopus(Opus)
快速參考:
- 無重新編碼:
-c copy - 高畫質:
-crf 18 -preset slow - 網頁用: H.264 + yuv420p + faststart
- HLS 切片:
-f hls -hls_time 6