偶遇FFmpeg(一) —— 初了解

FFmpeg_logo.png

整體的目標

  • [ ] 完成將多張圖片轉換成視頻。并添加背景音樂的任務。
  • [ ] 完成將音頻混音到視頻中的任務。
  • [ ] 完成將找到的視頻合并的任務。

目前計劃確定

  • [ x ] 1. 尋找Android端可以解決的方案
  • [ x ] 2. 了解方案和實現
  • [ x ] 3. 完成任務

具體內容

FFmpeg的了解

FFmpeg的介紹網上還是很多的。官網的wiki上面也有很多內容。圍繞目標,主要是有兩套實現的思路。早期,其實是想通過自己編寫C代碼,來完成整個流程的。但是無奈目前的水平有限,而且時間不夠充裕。故最后的思路是通過學習現有的命令行參數,來快速完成FFmpeg的使用。但是這樣的弊端也極大的,在此暫時不訴。

FFmpeg主要包含了以下幾個核心的庫:
  1. libavformat
    用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音 視頻幀等功能;音視頻的格式解析協議,為 libavcodec 分析碼流提供獨立的音頻或視頻碼流源。
  2. libavcodec
    用于各種類型聲音/圖像編解碼;該庫是音視頻編解碼核心,實現了市面上可見的絕大部分解碼器 的功能,libavcodec 庫被其他各大解碼器 ffdshow,Mplayer 等所包含或應用。
  3. libavdevice
    硬件采集、加速、顯示。操作計算機中常用的音視頻捕獲或輸出設備: ALSA,AUDIO_BEOS,JACK,OSS,1394,VFW。
  4. libavfilter
    filter(FileIO、FPS、DrawText)音視頻濾波器的開發,如寬高比 裁剪 格式化 非格式化 伸縮。
  5. libavutil
    包含一些公共的工具函數的使用庫,包括算數運算 字符操作;
  6. libavresample
    音視頻封轉編解碼格式預設等。
  7. libswscale
    (原始視頻格式轉換)用于視頻場景比例縮放、色彩映射轉換;圖像顏色空間或格式轉換,如 rgb565
    rgb888 等與 yuv420 等之間轉換。
  8. libswresample
    原始音頻格式轉碼
  9. libpostproc:
    (同步、時間計算的簡單算法)用于后期效果處理;音視頻應用的后處理,如圖像的去塊效應。 ffmpeg:該項目提供的一個工具,可用于格式轉換、解碼或電視卡即時編碼等;
  • ffsever
    一個 HTTP 多媒體即時廣播串流服務器;
  • ffplay
    是一個簡單的播放器,使用 ffmpeg 庫解析和解碼,通過 SDL 顯示;

從官網上下載好ffmpeg,進入FFmpeg命令行工具所在的文件夾,就開始干活。
因為直接使用cmd 是沒有歷史記錄的,所以書內推薦使用其他的客戶端來操作,但是為了便捷,則是還是使用最簡單的工具。

FFmpeg Basic的學習

  1. 參考FFmpeg Basic FFmpeg封裝好的命令行整體是是這樣的
Command line syntax
     ffmepg [global options] [input file options] -i input_file [output file options] output_file
 [ ]中的內容是可選的參數,其他則是必填的參數。
一圖比千言—CommanLine.png
  1. 使用ffmpeg進行轉碼
    ffmpeg可以輸入各種文件或者流,進行操作。整體的工作流程是解碼器將未壓縮的幀數據在經過filter之后,再進行編碼和輸出。其中很重要的一點就是它能夠構造一個 filterchains 和 filtergraphs (濾鏡鏈和濾鏡圖)。
轉碼流程.png

看了這個圖,可能會問 什么是 packets ,什么是frames ,在這里暫且不表

  1. Filters,filter chains 和filtergraphs
    在多媒體的進程中,filter意味著在輸入文件進行編碼之前將其修改的一個軟件工具。他被分成音頻的濾鏡和視頻的濾鏡。FFmpeg已經內置好了多種濾鏡而且能夠通過多種方式結合他們使用。這樣簡化了媒體的進程,因為在編解碼的過程中。會整體的質量。 libavfilter就是整個軟件庫。使用-vf 來操作視頻濾鏡 使用 -af來使用音頻的濾鏡。
Filter syntax
      [input_link_label1]...
            filter_name=parameters
                [output_link_label1]...
  #####Filterchain
      "filter1,filter2,...."
  #####Filtergraph
      "filterchain1;filterchain2;..."
  #####使用filtergraph能夠有效的簡化命令行。將兩行變成一行
      #使用前
      ffmpeg -i input.mpg -vf hqdn3d,pad=2*iw outpt.mp4
      ffmpeg -i output.mp4 -i input.mpg -filter_complex overlay=w compare.mp4
      #使用后
      ffplay -i i.mpg -vf split[a][b];[a]pad=2*iw[A];[b]hqdn3d[B];[A][B]overlay=w
      # 將輸入的i.mpg 分成[a]和[b] ;將[a]左右一個filterchains的輸入,輸出為[A];將[b]作為輸入,輸出為[B],最后再將[A][B] 通過overLay filter產生一個對比。
加上Filter之后的總體流程
  1. 媒體流的選擇。
    • 許多封裝格式存在多個流媒體。ffmpeg能夠識別5種流。 audio(a),attachment(t),data(d),subtitle(s) and video(v)。可以通過-map后面添加這些參數來完成選擇。

      syntax
        file_number:stream_type [:stream_number]
        #其中file_number、stream_number都是從0開始。
        #-map 0 表示選擇所有
        #-map i:v表示從角標為i的文件中選擇所有的視頻流。 -map: i:a 則是所有的音頻流
        # -an,-vn,-sn 簡單的理解就是 剔除音頻。視頻。和字母(... no ..)
        
        #將A中的視頻和B中的音頻和C中的字幕合并到clip.mov中
        ffmpeg -i A.mov -i B.mov -i C.mov -map 0:v:0 -map 1:a:0 -map 2:s:0 clip.mov
      
      - 除此之外,還有其他的可以定義流的信息
            #-b 可以設置音頻和視頻的bit rate
            ffmpeg -i input.mpg -b:a 128k -b:v 1500k outpu.mp4


![map steam 示意圖.png](http://upload-images.jianshu.io/upload_images/1877190-954ea618c5f03ccc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


   4. **有用的命令。**
      將輸出輸出到文件當中。
          ffmpeg -help > help.txt
          ffmpeg -filters >> data.txt   #續寫
   5. **概念的介紹**
   比特率、幀率和文件大小之間的關系
   #####幀率。
每秒被編碼到視頻文件中的幀數。人眼至少需要15fps,才能舉得是一個連續的滑動。它也進程被較為一個幀的頻繁度 。它的單位是Hz.LCD顯示器通常是60Hz的。
```shell
    # 直接使用- r 能夠制定幀率
         ffmepg -i input -r fps output
     #使用fpsfilter來指定幀率
         ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm
比特率

確定的是音頻和視頻總體的質量。它定義的是 每個時間單元攜帶的數據量。

Type Abbreviation
Average bit rate ABR 每秒平均的比特率。在VBR編碼模式下也需要。通常用于確定的輸出大小
Constant bit rate CBR 每秒處理的比特率是相同的。這并不實際。因為在運動的處理過程中,需要更多的比特率。CBR通常用于在混合多媒體流的時候使用。
Variable bit rate VBR 可變的比特率。簡言之就是需要多的時候多,反之亦然。但是同樣需要更多的cpu來處理這些判斷

之前說過,通過-b就可以設定比特率。-b:v 就 可以設定視頻

# 在視頻通話中,因為傳輸的數據不能被緩存。所有需要設定
#一個固定的比特率來輸出。通常需要設定三個參數。 -b -minrate -maxrate .設置maxrate的同時,還得設置一個 -bufsize來緩存。           
ffmpeg -i in.avi -b 0.5M -minirate 0.5M -maxrate 0.5M -bufsize 1M out.mkv

#為了控制文件的大小,可以使用 -fs
 ffmpeg -i -input.avi -fs 10MB output.mp4
文件大小的計算公式
  • 視頻大小
    video_size =vieo_birate * time_inseconds/8
  • 音頻大小
    (未壓縮)audio_size=sampling_ratebit_depthchannelstime_in_seconds/8
    (壓縮)audio_size = bitrate
    time_in_seconds/8
    最后計算的文件,應該比兩個相加還略大一點。因為還有以下meta data 和overhead。

未完待續。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容