文章目錄
- 1. 環境部署(Windows)
- 1.1. 安裝包下載
- 1.2. 配置環境變量
- 1.3. 驗證安裝
- 2. FFmpeg 基礎使用教程
- 2.1. 常用命令格式
- 2.2. 基礎功能示例
- 2.2.1. 視頻轉碼(MP4 → MKV)
- 2.2.2. 調整分辨率(1080p → 480p)
- 2.2.3. 提取音頻
- 2.2.4. 剪切視頻片段(截取 00:01:00 到 00:02:30)
- 2.2.5. 去除水印
- 2.3. 視頻轉封裝
- 2.3.1. HLS 轉 MP4
1. 環境部署(Windows)
1.1. 安裝包下載
訪問 FFmpeg 官網,點擊 Windows builds from gyan.dev。
在 Release Builds 區域選擇最新版本(如 ffmpeg-7.0.2-essentials_build.zip):
- Essentials:基礎功能版(推薦)。
- Full:完整功能版(需更多存儲空間)。
GitHub 下載地址
版本任選
這里我選擇 full 版本,解壓后復制 bin 目錄路徑:
├── bin # 核心可執行文件(ffmpeg.exe、ffplay.exe、ffprobe.exe)├── ffmpeg.exe├── ffplay.exe└── ffprobe.exe
├── doc # 文檔
└── presets # 預設編碼方案
1.2. 配置環境變量
- 右鍵【此電腦】→【屬性】→【高級系統設置】 →【環境變量】。
- 在【系統變量】中找到【Path】→點擊【編輯】→【新建】→ 輸入 D:\Programs\ffmpeg\bin(替換為實際路徑)。
- 連續點擊【確定】保存設置。
1.3. 驗證安裝
打開命令行窗口(Win+R → 輸入 cmd),執行:
ffmpeg -version
若顯示版本信息(如 ffmpeg version 7.0.2),則安裝成功
2. FFmpeg 基礎使用教程
2.1. 常用命令格式
ffmpeg [全局參數] -i [輸入文件] [輸出參數] [輸出文件]
2.2. 基礎功能示例
2.2.1. 視頻轉碼(MP4 → MKV)
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mkv
-c:v:視頻編碼器(如 libx265 為 H.265)。
-c:a:音頻編碼器(如 mp3)。
2.2.2. 調整分辨率(1080p → 480p)
ffmpeg -i input.mp4 -vf scale=854:480 output.mp4
2.2.3. 提取音頻
ffmpeg -i input.mp4 -vn -c:a copy output.aac
-vn:忽略視頻流。
2.2.4. 剪切視頻片段(截取 00:01:00 到 00:02:30)
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c:v copy -c:a copy output.mp4
2.2.5. 去除水印
https://www.zhihu.com/people/lp-uber/posts
2.3. 視頻轉封裝
2.3.1. HLS 轉 MP4
- 轉換單個 TS 文件到 MP4
ffmpeg -i input.ts -c copy output.mp4
-c copy 選項告訴 FFmpeg 直接復制視頻和音頻流,不進行重新編碼,這樣可以保持原始質量并快速完成轉換。
如果 TS 文件包含特定的編碼或封裝格式需要被轉換(例如從 MPEG-TS 封裝轉換為 MP4 封裝),可以省略 -c copy 選項,讓 FFmpeg 自動選擇合適的編解碼器進行轉換。
- 轉換 HLS 流中的 TS 片段到 MP4
處理 HLS 流中的多個 TS 片段(例如,一個 .m3u8 播放列表中的所有 TS 文件):
首先,下載所有 TS 文件(如果存在可跳過該步):
wget -i playlist.m3u8 -P videoss/
然后,合并這些 TS 文件到一個單一的 MP4 文件:
ffmpeg -f concat -safe 0 -i playlist.txt -c copy output.mp4
-f concat 是 FFmpeg 中用于拼接多個媒體文件的輸入格式選項,將多個視頻或音頻文件無縫連接成一個文件。
-safe 參數是 FFmpeg 中用于控制文件路徑安全檢查的選項,主要在使用 -f concat 進行文件拼接時使用。
1 (默認值): 啟用安全檢查,只允許相對路徑且不包含特殊字符;禁用絕對路徑、包含父目錄的引用路徑、某些特殊字符和符號鏈接;
0: 禁用安全檢查,允許使用絕對路徑和特殊路徑。
-i playlist.txt 是一個文本文件,包含所有 TS 文件的路徑,每一行一個文件路徑。例如:
file 'videss/segment_0.ts'
file 'videss/segment_1.ts'
...
最后,文件結構:
├── videoss├── segment_0.ts├── segment_1.ts└── segment_10.ts
├── output.mp4 # 輸出文件
└── playlist.txt # 輸入文件列表