ffmpeg 常用命令



mp4中的h264編碼,而h264有兩種封裝:
一種是annexb模式,傳統模式,有startcode,SPS和PPS是在ES中;另一種是mp4模式,一般mp4、mkv、avi會沒有startcode,SPS和PPS以及其它信息被封裝在container中,每一個frame前面是這個frame的長度,很多解碼器只支持annexb這種模式,因此需要將mp4做轉換;在ffmpeg中用h264_mp4toannexb_filter可以做轉換;所以需要使用-bsf h264_mp4toannexb來進行轉換;

 

ffmpeg命令參數說明:

-i 輸入文件

-vcodec 視頻編解碼格式,如:h264或者libx264(h264編解碼)、copy(原樣拷貝)、mpeg4(mp4編碼)

-acodec 音頻編碼格式,如aac(aac編解碼)

-bsf h264_mp4toannexb 見上面解釋

-vn 取消視頻

-an  取消音頻

-sn 取消字幕

-intra 採用幀內編碼,僅適用幀內編碼

更多參數詳見最後。

   

1.分離視頻音頻流

複製代碼
ffmpeg -i input_file -vcodec copy -an output_file_video  //分離視頻流
ffmpeg -i input_file -acodec copy -vn output_file_audio  //分離音頻流

ffmpeg -i target.mp4 -vcodec libx264 -an target.h264    // 將target.mp4分離出沒有聲音的h264編碼的視頻文件
ffmpeg -i target.mp4 -acodec aac target.aac    //  // 將target.mp4分離出aac編碼的音頻文件
ffmpeg -i target.mp4 -c:v libx264 -c:a aac -strict -2 -f hls target.m3u8  // 將mp4文件切爲ts視頻段,並生成m3u8文件
複製代碼

2.視頻解複用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264
ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

3.視頻轉碼

ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264              //轉碼爲碼流原始文件
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264  //轉碼爲碼流原始文件
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi            //轉碼爲封裝文件
//-bf B幀數目控制,-g 關鍵幀間隔控制,-s 分辨率控制

ffmpeg -i target.h264 -vcodec h264 -i target.aac -acodec copy target.ts

4.視頻封裝

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5.視頻剪切

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg        //提取圖片
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    //剪切視頻
//-r 提取圖像的頻率,-ss 開始時間,-t 持續時間

6.視頻錄製

ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

7.YUV序列播放

ffplay -f rawvideo -video_size 1920x1080 input.yuv

8.YUV序列轉AVI

ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi

常用參數說明:

主要參數: -i 設定輸入流 -f 設定輸出格式 -ss 開始時間 視頻參數: -b 設定視頻流量,默認爲200Kbit/s -r 設定幀速率,默認爲25 -s 設定畫面的寬與高 -aspect 設定畫面的比例 -vn 不處理視頻 -vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器音頻參數: -ar 設定採樣率 -ac 設定聲音的Channel數 -acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器 -an 不處理音頻

------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------

1、將文件當做直播送至live

ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

2、將直播媒體保存至本地文件

 

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、將其中一個直播流,視頻改用h264壓縮,音頻不變,送至另外一個直播服務流

 

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

 

4、將其中一個直播流,視頻改用h264壓縮,音頻改用faac壓縮,送至另外一個直播服務流

ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

5、將其中一個直播流,視頻不變,音頻改用faac壓縮,送至另外一個直播服務流

ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

6、將一個高清流,複製爲幾個不同視頻清晰度的流重新發布,其中音頻不變

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

7、功能一樣,只是採用-x264opts選項

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

8、將當前攝像頭及音頻通過DSSHOW採集,視頻h264、音頻faac壓縮後發佈

ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

9、將一個JPG圖片經過h264壓縮循環輸出爲mp4視頻

ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4

10、將普通流視頻改用h264壓縮,音頻不變,送至高清流服務(新版本FMS live=1)

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃

ffmpeg參數說明:
基本選項:
-formats 輸出所有可用格式
-f fmt 指定格式(音頻或視頻格式)
-i filename 指定輸入文件名,在linux下當然也能指定:0.0(屏幕錄製)或攝像頭
-y 覆蓋已有文件
-t duration 記錄時長爲t
-fs limit_size 設置文件大小上限
-ss time_off 從指定的時間(s)開始, [-]hh:mm:ss[.xxx]的格式也支持
-itsoffset time_off 設置時間偏移(s),該選項影響所有後面的輸入文件。該偏移被加到輸入文件的時戳,定義一個正偏移意味着相應的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持
-title string 標題
-timestamp time 時間戳
-author string 作者
-copyright string 版權信息
-comment string 評論
-album string album名
-v verbose 與log相關的
-target type 設置目標文件類型("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ...)
-dframes number 設置要記錄的幀數
視頻選項:
-b 指定比特率(bits/s),似乎ffmpeg是自動VBR的,指定了就大概是平均比特率
-bitexact 使用標準比特率
-vb 指定視頻比特率(bits/s)
-vframes number 設置轉換多少楨(frame)的視頻
-r rate 幀速率(fps) (可以改,確認非標準楨率會導致音畫不同步,所以只能設定爲15或者29.97)
-s size 指定分辨率 (320x240)
-aspect aspect 設置視頻長寬比(4:3, 16:9 or 1.3333, 1.7777)
-croptop size 設置頂部切除尺寸(in pixels)
-cropbottom size 設置底部切除尺寸(in pixels)
-cropleft size 設置左切除尺寸 (in pixels)
-cropright size 設置右切除尺寸 (in pixels)
-padtop size 設置頂部補齊尺寸(in pixels)
-padbottom size 底補齊(in pixels)
-padleft size 左補齊(in pixels)
-padright size 右補齊(in pixels)
-padcolor color 補齊帶顏色(000000-FFFFFF)
-vn 取消視頻
-vcodec codec 強制使用codec編解碼方式('copy' to copy stream)
-sameq 使用同樣視頻質量作爲源(VBR)
-pass n 選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計信息,第二遍生成精確的請求的碼率
-passlogfile file 選擇兩遍的紀錄文件名爲file
-newvideo 在現在的視頻流後面加入新的視頻流
 
高級視頻選項
-pix_fmt format set pixel format, 'list' as argument shows all the pixel formats supported
-intra 僅適用幀內編碼
-qscale q 以<數值>質量爲基礎的VBR,取值0.01-255,約小質量越好
-loop_input 設置輸入流的循環數(目前只對圖像有效)
-loop_output 設置輸出視頻的循環數,比如輸出gif時設爲0表示無限循環
-g int 設置圖像組大小
-cutoff int 設置截止頻率
-qmin int 設定最小質量,與-qmax(設定最大質量)共用,比如-qmin 10 -qmax 31
-qmax int 設定最大質量
-qdiff int 量化標度間最大偏差 (VBR)
-bf int 使用frames B 幀,支持mpeg1,mpeg2,mpeg4
音頻選項:
-ab 設置比特率(單位:bit/s,也許老版是kb/s)前面-ac設爲立體聲時要以一半比特率來設置,比如192kbps的就設成96,轉換 默認比特率都較小,要聽到較高品質聲音的話建議設到160kbps(80)以上。
-aframes number 設置轉換多少楨(frame)的音頻
-aq quality 設置音頻質量 (指定編碼)
-ar rate 設置音頻採樣率 (單位:Hz),PSP只認24000
-ac channels 設置聲道數,1就是單聲道,2就是立體聲,轉換單聲道的TVrip可以用1(節省一半容量),高品質的DVDrip就可以用2
-an 取消音頻
-acodec codec 指定音頻編碼('copy' to copy stream)
-vol volume 設置錄製音量大小(默認爲256) <百分比> ,某些DVDrip的AC3軌音量極小,轉換時可以用這個提高音量,比如200就是原來的2倍
-newaudio 在現在的音頻流後面加入新的音頻流
字幕選項:
-sn 取消字幕
-scodec codec 設置字幕編碼('copy' to copy stream)
-newsubtitle 在當前字幕後新增
-slang code 設置字幕所用的ISO 639編碼(3個字母)
Audio/Video 抓取選項:
-vc channel 設置視頻捕獲通道(只對DV1394)
-tvstd standard
轉換爲flv: 
    ffmpeg -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 test.flv 
    ffmpeg -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 test.flv 

 轉換文件格式的同時抓縮微圖: 
    ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 

  對已有flv抓圖: 
    ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 

  轉換爲3gp:
    ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 
    ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp

ffmpeg濾鏡使用:filter:testsrc。使用它可以快速生成指定格式、分辨率、時長的H264(或其他)測試視頻(容器可指定),這個在某些測試環節真的很有用。特別是提供幀級精度的時間戳OSD疊加
ffmpeg.exe -f lavfi -i testsrc=duration=100:size=1280x720:rate=30:decimals=2 -pix_fmt yuv420p -vcodec libx264 output.ts  

 提取視頻中的音頻,保存爲mp3
ffmpeg -i apple.mp4 -f mp3 -vn apple.mp3

本文轉自:http://www.cnblogs.com/wenrisheng/p/6139845.html


發佈了16 篇原創文章 · 獲贊 40 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章