FFmpeg可能不少的朋友沒有怎麼聽過,但這幾個軟體中必有一個你曾經用過:暴風影音、QQ影音、KMP、GOM Player、PotPlayer(2010)、KMPlayer。 FFmpeg是開源軟體,依照協定採用FFmpeg的軟體也必需開源,但這幾個影音軟體不遵守協定,於是被上了FFmpeg的「黑名單」了。
FFmpeg是一套領先的音視頻多媒體處理開源框架,採用LGPL或GPL授權。它提供了對音視頻的採集、編碼、解碼、轉碼、音視頻分離、合併、流化、過濾器等豐富的功能,包含了非常先進的音頻/視頻編解碼庫libavcodec,具有非常高的可移植性和編解碼質量,是一個多媒體處理神器。
同時FFmpeg也提供了指令包,可以在Windows、Linux等平台上使用,很多人覺得FFmpeg用起來難,其實只要我們安裝好了FFmpeg指令工具後,就可以在Windows上快速實現視訊格式轉換、視訊壓縮以及影片與圖片之間的相互轉換了。
更多的站長工具和站長軟體,這裡有:
- 站長必備技能批次為圖片添加浮水印-XnView和美圖秀秀批量處理方法
- WordPress最佳編輯器:Windows Live Writer安裝與使用(Windows 10)
- 一軟在手截圖無憂:ShareX截圖神器-短小精悍功能完備 自動化任務可截圖無憂:ShareX截圖神器-短小精悍功能完備 自動化任務可截取圖截視頻
一、FFmpeg軟體安裝
網站:
- 官網:https://ffmpeg.zeranoe.com/builds/
- 備用下載:https://wzfou.com/down/ffmpeg64(64位元)
進入網站後,選擇你要安裝的版本,支援Windows 7 和 Mac OS X 10.10以上。
下載的壓縮包解壓縮獲得 ffmpeg-xxx-win64-static 資料夾,將其重新命名為 ffmpeg ,然後將 ffmpeg 資料夾放置到程式資料夾,例如wzfou.com放置路徑為:C:。
開啟環境變數設定頁:資源管理器 > 此電腦 > 右鍵-屬性 > 進階系統設定 > 環境變數。雙擊 Path 項目進入編輯頁,選擇新建,將 路徑C:ffmpegbin 貼至輸入框後確定儲存。 (點擊放大)
現在打開你的CMD,輸入 ffmpeg
回車執行,看到有回訊息就表示你安裝FFmpeg成功了。
二、FFmpeg快速使用
如果不是影音專業需求戶,可以只看這部分FFmpeg的常用操作,後面的更為複雜的操作可「按需觀看」。
2.1 轉換格式
FFmpeg轉換格式最簡單、最常用的一個指令就是:
ffmpeg -i input.xxx output.xxx
mp4和flv格式轉換,指令如下:
ffmpeg -i input.flv output.mp4 #或者 ffmpeg -i input.mp4 output.flv
mp4和webm格式轉換,指令如下:
ffmpeg -i input.mp4 output.webm #或者 ffmpeg -i input.webm output.mp4
2.2 壓縮視頻
FFmpeg壓縮視訊的命令如下:
ffmpeg -i input.mp4 -r 10 -b:a 32k output.mp4 #对它降低fps和音频码率的方法大大压缩文件大小,而清晰度不变。 #或者 ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4 #采用H.264视频压缩算法和AAC音频压缩算法,视频帧率10fps,音频码率32k #或者是 ffmpeg -i wzfou.mp4 -crf 20 wzfou.mp4 ffmpeg -i wzfou1.flv -crf 20 wzfou1.mp4 ffmpeg -i wzfou1.mp4 -crf 30 wzfou30.mp4 ffmpeg -i 480p.mp4 480p.webm
2.3 轉換gif
把影片轉換為gif,指令如下:
#把视频的前 30 帧转换成一个 Gif ffmpeg -i input_video.mp4 -vframes 30 -y -f gif output.gif #将视频转成 gif 将输入的文件从 (-ss) 设定的时间开始以 10 帧频率,输出到 320x240 大小的 gif 中,时间长度为 -t 设定的参数。 ffmpeg -ss 00:00:00.000 -i input.mp4 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
三、FFmpeg視訊操作
FFmpeg的指令參數如下:
相關說明:
-crt: 這個選項會直接影響到輸出視訊的碼率,當設定了這個參數之後,再設定-b指定碼率不會生效,crt的取值範圍是0-50,0為無失真編碼,建議18-28。
-preset: 指定編碼的配置,x264提供了一些預設值,而這些預設值可以透過preset指定。 preset主要是影響編碼的速度,並不會很大的影響編碼出來的結果的品質。
執行完一轉碼指令之後,調整-crf參數值,分別設為19、20、28、51,重新轉碼輸出為不同的MP4檔。記錄數據,比較如下:
來源 文件大小 縮減比
crf = 18 46.3 < x2> 21%
crf = 19 < x2> 36.7 <x2 > 33%
crf = 20 31.2 < x2> 43%
crf = 28 26.5 83%
crf = 51 1.25 97 %
3.1 指定轉換格式
一般FFmpeg會依照檔案格式選擇最適合的容器格式與編碼格式,也可以手動指定。例如:
ffmpeg -i out.ogv -vcodec h264 out.mp4 ffmpeg -i out.ogv -vcodec mpeg4 out.mp4 ffmpeg -i out.ogv -vcodec libxvid out.mp4 ffmpeg -i out.mp4 -vcodec wmv1 out.wmv ffmpeg -i out.mp4 -vcodec wmv2 out.wmv
-i
後面是輸入檔名。 -vcodec
後面是編碼格式,h264 最佳,但 Windows 系統預設不安裝。如果是要插入 ppt 的視頻,選擇 wmv1 或 wmv2 是最合適了。
另外還有附加選項:-r
指定幀率,-s
指定分辨率,-b
指定比特率;於此同時可以對聲道進行轉碼,-acodec
指定音訊編碼,-ab
指定音訊位元率,-ac
指定聲道數,例如:
ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec libfaac -ab 48k -ac 2 out.mp4
原樣轉換格式,即保持原始的視訊和音訊編碼格式,指令如下:
ffmpeg -i input.flv -vcodec copy -acodec copy out.mp4 #-vcodec copy 和 -acodec copy 表示所使用的视频和音频编码格式,为原样拷贝。
3.2 合併MP4視頻
FFmpeg可以將多個影片合併,mp4的合併最好是先轉成無損品質的ts,再合併。命令如下:
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
3.3 更改解析度大小
如果想要調整影片的分辨率,可以使用以下命令:
ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4 # or ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
如果要調整影片的寬高比,可以使用以下指令:
ffmpeg -i input.mp4 -aspect 16:9 output.mp4 #常见的宽高比:16:9、4:3、16:10、5:4
3.4 轉換視訊碼率
ffmpeg 碼率相關的參數主要有 -minrate, maxrate, -b:v,指令如下:
ffmpeg -i input.mp4 -b:v 2000k output.mp4 #把原始视频转换成 2 Mbps 码率视频。ffmpeg 官方建议,在设置 -b:v 时,同时加上 -bufsize 用于设置码率控制缓冲器大小,让整体码率更加趋近于希望的值,减少波动。 ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4 # -minrate 和 -maxrate 比较简单,设置码率不要低于或者超过某一个阈值 ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
3.5 剪輯和裁剪視頻
想要改變截取部分視頻或保留某一部分視頻,指令如下:
ffmpeg -i a.mov -ss 00:00:21 -t 00:00:10 -acodec aac -vcodec h264 -strict -2 out.mp4 #其中 -ss 00:00:21 表示开始剪辑的位置(时间点),-t 00:00:10 表示剪辑的长度,即 10 秒钟 ffmpeg -i a.mov -strict -2 -vf crop=1080:1080:0:420 out.mp4 #将竖向的视频 1080 x 1920,保留中间 1080×1080 部分,其中的 crop=1080:1080:0:420 才裁剪参数,具体含义是 crop=width:height:x:y,其中 width 和 height 表示裁剪后的尺寸,x:y 表示裁剪区域的左上角坐标。比如当前这个示例,我们只需要保留竖向视频的中间部分,所以 x 不用偏移,故传入0,而 y 则需要向下偏移:(1920 – 1080) / 2 = 420
四、圖片操作
4.1 合併圖片為視頻
首先,將你要合併的圖片放在一個資料夾當中,然後重新命名為:img001.png, img002.png, img003.png,這樣。
最後執行合併圖片為影片的指令:
ffmpeg -framerate 24 -i img%03d.png output.mp4 #或者 ffmpeg -r 0.5 -i img%03d.jpg video.avi
4.2 圖片與影片轉換
命令如下:
#将图片序列合成视频 ffmpeg -f image2 -i image%d.jpg video.mpg #将视频分解成图片序列 ffmpeg -i video.mpg image%d.jpg #截取一张352x240尺寸大小的,格式为jpg的图片: ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg #把视频的前30帧转换成一个Animated Gif : ffmpeg -i test.asf -vframes 30 -y -f gif a.gif #在视频的第8.01秒处截取 352*240 的缩略图 ffmpeg -i test2.asf -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg ffmpeg -r 0.5 -i d:/tmpImg/image%04d.jpg -i d:/time.mp3 -vcodec mpeg4 d:/video5.avi
五、FFmpeg常用指令
以下是ffmpeg格式轉換、壓縮影片、合併和切割影片等常用指令:
# 去掉视频中的音频 ffmpeg -i input.mp4 -vcodec copy -an output.mp4 // -an: 去掉音频;-vcodec:视频选项,一般后面加copy表示拷贝 # 提取视频中的音频 ffmpeg -i input.mp4 -acodec copy -vn output.mp3 // -vn: 去掉视频;-acodec: 音频选项, 一般后面加copy表示拷贝 # 音视频合成 ffmpeg -y –i input.mp4 –i input.mp3 –vcodec copy –acodec copy output.mp4 // -y 覆盖输出文件 #剪切视频 ffmpeg -ss 0:1:30 -t 0:0:20 -i input.mp4 -vcodec copy -acodec copy output.mp4 // -ss 开始时间; -t 持续时间 #视频截图 ffmpeg –i test.mp4 –f image2 -t 0.001 -s 320x240 image-%3d.jpg // -s 设置分辨率; -f 强迫采用格式fmt; # 视频分解为图片 ffmpeg –i test.mp4 –r 1 –f image2 image-%3d.jpg // -r 指定截屏频率 # 将图片合成视频 ffmpeg -f image2 -i image%d.jpg output.mp4 #视频拼接 ffmpeg -f concat -i filelist.txt -c copy output.mp4 #将视频转为gif ffmpeg -i input.mp4 -ss 0:0:30 -t 10 -s 320x240 -pix_fmt rgb24 output.gif // -pix_fmt 指定编码 #将视频前30帧转为gif ffmpeg -i input.mp4 -vframes 30 -f gif output.gif #旋转视频 ffmpeg -i input.mp4 -vf rotate=PI/2 output.mp4 #缩放视频 ffmpeg -i input.mp4 -vf scale=iw/2:-1 output.mp4 // iw 是输入的宽度, iw/2就是一半;-1 为保持宽高比 #视频变速 ffmpeg -i input.mp4 -filter:v setpts=0.5*PTS output.mp4 #音频变速 ffmpeg -i input.mp3 -filter:a atempo=2.0 output.mp3 #音视频同时变速,但是音视频为互倒关系 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 # 视频添加水印 ffmpeg -i input.mp4 -i logo.jpg -filter_complex [0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] -map [out] -map 0:a -codec:a copy output.mp4 // main_w-overlay_w-10 视频的宽度-水印的宽度-水印边距; # 截取视频局部 ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4 # 截取部分视频,从[80,60]的位置开始,截取宽200,高100的视频 ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4 # 截取右下角的四分之一 ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4 # 截去底部40像素高度 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
六、FFmpeg軟體效果
以下為FFmpeg壓縮影片效果示範(影片大小不到1.3MB):
以下為FFmpeg轉換為WebP動畫圖片(不到700KB,點選觀看動畫):
七、總結
FFmpeg是一個格式轉換的神器,雖然沒有客戶端使用方便,但是只要掌握了幾個基本的指令就足以完成MP4、FLV、Gif、WebP等格式的轉換和體積壓縮,Windows和Linux平台通用。
同時,FFmpeg也適合專業用戶使用,如果對視訊、音訊等格式有指定的要求,可以參考FFmpeg的官方參數,只需要在轉換格式和壓縮視訊中添加幾個參數即可,轉換和壓縮速度非常快。