FFmpeg功能命令集合(超詳細)

參考
ffmpeg常用命令
ffmpeg參數中文詳細解釋
[總結]FFMPEG視音頻編解碼零基礎學習方法

一、安裝

打開https://ffmpeg.zeranoe.com/builds/,該網站中的FFMPEG分爲3個版本:Static,Shared,Dev。

前兩個版本可以直接在命令行中使用,他們的區別在於:Static裏面只有3個應用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每個exe的體積都很大,相關的Dll已經被編譯到exe裏面去了。Shared裏面除了3個應用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,還有一些Dll,比如說avcodec-54.dll之類的。Shared裏面的exe體積很小,他們在運行的時候,到相應的Dll中調用功能。Dev版本是用於開發的,裏面包含了庫文件xxx.lib以及頭文件xxx.h,這個版本不包含exe文件。

image.png
放一個mp4視頻,然後把聲音提取到output.acc,用命令測試一下:ffmpeg -i mov_bbb.mp4 -acodec copy -vn output.aac

二、常用命令

主要參數:

-i 設定輸入流 
-f 設定輸出格式 
-ss 開始時間 

視頻參數:

-b 設定視頻流量(碼率),默認爲200Kbit/s 
-r 設定幀速率,默認爲25 
-s 設定畫面的寬與高 
-aspect 設定畫面的比例 
-vn 不處理視頻 
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器 

音頻參數:

-ar 設定採樣率 
-ac 設定聲音的Channel數 
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器 
-an 不處理音頻

1. 視頻格式轉換

(其實格式轉換說法不太準確,但大家都這麼叫,準確的說,應該是視頻容器轉換)
比如一個avi文件,想轉爲mp4,或者一個mp4想轉爲ts。
ffmpeg -i input.avi output.mp4
ffmpeg -i input.mp4 output.ts
插個號外:某天我在知乎上看到一段視頻,想轉給微信好友看,怎麼操作呢。這裏參考如何全自動下載知乎上的視頻到本地(注意不要濫用),先打開要觀看的視頻頁面,再F12清空,然後開始播放視頻,就能看到類似https://vdn.vzuu.com/SD/49c84c7c-c61a-11e8-8bad-0242ac112a0a.mp4?auth_key=1539832492-0-0-c61c22f39c&expiration=1539832492&disable_local_cache=1這樣的字符串,然後用ffmpeg -i "https://vdn.vzuu.com/SD/49c8..." output.mp4即可下載。弄到電腦上,用電腦QQ發送到手機QQ上,在手機QQ上點擊選擇保存到手機上。然後在微信裏選照片就能看到這個視頻了(注意視頻文件不要超過20M,另外最開始用的不是電腦QQ,而是百度網盤,發現不行……)。

2. 提取音頻

比如我有一個“曉鬆奇談”,可是我不想看到他的臉,我只想聽聲音, 地鐵上可以聽,咋辦?
ffmpeg -i 曉鬆奇談.mp4 -acodec copy -vn output.aac
上面的命令,默認mp4的audio codec是aac,如果不是會出錯,咱可以暴力一點,不管什麼音頻,都轉爲最常見的aac。
ffmpeg -i 曉鬆奇談.mp4 -acodec aac -vn output.aac

(-vn 不處理視頻 )

3. 提取視頻

我目測有些IT員工,特別是做嵌入式的,比如機頂盒,想debug一下,沒有音頻的情況下,播放一個視頻幾天幾夜會不會crash,這時候你需要一個純視頻文件,可以這麼幹。
ffmpeg -i input.mp4 -vcodec copy -an output.mp4

-an 不處理音頻

4. 視頻剪切

經常要測試視頻,但是只需要測幾秒鐘,可是視頻卻有幾個G,咋辦?切啊!
下面的命令,就可以從時間爲00:00:15開始,截取5秒鐘的視頻。
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示開始切割的時間,-t表示要切多少。上面就是從開始,切5秒鐘出來。

摘自使用 MediaSource 搭建流式播放器

注意一個問題,ffmpeg 在切割視頻的時候無法做到時間絕對準確,因爲視頻編碼中關鍵幀(I幀)和跟隨它的B幀、P幀是無法分割開的,否則就需要進行重新幀內編碼,會讓視頻體積增大。所以,如果切割的位置剛好在兩個關鍵幀中間,那麼 ffmpeg 會向前/向後切割,所以最後切割出的 chunk 長度總是會大於等於應有的長度。

5. 碼率控制

碼率控制對於在線視頻比較重要。因爲在線視頻需要考慮其能提供的帶寬。

那麼,什麼是碼率?很簡單: bitrate = file size / duration

比如一個文件20.8M,時長1分鐘,那麼,碼率就是:
biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps
一般音頻的碼率只有固定幾種,比如是128Kbps, 那麼,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。

說完背景了。好了,來說ffmpeg如何控制碼率。 ffmpg控制碼率有3種選擇,-minrate -b:v -maxrate

  • -b:v主要是控制平均碼率。 比如一個視頻源的碼率太高了,有10Mbps,文件太大,想把文件弄小一點,但是又不破壞分辨率。 ffmpeg -i input.mp4 -b:v 2000k output.mp4上面把碼率從原碼率轉成2Mbps碼率,這樣其實也間接讓文件變小了。目測接近一半。

  • 不過,ffmpeg官方wiki比較建議,設置b:v時,同時加上 -bufsize
    -bufsize 用於設置碼率控制緩衝器的大小,設置的好處是,讓整體的碼率更趨近於希望的值,減少波動。(簡單來說,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 當然是第二種比較好) ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4

  • -minrate -maxrate就簡單了,在線視頻有時候,希望碼率波動,不要超過一個閾值,可以設置maxrate。
    ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

6. 視頻編碼格式轉換

比如一個視頻的編碼是MPEG4,想用H264編碼,咋辦?
ffmpeg -i input.mp4 -vcodec h264 output.mp4
相反也一樣
ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

當然了,如果ffmpeg當時編譯時,添加了外部的x265或者X264,那也可以用外部的編碼器來編碼。(不知道什麼是X265,可以Google一下,簡單的說,就是她不包含在ffmpeg的源碼裏,是獨立的一個開源代碼,用於編碼HEVC,ffmpeg編碼時可以調用它。當然了,ffmpeg自己也有編碼器)
ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4

7. 只提取視頻ES數據

這個可能做開發的人會用到,順便提一下吧。
ffmpeg –i input.mp4 –vcodec copy –an –f m4v output.h264

8. 過濾器的使用

這個我在另一篇博客提到了,具體參考ffmpeg filter過濾器 基礎實例及全面解析

8.1 將輸入的1920x1080縮小到960x540輸出:

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4
//ps: 如果540不寫,寫成-1,即scale=960:-1, 那也是可以的,ffmpeg會通知縮放濾鏡在輸出時保持原始的寬高比。

8.2 爲視頻添加logo

比如,我有這麼一個圖片

image.png
想要貼到一個視頻上,那可以用如下命令:
./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
結果如下所示:

image.png

9. 抓取視頻的一些幀,存爲jpeg圖片

比如,一個視頻,我想提取一些幀,存爲圖片,咋辦?
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-r 表示每一秒幾幀
-q:v表示存儲jpeg的圖像質量,一般2是高質量。

如此,ffmpeg會把input.mp4,每隔一秒,存一張圖片下來。假設有60s,那會有60張。60張?什麼?這麼多?不要不要。。。。。不要咋辦?? 可以設置開始的時間,和你想要截取的時間呀。
ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-ss 表示開始時間
-t表示共要多少時間。

如此,ffmpeg會從input.mp4的第20s時間開始,往下10s,即20~30s這10秒鐘之間,每隔1s就抓一幀,總共會抓10幀。

10.輸出YUV420原始數據

對於一下做底層編解碼的人來說,有時候常要提取視頻的YUV原始數據。 怎麼坐?很簡答: ffmpeg -i input.mp4 output.yuv怎麼樣,是不是太簡單啦?!!!哈哈(如果你想問yuv的數據,如何播放,我不會告訴你,RawPlayer挺好用的!!)

那如果我只想要抽取某一幀YUV呢? 簡單,你先用上面的方法,先抽出jpeg圖片,然後把jpeg轉爲YUV。 比如: 你先抽取10幀圖片。 ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
結果:

-rw-rw-r-- 1 chenxf chenxf    296254  7月 20 16:08 pic-001.jpeg
-rw-rw-r-- 1 chenxf chenxf    300975  7月 20 16:08 pic-002.jpeg
-rw-rw-r-- 1 chenxf chenxf    310130  7月 20 16:08 pic-003.jpeg
-rw-rw-r-- 1 chenxf chenxf    268694  7月 20 16:08 pic-004.jpeg
-rw-rw-r-- 1 chenxf chenxf    301056  7月 20 16:08 pic-005.jpeg
-rw-rw-r-- 1 chenxf chenxf    293927  7月 20 16:08 pic-006.jpeg
-rw-rw-r-- 1 chenxf chenxf    340295  7月 20 16:08 pic-007.jpeg
-rw-rw-r-- 1 chenxf chenxf    430787  7月 20 16:08 pic-008.jpeg
-rw-rw-r-- 1 chenxf chenxf    404552  7月 20 16:08 pic-009.jpeg
-rw-rw-r-- 1 chenxf chenxf    412691  7月 20 16:08 pic-010.jpeg

然後,你就隨便挑一張,轉爲YUV: ffmpeg -i pic-001.jpeg -s 1440x1440 -pix_fmt yuv420p xxx3.yuv如果-s參數不寫,則輸出大小與輸入一樣。當然了,YUV還有yuv422p啥的,你在-pix_fmt 換成yuv422p就行啦!

11.H264編碼profile & level控制

舉3個例子吧

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4
ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4
ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4

如果ffmpeg編譯時加了external的libx264,那就這麼寫:
ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4
從壓縮比例來說,baseline< main < high,對於帶寬比較侷限的在線視頻,可能會選擇high,但有些時候,做個小視頻,希望所有的設備基本都能解碼(有些低端設備或早期的設備只能解碼baseline),那就犧牲文件大小吧,用baseline。自己取捨吧!

12.旋轉視頻

在手機上錄的視頻,在電腦放,是顛倒的,需要旋轉90度。使用格式工廠失敗了……
參考ffmpeg視頻的翻轉vflip、hflip,旋轉rotate、transpose
使用ffmpeg -i 3.mp4 -vf rotate=PI/2 rotate8.mp4畫面確實旋轉過來了,但是尺寸不對,變成橫屏後,兩側的畫面看不到了。改用ffmpeg -i 3.mp4 -vf transpose=1 rotate8.mp4解決了問題

三、小丸工具箱

小丸工具箱是一款用於處理音視頻等多媒體文件的軟件。是一款x264、ffmpeg等命令行程序的圖形界面。它的目標是讓視頻壓制變得簡單、輕鬆。

主要功能:

  • 高質量的H264+AAC視頻壓制
  • ASS/SRT字幕內嵌到視頻
  • AAC/WAV/FLAC/ALAC音頻轉換
  • MP4/MKV/FLV的無損抽取和封裝

參考自小丸FAQ:小丸工具箱是一個x264(taro編譯版,現在是7mod)、MP4Box、ffmpeg、MediaInfo等軟件的GUI。工具箱只是一個調用其他程序的程序,自己沒有壓制功能!只是把平常需要命令行完成的工作圖形化了!其實一切轉換軟件都是這個意思。

四、fluent-ffmpeg

參考自
[FFmpeg探祕]Ep.(1) 什麼是FFmpeg?
[FFmpeg探祕]Ep.(2) 從node-fluent-ffmpeg開始
NODEJS基於FFMPEG視頻推流測試

該nodejs包封裝了ffmpeg的命令行調用部分,加強了代碼的可讀性,若熟悉ffmpeg 命令行使用手冊,亦可不使用該包。

    npm install --save fluent-ffmpeg
    //使用js編碼的用戶,可以忽略下條命令
    npm install --save @types/fluent-ffmpeg 

image.png

五、使用ffmpeg推RTMP直播流

1.安裝nignx環境
弄個WINDOWS版本的Nginx吧,參照Linux&Windows搭建基於nginx的視頻點播服務器,使用了nginx-rtmp-win32做了本地點播測試。具體步驟參照原文,爲了節約時間,最好去CSDN下載作者那個DEMO

2.參考手把手教你搭建Nginx-rtmp流媒體服務器+使用ffmpeg推流
在上述下載的demo中,看一下conf/nginx.conf配置文件:

rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
        
        application vod {
            play video;
        }
        
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}

其中rtmp就是rtmp服務器模塊,端口是1935,application我理解爲一個路徑。可以通過訪問rtmp://localhost/live來訪問live這個資源。live on 表示這是實時的傳輸,這不同於點播,點播就好比我在某視頻網站上想看一個視頻,無論我什麼時候去點擊,它會從頭開始播放。而實時傳輸(直播),就是好比看電視,我在19:20去打開電視(打開直播路),視頻不會從頭開始播放,而是從當前(19:20)的視頻數據開始播放。

然後在nginx.exe路徑下命令行運行nginx -s reload重新加載配置。

3.使用ffmpeg推流
參考使用FFmpeg在B站直播的姿勢
ffmpeg -re -i 1.mp4 -vcodec copy -f flv rtmp://localhost/live
或者

ffmpeg -re -i 1.mp4 -vcodec copy -acodec copy
 -b:v 800k -b:a 32k -f flv rtmp://localhost/live

-re : 表示使用文件的原始幀率進行讀取,因爲ffmpeg讀取視頻幀的速度很快,如果不使用這個參數,ffmpeg可以在很短時間就把video.mp4中的視頻幀全部讀取完並進行推流,這樣就無法體現出視頻播放的效果了。官方文檔中對這個參數的解釋是:

-re (input)
Read input at native frame rate. Mainly used to simulate a grab device, or live input stream (e.g. when reading from a file). Should not be used with actual grab devices or live input streams (where it can cause packet loss). By default ffmpeg attempts to read the input(s) as fast as possible. This option will slow down the reading of the input(s) to the native frame rate of the input(s). It is useful for real-time output (e.g. live streaming).

-vcodec copy : -vcodec表示使用的視頻編解碼器 ,前綴v表示video。後面緊跟的copy 表示複製使用源文件的視頻編解碼器,比如原文件的編解碼器(codec)是h264,則這裏就使用h264。

-acodec copy : -acodec表示使用的音頻編解碼器,前綴a表示audio。後面的copy 表示使用源文件的音頻編解碼器。

-b:v 800k : -b:v表示視頻的比特率(bitrate) ,爲800k。

-b:a 32k : 表示音頻的比特率爲32k。

-f flv : -f表示format ,就是強制輸出格式爲flv,這一步其實也叫封裝(mux),封裝要做的事就是把視頻和音頻混合在一起,進行同步。緊跟在後面的rtmp://localhost/live 表示輸出的"文件名",這個文件名可以是一個本地的文件,也可以指定爲rtmp流媒體地址。指定爲rtmp流媒體地址後,則ffmpeg就可以進行推流。

4.可以使用VLC或ffplay進行播放了

 

如此強大的FFmpeg,能夠實現視頻採集、視頻格式轉化、視頻截圖、視頻添加水印、視頻切片、視頻錄製、視頻推流、更改音視頻參數功能等。通過終端命令如何實現這些功能,Richy在本文做一記錄,以備之後查閱。

注意:下面一一列舉的命令,未歸類整理,命令參數供參考。
如果參數有誤,大家可對照文章-FFmpeg參數命令 ,進行修改。


六. 命令集合

第一組

1.分離視頻音頻流
ffmpeg -i input_file -vcodec copy -an output_file_video  //分離視頻流ffmpeg -i input_file -acodec copy -vn output_file_audio  //分離音頻流

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 分辨率控制

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、利用ffmpeg視頻切片
主要把視頻源切成若干個.ts格式的視頻片段然後生成一個.m3u8的切片文件索引提供給html5的video做hls直播源
命令如下:
ffmpeg -i 視頻源地址 -strict -2 -c:v libx264 -c:a aac -f hls m3u8文件輸出地址

8、ffmpeg縮放視頻
假設原始視頻尺寸是 1080p(即 1920×1080 px,16:9),使用下面命令可以縮小到 480p:
命令如下:
ffmpeg -i 視頻源地址 -vf scale=853:480 -acodec aac -vcodec h264 視頻輸出地址(如:out.mp4)

各個參數的含義:-i a.mov 指定待處理視頻的文件名-vf scale=853:480 vf 參數用於指定視頻濾鏡,其中 scale 表示縮放,後面的數字表示縮放至 853×480 px,其中的 853px 是計算而得,因爲原始視頻的寬高比爲 16:9,所以爲了讓目標視頻的高度爲 480px,則寬度 = 480 x 9 / 16 = 853-acodec aac 指定音頻使用 aac 編碼。注:因爲 ffmpeg 的內置 aac 編碼目前(寫這篇文章時)還是試驗階段,故會提示添加參數 “-strict -2” 才能繼續,儘管添加即可。又或者使用外部的 libfaac(需要重新編譯 ffmpeg)。-vcodec h264 指定視頻使用 h264 編碼。注:目前手機一般視頻拍攝的格式(封裝格式、文件格式)爲 mov 或者 mp4,這兩者的音頻編碼都是 aac,視頻都是 h264。out.mp4 指定輸出文件名上面的參數 scale=853:480 當中的寬度和高度實際應用場景中通常只需指定一個,比如指定高度爲 480 或者 720,至於寬度則可以傳入 “-1” 表示由原始視頻的寬高比自動計算而得。即參數可以寫爲:scale=-1:480,當然也可以 scale=480:-1

9、ffmpeg裁剪
有時可能只需要視頻的正中一塊,而兩頭的內容不需要,這時可以對視頻進行裁剪(crop),比如有一個豎向的視頻 1080 x 1920,如果指向保留中間 1080×1080 部分命令如下:ffmpeg -i 視頻源地址 -strict -2 -vf crop=1080:1080:0:420 視頻輸出地址(如:out.mp4)
其中的 crop=1080:1080:0:420 才裁剪參數,具體含義是 crop=width:height:x:y,其中 width 和 height 表示裁剪後的尺寸,x:y 表示裁剪區域的左上角座標。比如當前這個示例,我們只需要保留豎向視頻的中間部分,所以 x 不用偏移,故傳入0,而 y 則需要向下偏移:(1920 – 1080) / 2 = 420

10. 轉視頻格式
ffmpeng -i source.mp4 -c:v libx264 -crf 24 destination.flv

其中 -crf 很重要,是控制轉碼後視頻的質量,質量越高,文件也就越大。
此值的範圍是 0 到 51:0 表示高清無損;23 是默認值(如果沒有指定此參數);51 雖然文件最小,但效果是最差的。

值越小,質量越高,但文件也越大,建議的值範圍是 18 到 28。而值 18 是視覺上看起來無損或接近無損的,當然不代表是數據(技術上)的轉碼無損。

第二組

1.ffmpeg 把文件當做直播推送至服務器 (RTMP + FLV)
ffmpeg - re -i demo.mp4 -c copy - f flv rtmp://w.gslb.letv/live/streamid

2.將直播的媒體保存到本地
ffmpeg -i rtmp://r.glsb.letv/live/streamid -c copy streamfile.flv

3.將一個直播流,視頻改用h264壓縮,音頻改用faac壓縮,送至另一個直播服務器
ffmpeg -i rtmp://r.glsb.letv/live/streamidA -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://w.glsb.letv/live/streamb

4.提取視頻中的音頻,並保存爲mp3 然後輸出
ffmpeg -i input.avi -b:a 128k output.mp3

5. 將mp3轉爲pcm

 

ffmpeg -i input.mp3 -f s16be -acodec pcm_s16be output.pcm

第三組

1.獲取視頻的信息
ffmpeg -i video.avi

2.將圖片序列合成視頻
ffmpeg -f image2 -i image%d.jpg video.mpg
上面的命令會把當前目錄下的圖片(名字如:image1.jpg. image2.jpg. 等...)合併成video.mpg

3.將視頻分解成圖片序列
ffmpeg -i video.mpg image%d.jpg
上面的命令會生成image1.jpg. image2.jpg. ...
支持的圖片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

4.爲視頻重新編碼以適合在iPod/iPhone上播放
ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

5.爲視頻重新編碼以適合在PSP上播放
ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

6.從視頻抽出聲音.並存爲Mp3
ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

7.將wav文件轉成Mp3
ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

8.將.avi視頻轉成.mpg
ffmpeg -i video_origine.avi video_finale.mpg

9.將.mpg轉成.avi
ffmpeg -i video_origine.mpg video_finale.avi

10.將.avi轉成gif動畫(未壓縮)
ffmpeg -i video_origine.avi gif_anime.gif

11.合成視頻和音頻
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12.將.avi轉成.flv
ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

13.將.avi轉成dv
ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv
或者:
ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14.將.avi壓縮成divx
ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

15.將Ogg Theora壓縮成Mpeg dvd
ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg

16.將.avi壓縮成SVCD mpeg2
NTSC格式:
ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg
PAL格式:
ffmpeg -i video_origine.avi -target pal-dvcd video_finale.mpg

17.將.avi壓縮成VCD mpeg2
NTSC格式:
ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg
PAL格式:
ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

18.多通道編碼
ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

19.從flv提取mp3
ffmpeg -i source.flv -ab 128k dest.mp3

第四組

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〃

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