FFmpeg 是 Fast Forward Moving Picture Experts Group (快進運動圖片專傢組) 的縮寫,是一種超快音頻 視頻編碼器。
FFmpeg 是領先的開源跨平颱多媒體框架,能解碼 編碼 轉碼 Mux Demux 流化 過濾和播放由人類 機器創建的幾乎所有內容。
FFmpeg 由 AVCodec 音視頻編解碼器、AVDevice 音視頻設備、AVFilter 音視頻濾鏡、AVFormat 音視頻格式、AVUtil 音視頻實用工具、swscale 視頻圖像轉換、swresample 音頻轉換 7 個部分組成。
另請參閱: FFmpeg 4.2.2 中文文檔編製 FFmpeg for Windows
基本用法 詳細用法 媒體切片 抽取音頻 抽取視頻 抽取圖像 閤成視頻 流媒體 多路流
ffmpeg --help
基本語法
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
| 功能 | 命令規範 | 文字解釋 | 示例 | 示例解釋 |
|---|---|---|---|---|
| 幫助 | ffmpeg --help | 展示幫助信息 | ||
| ffmpeg -h | 展示幫助信息 | |||
| ffmpeg -h long | 展示更多選項 | |||
| ffmpeg -h full | 展示所有選項 (包括所有格式和編解碼器特定選項,很長) | |||
| ffmpeg -h type=name |
展示 name (如 decoder/encoder/demuxer/muxer/filter/bsf) 的所有選項 |
|||
| ffmpeg -h demuxer=mp4 |
展示 mp4 demuxer 的所有選項 |
|||
| 版本 | ffmpeg -version | 展示版本信息 |
| 功能 | 命令 | 文字解釋 |
|---|---|---|
| 分析 | ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 test_output-%d.mp4 | 將 input.mp4 連續切片成 test_output-%d.mp4 文檔 |
| ffprobe -v quiet -show_packets -setlect_streams v test_output-0.mp4 2> x|grep pts_time | tail -n 3 | 查看 test_output-0.mp4 切片文檔最後 3 時間戳 | |
| ffprobe -v quiet -show_packets -setlect_streams v test_output-1.mp4 2> x|grep pts_time | head -n 3 | 查看 test_output-1.mp4 切片文檔開始 3 時間戳 | |
| 索引 | ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type ffconcat -segment_list output.lst test_output-%d.mp4 | 將 input.mp4 連續切片成 test_output-%d.mp4 文檔,生成 ffconcat 格式 output.lst 索引文件 |
| ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type flat -segment_list filelist.txt test_output-%d.mp4 | 將 input.mp4 連續切片成 test_output-%d.mp4 文檔,生成 flat 格式 filelist.txt 索引文件 | |
| ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type csv -segment_list filelist.csv test_output-%d.mp4 | 將 input.mp4 連續切片成 test_output-%d.mp4 文檔,生成 csv 格式 filelist.csv 索引文件 | |
| ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type m3u8 -segment_list output.m3u8 test_output-%d.mp4 | 將 input.mp4 連續切片成 test_output-%d.mp4 文檔,生成 m3u8 格式 output.m3u8 索引文件 | |
| 時間戳 | ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -reset_timestamps 1 test_output-%d.mp4 | 按清零時間戳方式將 input.mp4 連續切片成 test_output-%d.mp4 文檔 |
| ffprobe -v quiet -show_packets -setlect_streams v test_output-0.mp4 2> x|grep pts_time | tail -n 3 | 查看 test_output-0.mp4 切片文檔最後 3 時間戳 | |
| ffprobe -v quiet -show_packets -setlect_streams v test_output-1.mp4 2> x|grep pts_time | head -n 3 | 查看 test_output-1.mp4 切片文檔開始 3 時間戳 | |
| 定位 | ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_times 3,9,12 test_output-%d.mp4 | 按從第 3 秒、第 9 秒、第 12 秒開始將 input.mp4 連續切片成 test_output-%d.mp4 文檔 |
| 定點 | ffmpeg -ss 8 -i input.mp4 -c copy output.ts | 按從第 8 秒起將 input.mp4 切片成 output.ts 文檔 |
| ffprobe -v quiet -show_format input.mp4 | grep duration; ffprobe -v quiet -show_format output.ts | grep duration | 分析 比較 input.mp4 和 output.ts 文檔的持續時間 | |
| 定長 | ffmpeg -i input.mp4 -c copy -t 10 -output_ts_offset 120 output.mp4 | 在 10 秒內從頭按 120 秒起始偏移將 input.mp4 切片成 output.mp4 文檔 |
| ffmpeg -i input.mp4 -c copy -t 10 -copyts output.ts | 按在 10 秒內從頭將 input.mp4 切片成 output.ts 文檔 | |
| ffprobe -v quiet -show_format input.mp4 | grep start_time; ffprobe -v quiet -show_format output.ts | grep start_time | 分析 比較 input.mp4 和 output.ts 文檔的起始時間 | |
| ffprobe -v quiet -show_format input.mp4 | grep duration; ffprobe -v quiet -show_format output.ts | grep duration | 分析 比較 input.mp4 和 output.ts 文檔的持續時間 |
| 功能 | 命令 | 文字解釋 | 示例 | 示例解釋 |
|---|---|---|---|---|
| AAC | ffmpeg -i input.mp4 -vn -acodec copy output.aac | 從 input.mp4 音視頻文檔抽取 output.aac 音頻 | ||
| MP3 | ffmpeg -i source.flv -ab 128k dest.mp3 | 從 .flv 視頻分離 Mp3 音頻 | ||
| ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3 | 從視頻分離 Mp3 音頻 |
| 功能 | 命令 | 文字解釋 | 示例 | 示例解釋 |
|---|---|---|---|---|
| H.264 | ffmpeg -i input.mp4 -vcodec copy -an output.h264 | 從 input.mp4 音視頻文檔抽取 output.h264 視頻 | ||
| H.265 | ffmpeg -i input.mp4 -vcodec copy -an -bsf hevc_mp4toannexb hevc output.hevc | 從 input.mp4 音視頻文檔抽取 output.hevc 視頻 |
| 功能 | 命令 | 文字解釋 | 示例 | 示例解釋 |
|---|---|---|---|---|
| JPG | ffmpeg -i input.mpg image_%d.jpg | 從 input.mpg 音視頻文檔抽取 image_1.jpg image_2.jpg ... 序列圖像 |
| 功能 | 命令 | 說明 | 備注 |
|---|---|---|---|
| 圖像 | ffmpeg -f image2 -i image%d.jpg d:/test.mpg | 把序列圖像 image1.jpg image2.jpg ... 閤成視頻 | |
| 媒體 | ffmpeg -i son.wav -i video_origine.avi video_finale.mpg | 將 son.wav 音頻和 video_origine.avi 視頻閤成 video_finale.mpg 音視頻文檔 |
| 功能 | 命令 | 說明 | 備注 |
|---|---|---|---|
| RTMP |
ffmpeg -rtmp_app live -i rtmp://publish.chinaffmpeg.com -c copy -f flv output.flv ffmpeg -re -i input.mp4 -c copy -f flv -rtmp_app live rtmp://publish.chinaffmpeg.com |
將 rtmp://publish.chinaffmpeg.com 流錄製到 output.flv 文檔 將 input.mp4 媒體內容發布到 rtmp://publish.chinaffmpeg.com |
|
|
ffmpeg -re -i input.mp4 -c copy -f flv -rtmp_app live -rtmp_playpath class rtmp://publish.chinaffmpeg.com ffmpeg -rtmp_app live -rtmp_playpath class -i rtmp://publish.chinaffmpeg.com -c copy -f flv output.flv |
將 input.mp4 媒體內容 live 發布到 class 名稱 rtmp://publish.chinaffmpeg.com 將 rtmp://publish.chinaffmpeg.com 名稱 class 流 live 錄製到 output.flv 文檔 |
||
|
ffmpeg -i input.mp4 -c copy -f flv rtmp://publish.chinaffmpeg.com/live/class ffmpeg -i rtmp://publish.chinaffmpeg.com/live/class -c copy -f flv output.flv |
將 input.mp4 媒體內容 live 發布到 class 名稱 rtmp://publish.chinaffmpeg.com 將 rtmp://publish.chinaffmpeg.com 名稱 class 流 live 錄製到 output.flv 文檔 |
||
|
ffmpeg -rtmp_pageurl "http://www.chinaffmpeg.com" -i rtmp://publish.chinaffmpeg.com/live/class ffmpeg -rtmp_swfurl "http://www.chinaffmpeg.com" -i rtmp://publish.chinaffmpeg.com/live/class ffmpeg -rtmp_tcurl "http://www.chinaffmpeg.com" -i rtmp://publish.chinaffmpeg.com/live/class |
將 http://www.chinaffmpeg.com 鏈接 pageUrl 內容 live 發布到 class 名稱 rtmp://publish.chinaffmpeg.com 將 http://www.chinaffmpeg.com 鏈接 swfUrl 內容 live 發布到 class 名稱 rtmp://publish.chinaffmpeg.com 將 http://www.chinaffmpeg.com 鏈接 tcUrl 內容 live 發布到 class 名稱 rtmp://publish.chinaffmpeg.com |
||
| RTSP | ffmpeg -h demuxer=RTSP | 展示 RTSP 解復用器幫助信息 | |
| ffmpeg -rtsp_transport tcp -i rtsp://47.90.47.25/test.ts -c copy -f mp4 output.mp4 | 采用 TCP 協議將 rtsp://47.90.47.25/test.ts 流錄製到 output.flv 文檔 | ||
| ffmpeg -user-agent "ChinaFFmpeg-Player" -i rtsp://input:554/live/1/stream.sdp -c copy -f mp4 -y output.mp4 | 按 ChinaFFmpeg-Player 用戶代理以 UDP 默認協議將 rtsp://input:554/live/1/stream.sdp 流錄製到 output.mp4 文檔 | ||
| HTTP |
ffmpeg -ss 300 -seekable 0 -i http://bbs.chinaffmpeg.com/test.ts -c cooy output.mp4 ffmpeg -ss 300 -seekable 1 -i http://bbs.chinaffmpeg.com/test.ts -c cooy output.mp4 |
采用 HTTP 協議將 http://bbs.chinaffmpeg.com/test.ts 流按禁用尋址方式錄製到 output.mp4 文檔 采用 HTTP 協議將 http://bbs.chinaffmpeg.com/test.ts 流按啓用尋址方式錄製到 output.mp4 文檔 |
|
| ffmpeg -headers "referer: http://bbs.chinaffmpeg.com/index.html" -i http://play.chinaffmpeg.com/live/class.flv -c copy -f flv -y output.flv | 采用 referer: http://bbs.chinaffmpeg.com/index.html 頭將 http://play.chinaffmpeg.com/live/class.flv 流錄製到 output.flv 文檔 | ||
| ffmpeg -user_agent "FFmpegPlayer" -i http://bbs.chinaffmpeg.com/output.flv | 按 FFmpegPlayer 用戶代理推流到 http://bbs.chinaffmpeg.com/output.flv 文檔 | ||
|
ffmpeg -i http://bbs.chinaffmpeg.com/live.flv -c cooy -f flv output.flv ffmpeg -i http://bbs.chinaffmpeg.com/live.ts -c cooy -f flv output.flv ffmpeg -i http://bbs.chinaffmpeg.com/live.m3u8 -c cooy -f flv output.flv |
采用 HTTP 協議將 http://bbs.chinaffmpeg.com/live.flv 流錄製到 output.flv 文檔 采用 HTTP 協議將 http://bbs.chinaffmpeg.com/live.ts 流錄製到 output.flv 文檔 采用 HTTP 協議將 http://bbs.chinaffmpeg.com/live.m3u8 流錄製到 output.flv 文檔 |
||
| TCP |
ffmpeg -listen 1 -f flv -i tcp://127.0.0.1:1234/live/stream -c copy -f flv output.flv time ffmpeg -listen_timeout 5000 -listen 1 -f flv -i tcp://127.0.0.1:1234/live/stream -c copy -f flv output.flv |
采用 TCP 協議監聽本機 1234 端口把 tcp://127.0.0.1:1234/live/stream 流錄製到 output.flv 文檔 采用 TCP 協議 5 秒超時監聽本機 1234 端口把 tcp://127.0.0.1:1234/live/stream 流錄製到 output.flv 文檔 |
|
| ffmpeg -re -i input.mp4 -c copy -f flv tcp://127.0.0.1:1234/live/stream | 采用 TCP 協議把 input.mp4 文檔發布到 tcp://127.0.0.1:1234/live/stream 流 | ||
| time ffmpeg -timeout 20000000 -i tcp://192.168.100.179:1935/live/stream -c copy -f flv output.flv | 采用 TCP 協議 20000 秒超時把 tcp://192.168.100.179:1935/live/stream 流錄製到 output.flv 文檔 | ||
| ffmpeg -re -i input.mp4 -c copy -send_buffer_size 256 -f flv tcp://192.168.100.179:1234/live/stream | 采用 TCP 協議 256 緩衝把 input.mp4 文檔發布到 tcp://192.168.100.179:1234/live/stream 流 | ||
| UDP | ffmpeg -re -i input.mp4 -c copy -localpart 23456 -f flv udp://192.168.100.179:1234/live/stream | 采用 UDP 協議監聽本機 23456 端口把 input.mp4 文檔發布到 udp://192.168.100.179:1234/live/stream 流 | |
| HDS | ffmpeg -h muxer=hds | 展示 HDS 復用器幫助信息 | |
|
ffmpeg -i input -c copy -f hds output ffmpeg -i input -c copy -f hds -window_size 4 output |
把 input 切片錄製到 HDS 流 output 文件 把 input 分 4 個切片錄製到 HDS 流 output 文件 |
||
|
ffmpeg -re -i input.mp4 -c copy -f hds -window_size 4 -extra_window_size 1 output ffmpeg -re -i input.mp4 -c copy -f hds -window_size 4 -extra_window_size 5 output |
把 input.mp4 分 4 個切片 1 個保留錄製到 HDS 流 output 文件 把 input.mp4 分 4 個切片 5 個保留錄製到 HDS 流 output 文件 |
||
| DASH | ffmpeg -h muxer=dash | 展示 DASH 復用器幫助信息 | |
| ffmpeg -re -i input.mp4 -c:v copy -acodec copy -f dash -window_size 4 -extra_window_size 5 index.mpd | 把 input.mp4 按音視頻分離由 4 個切片 5 個保留方式錄製到 DASH 流 index.mpd 文件 | ||
| ffmpeg -re -i input.mp4 -c:v copy -acodec copy -f dash -window_size 4 -extra_window_size 5 -single_file 1 index.mpd | 把 input.mp4 按音視頻分離單文件方式錄製到 DASH 流 index.mpd 文件 |
| 功能 | 命令 | 說明 | 備注 |
|---|---|---|---|
| 管道方式 |
ffmpeg -i input -acodec aac -vcodec libx264 -f flv - | ffmpeg -f mpegts -i -c copy output1 -c copy output2 -c copy output3 ffmpeg -i imput.mp4 -vcodec libx264 -acocdec aac -f flv - | ffmpeg -f flv -i - -c copy -f flv rtmp://publish.chinaffmpeg.com/live/stream1 c copy -f flv rtmp://publish.chinaffmpeg.com/live/stream2 |
將 input 流按 flv 格式管道方式錄製到 output1 output2 output3 將 input.mp4 流按 flv 格式管道方式錄製到 rtmp://publish.chinaffmpeg.com/live/stream1 stream2 |
|
| tee 格式 |
ffmpeg -re -i imput.mp4 -vcodec libx264 -acocdec aac -map 0 -f tee "[f=flv] rtmp://publish.chinaffmpeg.com/live/stream1 | [f=flv] rtmp://publish.chinaffmpeg.com/live/stream2" ffmpeg -i rtmp://publish.chinaffmpeg.com/live/stream1 -i rtmp://publish.chinaffmpeg.com/live/stream1 |
將 imput.mp4 流按 tee 格式發布到 rtmp://publish.chinaffmpeg.com/live/stream1 stream2 查看 rtmp://publish.chinaffmpeg.com/live/stream1 stream2 多路流 |
|
| tee 協議 | ffmpeg -re -i input.mp4 -vcodec libx264 -acodec aac -f flv "tee:rtmp://publish.chinaffmpeg.com/live/stream1 | rtmp://publish.chinaffmpeg.com/live/stream2" | 將 imput.mp4 流按 tee 協議發布到 rtmp://publish.chinaffmpeg.com/live/stream1 stream2 |
版權聲明: 本文為獨傢原創稿件,版權歸 樂數軟件 ,未經許可不得轉載。