Ffmpeg安裝
下載并解壓
進入官網 (https://ffmpeg.org/download.html),選擇 Window
然后再打開的頁面中下滑找到 release builds,點擊 zip 文件下載
環境變量配置
下載好之后解壓,找到 bin 文件夾,里面有3個 .exe 文件
然后復制這個 bin 目錄地址
然后再環境變量中的 Path 中添加保存即可
測試運行
打開cmd,輸入 ffmpeg -version 測試
mp4轉ts文件
命令
ffmpeg -y -i 你的視頻地址.mp4 -vcodec copy -acodec copy -bsf:v h264_mp4toannexb ts文件輸出地址.ts
參數解釋
ffmpeg
:- 命令行工具的名稱,用于處理多媒體文件。
-y
:- 這個選項告訴
ffmpeg
在輸出文件已存在時,無需提示直接覆蓋目標文件。
- 這個選項告訴
-i 你的視頻地址.mp4
:-i
表示輸入文件。你的視頻地址.mp4
是輸入視頻文件的路徑或文件名。
-vcodec copy
:-vcodec
或-c:v
指定視頻編解碼器。copy
表示直接復制視頻流而不重新編碼。
-acodec copy
:-acodec
或-c:a
指定音頻編解碼器。copy
表示直接復制音頻流而不重新編碼。
-bsf:v h264_mp4toannexb
:-bsf:v
表示對視頻流應用位流過濾器(Bitstream Filter)。h264_mp4toannexb
是具體的位流過濾器,作用是將 H.264 內容從 MP4 的格式轉換為 TS 中使用的 Annex B 格式。這是因為 MP4 中 H.264 使用的是一種不同的封裝格式,不適合直接存儲在 TS 容器中。
ts文件輸出地址.ts
:- 指定輸出文件的路徑或文件名,這里是一個 TS 格式文件。
示例
ffmpeg -y -i D:\javaLogs\filePan\files\114\大屏視頻.mp4 -vcodec copy -acodec copy -bsf:v h264_mp4toannexb D:\javaLogs\filePan\files\114\大屏視頻.ts
運行結果
生成索引文件.m3u8和切片.ts
在處理視頻在線播放時可以將一個大的ts視頻文件切成多個小的ts文件,并生成一個m3u8索引文件
命令
ffmpeg -i input.mp4 -c copy -map 0 -f segment -segment_list list.m3u8 -segment_time 60 output_dir/output_%04d.ts
input.mp4
: 輸入文件。-c copy
: 對視頻和音頻流進行無損復制。-map 0
: 映射所有流。-f segment
: 使用segment
多路復用器。-segment_list list.m3u8
: 生成包含所有片段文件名的播放列表文件,這里用 m3u8 格式。-segment_time 60
: 每個片段的時長為 60 秒。output_dir/output_%04d.ts
: 輸出的片段文件(存放在output_dir
目錄,命名為output_0000.ts
,output_0001.ts
等)。
示例
mkdir D:\javaLogs\filePan\files\114\大屏視頻ffmpeg -i D:\javaLogs\filePan\files\114\大屏視頻.mp4 -c copy -map 0 -f segment -segment_list D:\javaLogs\filePan\files\114\大屏視頻\index.m3u8 -segment_time 60 D:\javaLogs\filePan\files\114\大屏視頻\output_%04d.ts
輸出的內容
生成視頻縮略圖
使用 ffmpeg
生成視頻縮略圖是一項常見任務。在下面的例子中,我將向你展示如何從視頻中生成一張或多張縮略圖。
生成單個縮略圖
假設你希望從視頻的特定時間幀生成一張縮略圖,例如在視頻的第 30 秒生成縮略圖,命令如下:
ffmpeg -i 你的視頻地址.mp4 -ss 00:00:30 -vframes 1 -q:v 2 縮略圖輸出路徑.jpg
參數解釋
-i 你的視頻地址.mp4
: 輸入視頻文件。-ss 00:00:30
: 定位到視頻的第 30 秒。也可以使用更精確的時間格式,比如00:01:30.500
表示 1 分 30 秒之后的第 500 毫秒。-vframes 1
: 指定只輸出一幀圖片。-q:v 2
: 設置輸出圖片的質量。數值范圍為 1-31,數值越小質量越高,2 是一個常用的高質量值。縮略圖輸出路徑.jpg
: 輸出圖片的路徑和文件名。
生成多張縮略圖
如果你希望從視頻中定時生成多張縮略圖,例如每隔 10 秒生成一張,命令如下:
ffmpeg -i 你的視頻地址.mp4 -vf "fps=1/10" 縮略圖輸出路徑_%03d.jpg
參數解釋
-i 你的視頻地址.mp4
: 輸入視頻文件。-vf "fps=1/10"
: 使用視頻過濾器,每 10 秒生成一幀圖片(1/10
表示每 1/10 秒生成一幀)。縮略圖輸出路徑_%03d.jpg
: 輸出圖片的路徑和文件名,%03d
會被替換為當前幀號,生成一系列的圖片如縮略圖輸出路徑_001.jpg
、縮略圖輸出路徑_002.jpg
等。
示例
以下是示例命令:
生成單個縮略圖
ffmpeg -i video.mp4 -ss 00:00:30 -vframes 1 -q:v 2 thumbnail.jpg
生成多張縮略圖,每30秒生成一張
ffmpeg -i video.mp4 -vf "fps=1/30" thumbnails_%03d.jpg
視頻壓縮
使用 ffmpeg
壓縮視頻是一項常見任務,尤其是在需要減小文件大小以便于存儲或傳輸時。以下是幾個基本的例子,涵蓋常見的壓縮場景。
- 使用 H.264 編碼器壓縮視頻
H.264 是一種常用的高效視頻壓縮標準。你可以使用如下命令將視頻壓縮為 H.264 格式:
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium output.mp4
參數解釋
-i input.mp4
: 輸入視頻文件。-vcodec libx264
: 使用 H.264 編碼器。-crf 23
: 恒定質量因子,范圍為 0(無損)到 51(最差),默認值是 23。數值越小,質量越好,文件越大。數值越大,文件越小,質量越低。-preset medium
: 預設參數,決定編碼速度與壓縮率之間的平衡。常用預設有ultrafast
、superfast
、veryfast
、faster
、fast
、medium
、slow
、slower
、veryslow
。medium
是默認值。
- 壓縮視頻并降低分辨率
如果你不僅想要壓縮視頻文件大小,還希望降低分辨率,可以使用下面的命令:
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -vf scale=1280:720 output.mp4
參數解釋
-vf scale=1280:720
: 調整視頻分辨率為 1280x720。你可以根據需要設置其他分辨率。
- 壓縮視頻并降低比特率
如果你希望控制視頻的比特率,可以使用如下命令:
ffmpeg -i input.mp4 -b:v 1000k -vcodec libx264 -preset medium output.mp4
參數解釋
-b:v 1000k
: 設置視頻比特率為 1000 kbps。你可以根據需要調整這個值。
- 壓縮視頻音頻
如果你希望同時壓縮視頻和音頻,可以添加音頻參數:
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -acodec aac -b:a 128k output.mp4
參數解釋
-acodec aac
: 使用 AAC 音頻編碼器。-b:a 128k
: 設置音頻比特率為 128 kbps。
示例命令
使用 H.264 編碼壓縮視頻
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium output.mp4
壓縮視頻并降低分辨率
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -vf scale=1280:720 output.mp4
壓縮視頻并設置比特率
ffmpeg -i input.mp4 -b:v 1000k -vcodec libx264 -preset medium output.mp4
同時壓縮視頻和音頻
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -acodec aac -b:a 128k output.mp4
運行這些命令時,請確保輸入文件路徑正確,并且你有輸出目錄的寫入權限
圖片生成縮略圖
使用ffmpeg生成縮略圖
以下是使用ffmpeg生成128x128像素縮略圖的命令:
ffmpeg -i input.jpg -vf "thumbnail,scale=128:128" -frames:v 1 output_thumbnail.jpg
參數解釋
-i input.jpg
:輸入圖片文件。-vf "thumbnail,scale=128:128"
:使用縮略圖濾鏡和縮放濾鏡,將圖片縮放至128x128像素。-frames:v 1
:僅輸出一幀圖像。output_thumbnail.jpg
:生成的縮略圖文件名。
示例
ffmpeg -i ./大屏視頻.jpg -vf "thumbnail,scale=128:128" -frames:v 1 output_thumbnail.jpg
更多其他用法
可參考:https://blog.csdn.net/m0_37624402/article/details/125123818
官方文檔:https://ffmpeg.org/ffmpeg.html#Options