先從在mac系統中安裝ffmpeg開始說起。我們通過第三方工具homebrew開始安裝ffmpeg比較方便。
一、前提:安裝homebrew
-homebrew 是Mac平台的一個包管理工具,提供了許多Mac下沒有的Linux工具等,而且安裝過程很簡單。
二、安裝過程
查看當前電腦是否安裝有homebrew
brew
若沒有安裝,在終耑輸入下面的命令安裝homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
國内gitee安裝homebrew
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
清理homebrew:
brew cleanup
二、通過homebrew安裝FFmpeg
這裡要多說一句, 爲什麽推薦用homebrew去安裝, 而不是自己手動搞? 筆者手下有個運維曾經在某部落格上搜索安裝h265的編碼器文档, 折騰了一天,結果編譯出來的視頻文档, 全部花瓶。說實話還是homebrew香一些。
使用homebrew安裝ffmpeg插件的命令如下:
brew install ffmpeg
查看安裝ffmpeg的信息
brew info ffmpeg
如果看到有綠色對號✅的代表支持這種庫,紅色叉子代表不支持。
查看安裝ffmpeg的信息
更新ffmpeg
brew update
或者
brew upgrade ffmpeg
安裝某一個特定的庫如下格式:
brew install [FORMULA...]
例如:安裝openssl 庫輸入以下命令:
brew install openssl
安裝某一個特定的庫
卸載某個特定的庫如下格式:
brew uninstall [FORMULA...]
例如:卸載openssl庫輸入以下命令:
brew uninstall openssl
三、多媒體音頻視頻格式轉換姿勢
說到這裡重點來了,我不是舞扇豬頭高曉松,沒那麽多胡說廢話,直接看本章代碼命令樣例就明白。
視頻格式/容器轉換
比如你想把一個avi文档,想轉爲mp4。輸入:
ffmpeg -i 原片.avi 目標文档名.mp4
或者想把mp4轉成ts格式的
ffmpeg -i 原片.mp4 目標文档名.ts
改變視頻的分辨率
改變視頻的碼率很簡單了。一個-s參數搞定, 例如
ffmpeg -i 原片.mp4 -s 1920x1080 目標文档名.mp4
如果發現有個-s參數後面竟然是vga, 例如, 那麽用的其實是別名, 舉例說明:
ffmpeg -i 原片.mp4 -s vga 目標文档名.mp4
其實就等價於
ffmpeg -i 原片.mp4 -s 640x480 目標文档名.mp4
改變視頻的碼率
改變碼率後, 視頻的播放質量和大小會有顯著變化。其參數爲-b:v 其中:v的意思就是特指改變視頻的碼率, 而不是音頻的碼率。
比如網上常用的2.1M的碼率和1.5M的碼率, 我們想把一個視頻碼率限定爲1.5M怎麽辦?
ffmpeg -i 原片.mp4 -b:v 1.5M 目標文档名.mp4
ffmpeg改變fps幀率
所謂的fps就是frame per second多少多少幀畫面每秒。如果大家接觸過電影基本原理就知道,其實視頻畫面就是由多張快速變換的靜態圖片曡上去的,幀率越低,畫面流暢性越低,但是文档會被壓縮的很小。
這裡需要用到參數-r後面緊跟著一個值, 例如我想把某視頻改成25幀
ffmpeg -i 原片.mp4 -r 25 目標文档名.mp4
提取音頻軌道信息
比如我有一個“曉松奇談”,可是我不想看到他的臉,我只想聽聲音, 捷運上可以聽,咋辦?
ffmpeg -i 說說國内的假洋鬼子.mp4 -acodec copy -vn output.aac
上面的命令,默認mp4的audio codec是aac,如果不確定,咱可以暴力一點,不管什麽音頻,都轉爲最常見的aac。
ffmpeg -i 奇譚怪論均爲博人眼球.mp4 -acodec aac -vn output.aac
單獨提取視頻
把某個視頻文档中的視頻提取出來,不要聲音
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
ffmpeg的視頻剪切能力
經常要測試視頻,但是只需要測幾秒鍾,可是視頻卻有幾個G?這個時候有人會說final cut pro先導進去如何如何,其實你用命令行指定了時間長度就可以切的。
下面的命令,就可以從時間爲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秒鍾出來。
使用ffmpeg 將多個MP4 文档合並成一個大的MP4文档?
不妨試一下ffmpeg + ts
這個的思路是先將 mp4 轉化爲同樣編碼形式的 ts 流,因爲 ts流是可以 concate 的,先把 mp4 封裝成 ts ,然後 concate ts 流, 最後再把 ts 流轉化爲 mp4。
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4