下載地址:https://www.gyan.dev/ffmpeg/builds/#release-builds
(注意,在我的系統(tǒng)中,如果設(shè)置了conda環(huán)境變量,則在路徑C:\Users\用戶\.conda\envs\comfyui_cp311\Library\bin下有較舊版本的ffmped)
1、查看視頻信息
? 方法:查看所有視頻流詳細(xì)信息
輸出中包含:
這里 25 fps 就是幀率。
2、編碼格式
?? 主流視頻編碼格式對(duì)比
| 編碼格式 | 通用名稱 | 質(zhì)量/壓縮比 | 解碼兼容性 | 編碼速度 | 推薦場(chǎng)景 |
|---|---|---|---|---|---|
| H.264 | AVC (Advanced Video Coding) | ★★★★☆(高) | ★★★★★(非常高) | ★★★(適中) | YouTube、直播、網(wǎng)頁(yè)、電視、手機(jī) |
| H.265 | HEVC (High Efficiency Video Coding) | ★★★★★(極高) | ★★★★(中等) | ★★(慢) | 4K/8K 視頻、高壓縮率存檔 |
| AV1 | AOMedia Video 1 | ★★★★★(極高) | ★★(較低) | ★(非常慢) | Web 視頻壓縮、節(jié)省流量/空間 |
| VP9 | Google VP9 | ★★★★☆(高) | ★★★★(較高) | ★★☆(偏慢) | YouTube、WebM 格式 |
| ProRes | Apple ProRes | ★★★(中等) | ★★★(專業(yè)) | ★★★★(快) | 視頻剪輯、非壓縮交付、Apple 設(shè)備 |
| AVC-Intra | H.264 變體 | ★★★★(高) | ★★☆(專業(yè)) | ★★★(中等) | 廣電、電視臺(tái)采編 |
| MJPEG | Motion JPEG | ★(低) | ★★★★(廣泛) | ★★★★(快) | 攝像頭錄像、快速預(yù)覽 |
?? 兼容性提醒:
| 編碼格式 | 播放兼容性情況 |
|---|---|
| H.264 | ? 全平臺(tái)、手機(jī)、電視通吃 |
| H.265 | ?? 老舊設(shè)備/瀏覽器不支持 |
| AV1 | ?? 只有新版瀏覽器和硬件支持 |
| VP9 | ? 瀏覽器廣泛支持,但移動(dòng)端一般 |
| ProRes | ?? 僅限專業(yè)工具播放/剪輯 |
? crf 值
-
CRF(Constant Rate Factor)是一個(gè) 控制視頻畫質(zhì)與體積之間的權(quán)衡參數(shù) -
范圍:
0(無(wú)損)到51(最差) -
推薦值說(shuō)明:
| CRF 值 | 意義 | 畫質(zhì)評(píng)價(jià) | 推薦用途 |
|---|---|---|---|
| 0 | 真無(wú)損(lossless) | 文件巨大 | 極端存檔,僅用于后期 |
| 15~18 | 極高畫質(zhì) | 視覺無(wú)損 | 高質(zhì)量保留/發(fā)布 |
| 19~23 | 高畫質(zhì) | 普通高清 | YouTube、日常壓縮 |
| 24~28 | 中等畫質(zhì) | 明顯可見壓縮 | 網(wǎng)速慢或空間不足場(chǎng)景 |
| 29+ | 低畫質(zhì) | 像素化嚴(yán)重 | 不推薦 |
所以,CRF=18 大約等價(jià)于「99 畫質(zhì)」。如果你想更保守,
CRF=16也可以。
?? FFmpeg 默認(rèn) -crf 值一覽:
| 編碼器 | 默認(rèn) CRF 值 | 說(shuō)明 |
|---|---|---|
libx264 |
23 | 中等畫質(zhì),壓縮與質(zhì)量的平衡點(diǎn) |
libx265 |
28 | H.265 默認(rèn)值更高(壓縮效率更強(qiáng)) |
libvpx |
32 | VP8,質(zhì)量稍低 |
libvpx-vp9 |
32 | VP9,壓縮比高,但默認(rèn)質(zhì)量一般 |
libaom-av1 |
32 | AV1,高壓縮比,默認(rèn)值偏高(較低質(zhì)量) |
3、分離音頻、分離視頻幀
? 分離音頻:使用 MP3 編碼器將音頻重新編碼
推薦命令:
參數(shù)解釋:
-
-vn:忽略視頻流 -
-acodec libmp3lame:使用 LAME MP3 編碼器 -
-q:a 2:音質(zhì)設(shè)置(2 是高音質(zhì),范圍 0~9,越小越好) -
輸出文件:
2008.2.7.mp3
這個(gè)命令會(huì)自動(dòng)將 wmav2 轉(zhuǎn)為標(biāo)準(zhǔn) MP3 文件,適用于各種音頻處理場(chǎng)景。
? 基礎(chǔ)命令:提取所有幀
?? 參數(shù)說(shuō)明:
| 參數(shù) | 含義 |
|---|---|
-i input.mp4 |
輸入視頻 |
-q:v 1 |
圖像質(zhì)量(1 是 JPEG 的最高質(zhì)量,31 是最低) |
frame_%05d.jpg |
輸出幀的文件名格式,%05d 是幀編號(hào)(如 frame_00001.jpg) |
? 提取第一幀的命令:
參數(shù)解釋:
-
-vframes 1:只輸出 1 幀(即第一幀)
? 輸出為 PNG(無(wú)損)
PNG 格式無(wú)損壓縮,適合后期處理(如 AI 生成、視頻恢復(fù)等),但文件大。
? 每秒提取 N 幀(而非每一幀)
每秒只保存 5 幀,用于抽幀預(yù)覽或節(jié)省空間。
?? 指定時(shí)間段提取幀
只提取第 10 秒到第 20 秒之間的幀。
?? 提取關(guān)鍵幀(I幀)
只導(dǎo)出關(guān)鍵幀,適合做鏡頭預(yù)覽或視頻摘要。
?? 輸出到文件夾(推薦)
防止和當(dāng)前目錄混亂。
4、圖片+音頻 合成視頻
? 圖片合成視頻:
-
-framerate 24:設(shè)定每秒幀數(shù)為 24 FPS(要與圖片實(shí)際幀率匹配) -
-i D:\...Video_%04d_.png:加載按順序命名的幀圖,%04d對(duì)應(yīng)0001、0002... -
-i ./2008.2.7.mp3:加載音頻 -
-c:v libx264:視頻編碼使用 H.264 -crf 18:視覺無(wú)損(范圍 0~51,越低越清晰)-
-pix_fmt yuv420p:像素格式設(shè)置為兼容性最好的 YUV420 -
-c:a aac:音頻編碼為 AAC -
-shortest:以“音頻或視頻中較短的那個(gè)”為最終時(shí)長(zhǎng)(避免黑屏或靜音) -
output.mp4:輸出文件名
如果你的圖像文件是從 Video_00301_.png 開始,并按順序編號(hào)(例如 Video_00302_.png, Video_00303_.png…),那么 FFmpeg 默認(rèn)從 Video_00001.png 起始編號(hào)匹配不到這些文件,需要使用 -start_number 參數(shù)來(lái)指定起始幀號(hào)。
? 正確命令如下:
?? 參數(shù)說(shuō)明:
-
-start_number 301:告訴 FFmpeg 從00301開始找圖像
如果圖片編號(hào)不連續(xù)(例如:Video_00301_.png、Video_00303_.png、Video_00309_.png……),那么 FFmpeg 的 %d 模式 無(wú)法處理不連續(xù)幀,因?yàn)樗筮B續(xù)編號(hào)。此時(shí)有兩個(gè)解決方案:
? 方法一:用文件列表(推薦方式)
你可以創(chuàng)建一個(gè)包含所有圖片路徑的文本文件(例如 frame_list.txt),然后用 FFmpeg 的 -f concat -safe 0 -i 模式導(dǎo)入。
步驟如下:
-
生成列表文件(注意格式必須是這樣):
你可以用批處理或 Python 自動(dòng)生成,或手動(dòng)編輯。
-
使用 FFmpeg 合成視頻:
? 方法二:使用 -pattern_type glob(前提是文件名規(guī)則一致)
如果所有圖片在同一文件夾內(nèi),你可以使用通配符匹配所有文件:
?? 注意:這種方法不會(huì)按照編號(hào)排序,而是按文件名字典序排序,可能會(huì)造成幀順序錯(cuò)亂!
如果你不確定幀順序正確,還是建議用 方法一(列表)。
在windows下用不了,會(huì)報(bào)錯(cuò)誤:Pattern type 'glob' was selected but globbing is not supported by this libavformat build
4、圖片+音頻 合成視頻(指定分辨率)
1、指定視頻長(zhǎng)寬,當(dāng)圖片一邊比指定尺寸小時(shí),以黑邊填補(bǔ),當(dāng)圖片另外一邊比指定尺寸大時(shí),壓縮到指定尺寸
ffmpeg -framerate 25 -i Video_%05d_.png -i ./純.mp3 -vf "scale='if(gt(a,3840/2160),3840,-1)':'if(gt(a,3840/2160),-1,2160)',pad=3840:2160:(3840-iw)/2:(2160-ih)/2:black" -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac -shortest output.mp4
2、指定視頻長(zhǎng)寬,當(dāng)圖片一邊比指定尺寸小時(shí),以黑邊填補(bǔ)
ffmpeg -r 25 -i Video_%05d_.png -i ./純.mp3 -vf "scale=w=iw:h=ih:force_original_aspect_ratio=decrease,pad=3840:2160:(ow-iw)/2:(oh-ih)/2:black" -s 3840x2160 -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4
3、指定視頻長(zhǎng)寬,當(dāng)圖片尺寸與指定長(zhǎng)寬不一致時(shí),使用Lanczos算法縮放圖片到指定長(zhǎng)寬
ffmpeg -framerate 25 -i Video_%05d_.png -i ./純.mp3 -vf "scale=3840:2160:flags=lanczos" -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a aac -shortest output.mp4
?? 參數(shù)說(shuō)明:
-
-vf "scale=3840:2160:flags=lanczos":使用 Lanczos 算法將圖片縮放到指定尺寸
5、將多個(gè)視頻合成一個(gè)
你可以使用 ffmpeg 命令行 合并多個(gè)視頻(如 MP4 文件),但要確保視頻的 編碼格式、分辨率、幀率等一致。以下是幾種常見場(chǎng)景下的 命令行-only 合并方法:
? 方法 1:使用 concat demuxer(推薦,快速無(wú)重編碼)
適用于:視頻編碼、分辨率、幀率完全一致。
步驟:
-
創(chuàng)建一個(gè)文本文件
list.txt,內(nèi)容格式如下:
?? 文件路徑支持相對(duì)或絕對(duì)路徑,最好不要有空格,確保格式正確。
-
執(zhí)行合并命令:
-
-c copy表示直接拷貝視頻流,無(wú)需重新編碼,速度非常快。 -
-safe 0允許使用絕對(duì)路徑或含特殊字符的路徑。
? 方法 2:使用 concat 濾鏡(當(dāng)視頻參數(shù)不一致)
適用于:不同編碼或參數(shù)的視頻(必須重編碼)。
解釋:
-
concat=n=3:v=1:a=1表示合并 3 個(gè)視頻,含視頻軌和音頻軌。 -
所有視頻的 分辨率、幀率、通道數(shù)等必須一致,否則會(huì)報(bào)錯(cuò)。
-
ffmpeg會(huì)自動(dòng)重編碼。
? 方法 3:配合 Bash 一行命令(自動(dòng)生成列表并合并)
說(shuō)明:
-
自動(dòng)將當(dāng)前目錄下的所有
.mp4文件添加到list.txt -
然后執(zhí)行快速無(wú)重編碼的合并
?? 注意事項(xiàng)
| 條件 | concat demuxer | concat filter |
|---|---|---|
| 是否需要重新編碼 | 否(更快) | 是(更兼容) |
| 視頻格式是否必須一致 | 是 | 否 |
| 音視頻軌道數(shù)必須相同 | 是 | 是 |
| 音頻丟失會(huì)報(bào)錯(cuò) | 是 | 是 |
?? 附加技巧:轉(zhuǎn)碼對(duì)齊后再合并(必要時(shí))
用它預(yù)處理所有視頻,使其可用于 concat 合并。
6、分割視頻
方法 1: 按時(shí)間段分割(最常用)
使用 -ss(起始時(shí)間)和 -t(持續(xù)時(shí)間)參數(shù)來(lái)切割視頻片段。時(shí)間格式為 HH:MM:SS 或秒數(shù)(如 60 表示 1 分鐘)。
命令示例:從視頻開頭切割前 10 分鐘的片段。
- -i input.mp4:輸入文件。
- -ss 00:00:00:從第 0 秒開始(可改為如 -ss 00:05:30 從 5 分 30 秒開始)。
- -t 00:10:00:切割 10 分鐘(可改為秒數(shù) -t 600)。
- -c copy:直接復(fù)制視頻/音頻流,不重新編碼(推薦用于無(wú)損切割)。
- output1.mp4:輸出文件(可自定義名稱和格式)。
方法 2: 按文件大小或幀數(shù)分割
- 按大小分割(例如,每 100MB 一個(gè)文件):
textffmpeg -i input.mp4 -c copy -map 0 -f segment -segment_time 00:05:00 -reset_timestamps 1 output_%03d.mp4
- -f segment:使用分段輸出格式。
- -segment_time 00:05:00:每個(gè)片段 5 分鐘(可調(diào)整為大小閾值,但 FFmpeg 更精確用時(shí)間)。
- output_%03d.mp4:輸出文件名為 output_001.mp4、output_002.mp4 等。
- 按幀數(shù)分割(例如,每 1000 幀一個(gè)片段):
(這里假設(shè)視頻 30 FPS,1000 幀 ≈ 33 秒。)text
ffmpeg -i input.mp4 -vf fps=30 -frames:v 1000 output1.mp4
方法 3: 使用列表文件批量分割(高級(jí))
如果有多個(gè)切割點(diǎn),可以創(chuàng)建一個(gè)文本文件 segments.txt,內(nèi)容如下(每行一個(gè)片段,格式:file 'input.mp4'\noutpoint 00:10:00):
file 'input.mp4'
outpoint 00:10:00
file 'input.mp4'
outpoint 00:20:00
然后運(yùn)行:
ffmpeg -f concat -safe 0 -i segments.txt -c copy output.mp4
但這更適合合并;對(duì)于分割,推薦方法 1。
浙公網(wǎng)安備 33010602011771號(hào)