格式轉換
basic將視頻從一種格式轉換為另一種格式
ffmpeg -i input.avi output.mp4輸出格式由文件擴展名決定,FFmpeg會自動選擇合適的編碼器。
完整的FFmpeg使用指南,包含各種常用命令、參數說明和實際應用場景示例
了解最強大的多媒體處理框架
支持 Linux、macOS、Windows 等系統
採用 LGPL 或 GPL 許可證,免費使用
支持幾乎所有音視頻格式
命令行界面,便於自動化處理
新手快速入門指南
將視頻從一種格式轉換為另一種格式
ffmpeg -i input.avi output.mp4輸出格式由文件擴展名決定,FFmpeg會自動選擇合適的編碼器。
從視頻文件中提取音頻軌道
ffmpeg -i video.mp4 -vn -c:a libmp3lame audio.mp3此命令從視頻中提取音頻並保存為MP3格式,保留原始音頻質量。
從視頻中捕獲指定時間的畫面
ffmpeg -i video.mp4 -ss 00:01:30 -vframes 1 screenshot.jpg在視頻的1分30秒處截取一張圖片,適合製作視頻縮略圖。
查看視頻或音頻文件的詳細信息
ffmpeg -i input.mp4不指定輸出文件時,FFmpeg會顯示文件的詳細信息,包括編碼、時長、分辨率等。
將視頻轉換為GIF動畫
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" output.gif將視頻轉換為10fps、寬度320像素的GIF動畫,適合製作表情包或短動畫。
將文件夾中所有視頻轉換為指定格式
for %i in (*.mov) do ffmpeg -i "%i" -c:v libx264 -crf 23 -c:a aac "%~ni.mp4"在Windows批處理中循環轉換所有MOV文件為MP4格式,適用於從相機導入的視頻處理。
將視頻逐幀提取為圖片序列
ffmpeg -i video.mp4 frame_%04d.jpg將視頻逐幀提取為JPEG圖片,文件名格式為frame_0001.jpg、frame_0002.jpg等。
從長視頻中提取指定時間段
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:15:30 -c copy clip.mp4使用流複製快速提取10分鐘到15分30秒的視頻片段,保持原始質量。
將多個視頻文件合併為一個
ffmpeg -f concat -i filelist.txt -c copy output.mp4通過文件列表將多個視頻合併為一個,filelist.txt包含要合併的文件路徑。
加快或減慢視頻播放速度
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -an output.mp4將視頻播放速度加快一倍(setpts=0.5*PTS),減慢為一半使用setpts=2*PTS。
改變視頻的分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4將視頻分辨率調整為1280x720像素,保持原始寬高比。
減小視頻文件大小
ffmpeg -i input.mp4 -c:v libx264 -crf 23 compressed.mp4使用H.264編碼壓縮視頻,CRF值越小質量越高(18-28是常用範圍)。
在視頻上疊加圖片或文字水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4在視頻的左上角(10,10)位置添加PNG水印圖片。
裁剪視頻的特定區域
ffmpeg -i input.mp4 -vf "crop=640:360:100:100" output.mp4從視頻的(100,100)位置開始,裁剪640x360像素的區域。
將視頻旋轉90度、180度或270度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4transpose參數:0=逆時針旋轉90度並垂直翻轉,1=順時針旋轉90度,2=逆時針旋轉90度,3=順時針旋轉90度並垂直翻轉。
使用vid.stab插件穩定抖動視頻
ffmpeg -i shaky.mp4 -vf vidstabdetect=shakiness=5:accuracy=15:result="transform_vectors.trf" -f null -第一步:分析視頻抖動並生成變換向量文件。
應用視頻穩定效果
ffmpeg -i shaky.mp4 -vf vidstabtransform=smoothing=10:input="transform_vectors.trf" stable.mp4第二步:應用穩定效果,smoothing參數控制平滑程度。
去除視頻的交錯掃描線
ffmpeg -i input.mp4 -vf yadif output.mp4去除隔行掃描視頻的交錯線,使視頻更適合在逐行掃描設備上播放。
將隔行掃描視頻轉換為逐行掃描
ffmpeg -i interlaced.mp4 -vf bwdif=0:-1:0 deinterlaced.mp4使用bwdif過濾器將隔行掃描視頻轉換為逐行掃描,提高觀看體驗。
減少視頻中的噪點
ffmpeg -i noisy.mp4 -vf hqdn3d denoised.mp4使用hqdn3d過濾器減少視頻中的噪點,提高畫面質量。
增加或減少音頻音量
ffmpeg -i input.mp3 -af "volume=1.5" output.mp3此命令將音頻音量提高50%,可以設置為小於1的值來降低音量。
將音頻從一種格式轉換為另一種格式
ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3將WAV格式音頻轉換為192kbps的MP3格式,適合網絡傳輸。
從音頻中提取指定時間段
ffmpeg -i input.mp3 -ss 00:01:30 -to 00:03:45 -c copy clip.mp3提取音頻從1分30秒到3分45秒的片段,不重新編碼,保持原始質量。
為音頻添加淡入淡出效果
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=3,afade=t=out:st=10:d=3" output.mp3為音頻添加3秒淡入效果(從0秒開始)和3秒淡出效果(從10秒開始)。
減少音頻中的背景噪音
ffmpeg -i input.wav -af "afftdn=nf=-20" output.wav使用FFT降噪算法減少音頻中的背景噪音,nf參數控制降噪強度。
將多個音頻文件合併為一個
ffmpeg -i "concat:input1.mp3|input2.mp3" -c copy output.mp3將多個音頻文件按順序合併為一個文件,不重新編碼,保持原始質量。
調整音頻的採樣率
ffmpeg -i input.wav -ar 44100 output.wav將音頻採樣率調整為44.1kHz,這是CD質量的採樣率。
轉換立體聲為單聲道或反之
ffmpeg -i input.wav -ac 1 output.wav將立體聲音頻轉換為單聲道,設置為2可將單聲道轉換為立體聲。
調整音頻的頻率響應
ffmpeg -i input.wav -af "equalizer=f=1000:width_type=o:width=2:g=5" output.wav在1000Hz頻率處增加5dB增益,調整音頻的頻率平衡。
動態範圍壓縮
ffmpeg -i input.wav -af "acompressor=threshold=0.1:ratio=9:attack=200:release=1000" output.wav應用動態範圍壓縮,減少音頻的動態範圍,使安靜部分更響亮。
在視頻上添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='Sample Text':x=10:y=10:fontsize=24:fontcolor=white" output.mp4在視頻的(10,10)位置添加白色文字水印,字體大小為24。
為視頻添加模糊效果
ffmpeg -i input.mp4 -vf "boxblur=5:1" output.mp4為視頻添加模糊效果,第一個參數控制模糊強度,第二個參數控制模糊算法質量。
調整視頻的亮度、對比度和飽和度
ffmpeg -i input.mp4 -vf "eq=brightness=0.1:contrast=1.2:saturation=1.5" output.mp4調整視頻的亮度(+0.1)、對比度(1.2倍)和飽和度(1.5倍)。
創建視頻的鏡像效果
ffmpeg -i input.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" output.mp4創建視頻的垂直鏡像效果,下半部分是上半部分的鏡像。
為視頻添加老電影效果
ffmpeg -i input.mp4 -vf "noise=alls=20:allf=t+u, curves=vintage" output.mp4為視頻添加噪點和復古顏色曲線,模擬老電影效果。
增強視頻的細節和清晰度
ffmpeg -i input.mp4 -vf "unsharp=5:5:1.0" output.mp4使用unsharp mask算法銳化視頻,增強細節和清晰度。
檢測並突出顯示視頻中的邊緣
ffmpeg -i input.mp4 -vf "edgedetect=low=0.1:high=0.4" output.mp4檢測視頻中的邊緣並突出顯示,適用於計算機視覺應用。
轉換視頻的色彩空間
ffmpeg -i input.mp4 -vf "colorspace=bt709:iall=bt601-6-625:fast=1" output.mp4將視頻從BT.601色彩空間轉換為BT.709色彩空間。
將彩色視頻轉換為灰度視頻
ffmpeg -i input.mp4 -vf "hue=s=0" output.mp4將彩色視頻轉換為灰度視頻,通過將飽和度設置為0實現。
創建視頻的反色效果
ffmpeg -i input.mp4 -vf "negate" output.mp4創建視頻的反色效果,將所有顏色值取反。
錄製RTMP直播流並保存為本地文件
ffmpeg -i rtmp://server/live/stream -c copy -f flv recording.flv錄製RTMP直播流並保存為FLV格式,-c copy參數避免重新編碼,節省CPU資源。
將視頻文件轉換為HLS流格式
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 output.m3u8將MP4視頻轉換為HLS流,每個分片10秒,適合網頁視頻播放。
將本地視頻推送到RTMP服務器
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/stream將本地視頻文件以直播流的形式推送到RTMP服務器,適合直播場景。
錄製電腦屏幕並保存為視頻
ffmpeg -f gdigrab -i desktop output.mp4在Windows系統上錄製整個屏幕,Linux系統可使用x11grab。
錄製攝像頭視頻流
ffmpeg -f dshow -i video="Integrated Camera" output.mp4在Windows系統上錄製攝像頭視頻,需要指定正確的設備名稱。
錄製音頻輸入設備
ffmpeg -f alsa -i default output.wav在Linux系統上錄製默認音頻輸入設備,保存為WAV格式。
生成適應不同帶寬的多分辨率HLS流
ffmpeg -i input.mp4 -map 0 -c:v libx264 -b:v:0 800k -s:v:0 640x360 -c:v:1 libx264 -b:v:1 1500k -s:v:1 854x480 -c:a aac -f hls -var_stream_map "v:0,a:0 v:1,a:0" -hls_segment_filename stream_%v/data%02d.ts -master_pl_name master.m3u8 stream_%v.m3u8生成兩種分辨率(640x360和854x480)的HLS流,適應不同網絡條件。
將視頻文件轉換為DASH流格式
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f dash -window_size 5 -extra_window_size 5 -remove_at_exit 1 output.mpd將MP4視頻轉換為DASH流,適合自適應比特率流媒體播放。
錄製RTSP視頻流
ffmpeg -i rtsp://server/stream -c copy output.mp4錄製RTSP視頻流並保存為MP4格式,適用於監控攝像頭等場景。
將視頻推送到HTTP服務器
ffmpeg -i input.mp4 -c copy -f mp4 http://server/upload將視頻文件通過HTTP POST請求推送到服務器,適合文件上傳場景。
創建畫中畫效果,將小視頻疊加到大視頻上
ffmpeg -i main.mp4 -i pip.mp4 -filter_complex "[1:v]scale=iw/4:ih/4 [pip]; [0:v][pip] overlay=W-w-10:10" output.mp4創建畫中畫效果,將小視頻縮放為1/4大小並放置在主視頻右上角。
使用GPU加速視頻轉碼過程
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4使用NVIDIA GPU加速H.264編碼,大幅提高轉碼速度。
同時處理多個視頻流
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2" output.mp4將兩個視頻水平並排合併為一個視頻,vstack可垂直堆疊。
在視頻上疊加時間碼信息
ffmpeg -i input.mp4 -vf "drawtext=fontfile=/path/to/font.ttf:text='%{pts\:hms}':x=10:y=10:fontsize=24:fontcolor=white" output.mp4在視頻左上角疊加時間碼信息,顯示小時:分鐘:秒格式。
修改視頻的元數據信息
ffmpeg -i input.mp4 -metadata title="My Video" -metadata year="2023" output.mp4修改視頻的元數據信息,如標題、年份、作者等。
使用PSNR評估視頻質量
ffmpeg -i compressed.mp4 -i original.mp4 -lavfi psnr -f null -比較壓縮視頻與原始視頻的質量,輸出PSNR值評估質量損失。
使用CRF模式控制視頻碼率
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -maxrate 2M -bufsize 4M output.mp4使用CRF模式控制視頻質量,同時限制最大碼率防止文件過大。
將逐行掃描視頻轉換為隔行掃描
ffmpeg -i progressive.mp4 -vf "fieldorder=tff" interlaced.mp4將逐行掃描視頻轉換為頂場先行的隔行掃描視頻,適用於廣播電視。
改變視頻的幀率
ffmpeg -i input.mp4 -vf "fps=30" output.mp4將視頻幀率轉換為30fps,使用幀插值或丟幀方法適應新幀率。
減少視頻壓縮產生的塊效應
ffmpeg -i blocky.mp4 -vf "deblock" debocked.mp4減少因高壓縮率產生的塊效應,提高視頻視覺質量。
為文件夾中的所有視頻添加相同水印
for %i in (*.mp4) do ffmpeg -i "%i" -i watermark.png -filter_complex "overlay=10:10" "watermarked_%~ni.mp4"批量處理文件夾中的所有MP4文件,在左上角添加水印。
將文件夾中所有視頻調整為統一分辨率
for %i in (*.mp4) do ffmpeg -i "%i" -vf scale=1280:720 "resized_%~ni.mp4"批量調整所有MP4文件為1280x720分辨率,適合統一視頻規格。
從文件夾中所有視頻提取音頻
for %i in (*.mp4) do ffmpeg -i "%i" -vn -c:a libmp3lame "%~ni.mp3"批量提取所有MP4文件的音頻並保存為MP3格式。
為文件夾中所有視頻生成縮略圖
for %i in (*.mp4) do ffmpeg -i "%i" -ss 00:00:05 -vframes 1 "%~ni_thumb.jpg"為每個視頻在第5秒處生成一張縮略圖。
壓縮文件夾中所有視頻以減少文件大小
for %i in (*.mp4) do ffmpeg -i "%i" -c:v libx264 -crf 23 -c:a aac -b:a 128k "compressed_%~ni.mp4"批量壓縮所有MP4文件,使用CRF 23和128kbps音頻,平衡質量與文件大小。
統計文件夾中所有視頻的總時長
for %i in (*.mp4) do ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "%i"使用ffprobe統計每個視頻的時長,可用於計算總時長。
將視頻信息導出為文本文件
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4 > video_info.json將視頻的詳細格式和流信息導出為JSON文件,便於分析。
分析視頻的幀類型和時間戳
ffprobe -show_frames input.mp4顯示視頻的每一幀信息,包括幀類型(I/P/B)、時間戳等。
分析視頻的碼率變化
ffmpeg -i input.mp4 -vf "showinfo" -f null -分析視頻的碼率變化,顯示每一幀的詳細信息。
驗證視頻文件的完整性和兼容性
ffmpeg -v error -i input.mp4 -f null -驗證視頻文件的完整性和兼容性,只輸出錯誤信息。
探索 FFmpeg 在實際場景中的強大應用
將文件夾中的所有MOV文件轉換為MP4格式,保持原始質量
for %i in (*.mov) do ffmpeg -i "%i" -c:v libx264 -crf 18 -c:a aac "%~ni.mp4"在Windows批處理中使用循環轉換所有MOV文件,適用於從相機導入的視頻處理。
從視頻中每隔一段時間提取一幀,創建縮略圖集合
ffmpeg -i video.mp4 -vf "fps=1/60,scale=320:-1" thumbnails/thumb%03d.jpg每分鐘提取一幀,縮放寬度為320像素(高度按比例自動計算),保存為序列圖片。
從長視頻中提取片段或合併多個視頻
ffmpeg -i input.mp4 -ss 00:10:00 -to 00:15:30 -c copy clip.mp4使用流複製(不重新編碼)快速提取10分鐘到15分30秒的視頻片段,保持原始質量。
將視頻旋轉90度、180度或270度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4transpose參數:0=逆時針旋轉90度並垂直翻轉,1=順時針旋轉90度,2=逆時針旋轉90度,3=順時針旋轉90度並垂直翻轉。
優化視頻壓縮參數以獲得最佳質量體積比
ffmpeg -i input.mp4 -c:v libx264 -preset slower -crf 18 -c:a aac -b:a 128k output.mp4使用slower預設獲得更好的壓縮效率,CRF 18提供高質量,音頻比特率128kbps。
關於 FFmpeg 使用的常見疑問
使用指令 ffmpeg -i input.mp4 output.avi。FFmpeg 會根據輸出檔案的副檔名自動判斷格式。此方式支援 MP4、AVI、MKV、MOV 等多種主流影片格式互轉,不需安裝第三方軟體。
建議使用 CRF (Constant Rate Factor) 模式:ffmpeg -i input.mp4 -crf 23 output.mp4。CRF 值範圍為 0–51:數值越大,壓縮率越高,檔案越小。一般設定在 18–28 之間,可在檔案大小與畫質之間取得良好平衡。
執行 ffmpeg -i video.mp4 -vn -acodec copy audio.aac。參數 -vn 用來停用影片串流,-acodec copy 則直接複製音訊軌道而不重新編碼,確保處理速度最快且音質零損失。
1. 先建立一個 filelist.txt,內容格式為 file 'part1.mp4'。 2. 執行 ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4。使用 -c copy 參數可達到秒級無損合併,避免重新編碼導致畫質下降。