[TOC]
- 基本知識(shí)
- FFmpeg 資源網(wǎng)站
- 音視頻流
- 容器
- 聲道
- 命令種類
- 處理流程
- 下載
- 目錄結(jié)構(gòu)
- 模塊列表
- 顯示所有可用的解碼器
- 顯示所有可用的編碼器
- 顯示所有可用濾鏡
- 編譯
- 執(zhí)行命令
- 基本查詢命令
- 命令基本格式
- 常用參數(shù)
- 視頻參數(shù)
- 音頻參數(shù)
- 錄制
- 查看 Mac 上的舍比誒
- 視頻播放
- 錄屏
- 錄屏加上聲音
- 錄視頻
- 錄制視頻加上音頻
- 錄音
- 錄制音頻裸數(shù)據(jù)
- 分解復(fù)用
- 抽取音頻流
- 抽取視頻流
- 格式轉(zhuǎn)換
- 音視頻合成
- 處理原始數(shù)據(jù)
- 提取 YUV 數(shù)據(jù)
- YUV 轉(zhuǎn) H264
- 提取 PCM 數(shù)據(jù)
- PCM 轉(zhuǎn) WAV
- 濾鏡
- 簡單濾鏡
- 復(fù)雜濾鏡
- 舉例
- 添加水印
- 刪除水印
- 視頻縮小1倍
- 視頻裁剪
- 倍速播放
- 對(duì)稱視頻
- 畫中畫
- 錄制畫中畫
- 多路視頻拼接
- 音視頻的拼接和裁剪
- 裁剪
- 合并
- hls 切片
- 視頻圖片互轉(zhuǎn)
- 視頻轉(zhuǎn)JPEG
- 視頻轉(zhuǎn) GIF
- 圖片轉(zhuǎn)視頻
- 直播相關(guān)
- 推流
- 拉流保存
- 轉(zhuǎn)流
- 實(shí)時(shí)推流
- ffplay
- 播放 YUV 數(shù)據(jù)
- 播放 YUV 中的 Y 平面
基本知識(shí)
FFmpeg 資源網(wǎng)站
http://ffmpeg.org/
https://github.com/FFmpeg
音視頻流
在音視頻領(lǐng)域沈条,一路音頻或視頻稱為一路流渣刷。比如看電影可以選擇聲道,每個(gè)聲道就是一個(gè)音頻流讹挎。
容器
文件格式如 MP4谤专、MOV 等稱之為容器躁锡。容器可以存放多路音視頻文件,有的智能存放一路視頻流置侍,比如MP4 可以存放一路視頻流映之,多路音頻流,多路字母流墅垮。
聲道
音頻中的 channel惕医,一路音頻流可以有單聲道雙聲道和立體聲耕漱。
命令種類
- 基本信息查詢
- 錄制
- 分解算色,復(fù)用
- 處理原始數(shù)據(jù)
- 濾鏡
- 切割合并
- 圖片視頻互相轉(zhuǎn)換
- 直播相關(guān)
處理流程
除了基本信息查詢外,流程處理基本流程都是如下
graph TD
A(input file) -->|demuxer 分解| B[encoded data packets 解碼器]
B --> |decoder|C[decoded frames 未壓縮的幀即原始視頻或PCM音頻等]
C --> |encoder|D[encoded data packets 編碼器]
D --> |muxer 復(fù)用器|E(output file)
muxer是指合并文件螟够,即將視頻文件灾梦、音頻文件和字幕文件合并為某一個(gè)視頻格式峡钓。比如把rmvb格式的視頻,mp3格式的音頻文件以及srt格式的字幕文件若河,合并成為一個(gè)新的mp4或者mkv格式的文件能岩。
demuxer是muxer的逆過程,就是把合成的文件中提取出不同的格式文件萧福。
在獲得解碼的未壓縮的幀后拉鹃,對(duì)幀進(jìn)行各種濾鏡處理。
下載
下載參考網(wǎng)址: http://ffmpeg.org/download.html
可以直接 clone 源碼
git clone https://git.ffmpeg.org/ffmpeg.git
目錄結(jié)構(gòu)
libavutil: 常用工具鲫忍, hash 器膏燕,解碼器,及其他工具
libavformat: 多媒體格式的解析封裝
libavcodec: 所有音頻編解碼悟民,不做具體操作坝辫,只是將編解碼的模塊功能插入進(jìn)來, 提供一系列編解碼的實(shí)現(xiàn)
libavdevice: 處理音視頻設(shè)備, 進(jìn)行音視頻采集
libavfilter: 所有音視頻的后期處理射亏,比如加濾鏡近忙,提供了各種過濾器
libavresample: 對(duì)音頻重采樣
libswresample: 對(duì)音頻的相關(guān)操作,混音重采樣
libswscale: 對(duì)視頻的相關(guān)操作智润,色彩轉(zhuǎn)換和縮放功能
模塊列表
使用下面的命令查看都有哪些模塊:
./configure --help
Help options:
--help print this message
--quiet Suppress showing informative output
--list-decoders show all available decoders 顯示所有可用的解碼器
--list-encoders show all available encoders 顯示所有可用的編碼器
--list-hwaccels show all available hardware accelerators
--list-demuxers show all available demuxers
--list-muxers show all available muxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
顯示所有可用的解碼器
解碼器把數(shù)據(jù)編碼文件轉(zhuǎn)為模擬視音頻
顯示所有可用的編碼器
編碼器主要把模擬視音頻信號(hào)壓縮數(shù)據(jù)編碼文件
顯示所有可用濾鏡
這里有很多音視頻特效處理的功能及舍,比如視頻縮放、截取做鹰、翻轉(zhuǎn)击纬、疊加、跑馬燈钾麸、視頻轉(zhuǎn)GIF等功能
編譯
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-videotoolbox --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=clang --host-cflags= --host-ldflags=
--enable-gpl: 打開 gpl(通用公共許可證)
--enable-filter=delogo: 打開濾鏡中的刪除水印
--enable-debug: 調(diào)試模式(只在測(cè)試環(huán)境)
--disable-optimizations:關(guān)閉優(yōu)化(只在測(cè)試環(huán)境)
--enable-libspeex:應(yīng)用speex語音壓縮更振,speex 是針對(duì)語音的開源免費(fèi),無專利保護(hù)的音頻壓縮格式
--enable-videotoolbox:Mac 平臺(tái)下的低級(jí)的框架饭尝,可直接訪問硬件的編解碼器
--enable-shared:生成共享庫
--enable-pthreads:使用 Pthread 線程,在類Unix操作系統(tǒng)(Unix肯腕、Linux、Mac OS X等)中钥平,都使用Pthreads作為操作系統(tǒng)的線程实撒。Windows操作系統(tǒng)也有其移植版pthreads-win32
如果提示某個(gè)庫不存在,就需要進(jìn)行安裝涉瘾,比如 Mac 下安裝 libfdk-aac, libx264知态, libx265:
brew install fdk-aac
brew install x264
brew install x265
brew install nasm
brew install yasm
brew install sdl2
安裝完這些缺失的庫之后,就可以正常編譯,執(zhí)行如下命令:
make && make install
安裝完成后的路徑及結(jié)構(gòu):
include 文件夾下是頭文件
lib 里是動(dòng)態(tài)庫
share 里是文檔相關(guān)及例子
如果編譯后沒有 ffplay
可能有以下幾個(gè)原因?qū)е拢?/p>
- 所使用的操作系統(tǒng)沒有安裝圖形庫
- 沒有安裝 SDL2 庫立叛。解決辦法是通過
brew install sdl2
即可 或 通過 SDL2 源碼安裝负敏。安裝完成后,要重新進(jìn)行到 ffmpeg目錄下秘蛇,執(zhí)行 ./configure…命令 - 修改config.h文件其做,打開 config.h文件找 FFPLAY 關(guān)鍵字顶考,將其后面的 0 修改為 1,保存并退出該文件妖泄。在當(dāng)前目錄下執(zhí)行 make && sudo make install驹沿, 修改 config.h文件后,不要再執(zhí)行./configure …了蹈胡,否則config.h中的值又都恢復(fù)為原來的值了
ffprobe 是多媒體偵測(cè)器
ffplay 是多媒體播放器
執(zhí)行命令
執(zhí)行命令一般用以下路徑的 ffmpeg
/usr/local/ffmpeg/bin/ffmpeg
將這個(gè)路徑加入到環(huán)境變量中
vim ~/.bash_profile
添加下面路徑
export PATH=$PATH:/usr/local/ffmpeg/bin
生效修改的環(huán)境變量
source ~/.bash_profile
基本查詢命令
舉例:ffmpeg -version
參數(shù) | 說明 |
---|---|
-version | 版本 |
-formats | 顯示可用格式及設(shè)備 |
-demuxers | 顯示可用 demuxers |
-muxers | 顯示可用的 muxers |
-devices | 顯示可用設(shè)備 |
-codecs | 顯示 libavcodec 已知的所有編碼器 |
-decoders | 顯示可用的解碼器 |
-encoders | 顯示所有可用的編碼器 |
-bsfs | 顯示可用的比特流 filter |
-protocols | 顯示可用的協(xié)議 |
-filters | 顯示可用的 libavfilter 過濾器 |
-pix_fmts | 顯示可用的像素格式 |
-sample_fmts | 顯示可用的采樣格式 |
-layouts | 顯示 channel 名稱和標(biāo)準(zhǔn) channel 布局 |
-colors | 顯示識(shí)別的顏色名稱 |
命令基本格式
ffmpeg [全局參數(shù)] {[輸入?yún)?shù)] -i input_url} ...
-i 用來讀取任意數(shù)量的輸入文件渊季、管道、網(wǎng)絡(luò)流罚渐,如果是多文件索引從 0 開始
ffmpeg [全局參數(shù)] {[輸出參數(shù)] output_url} ...
常用參數(shù)
參數(shù) | 參數(shù)類型 | 說明 |
---|---|---|
-f fmt | 輸入梭域,輸出參數(shù) | 強(qiáng)制輸入或輸出文件格式,通常是根據(jù)擴(kuò)展名字自動(dòng)識(shí)別格式搅轿,本參數(shù)可不需要 |
-i url | 輸入病涨,輸出參數(shù) | 輸入文件地址 |
-y | 全局參數(shù) | 強(qiáng)制自動(dòng)覆蓋輸出文件 |
-n | 全局參數(shù) | 不覆蓋輸出文件,如果輸出文件存在璧坟,則退出 |
-c[:stream_specifier] 編/解碼器 | 輸入既穆,輸出參數(shù),每個(gè)流 | 在輸入文件之前選擇一個(gè)解碼器或在輸出文件之前選擇一個(gè)編碼器雀鹃,用于一個(gè)或者多個(gè)流幻工。也可以在輸出文件的時(shí)候僅輸出不會(huì)被重新編碼即跟參數(shù) copy |
-codec | 輸入,輸出參數(shù)黎茎,每個(gè)流 | 同 -c |
-t duration | 輸入囊颅,輸出參數(shù) | -i之前用來限制從輸入文件讀取數(shù)據(jù)的持續(xù)時(shí)間,在輸出 url 之前用來控制輸出持續(xù)時(shí)間 |
-ss位置 | 輸入傅瞻,輸出參數(shù) | -i之前用于尋找輸入文件的位置踢代,但是大多數(shù)格式都不能精確搜索,因此搜索一般是在位置之前最近的搜索點(diǎn)嗅骄。當(dāng)轉(zhuǎn)碼和-accurate_seek 被啟用時(shí)胳挎,搜索點(diǎn)和位置之間的分段會(huì)被解碼和丟棄。當(dāng)進(jìn)行流式復(fù)用或使用 -noaccurae_seek 時(shí)溺森,這個(gè)分段被保留慕爬。當(dāng)在輸出url之前使用的時(shí)候,會(huì)解碼并丟棄開始到位置的分段 |
-frames[:stream_specifier] framecount | 輸出參數(shù)屏积,每個(gè)流 | 在這個(gè)幀之后寫入流 |
-filter[:stream_specifie filtergraph | 輸出參數(shù)医窿,每個(gè)流 | 創(chuàng)建過濾器圖filtergraph,并過濾流炊林,filtergraph 必須具有相同類型的流的單個(gè)輸入和單個(gè)輸出 |
視頻參數(shù)
參數(shù) | 參數(shù)類型 | 說明 | |
---|---|---|---|
-vframes num | 輸出參數(shù) | 設(shè)置輸出的視頻幀的數(shù)量 | |
-r[:stream_specifier] fps | 輸入輸出參數(shù)姥卢,每個(gè)流 | 設(shè)置幀率。作為輸入?yún)?shù)忽略文件中已存儲(chǔ)時(shí)間戳铛铁,根據(jù)速率生成新的時(shí)間戳隔显,作為輸出參數(shù)復(fù)制或者丟棄輸入幀以實(shí)現(xiàn)恒定輸出幀頻fps | |
-s[:stream_specifier] 大小 | 輸入輸出參數(shù),每個(gè)流 | 設(shè)置窗口大小饵逐,作為輸入?yún)?shù)括眠,指 video_size, 作為輸出參數(shù)會(huì)將縮放視頻過濾器插入到相應(yīng)過濾器圖形的末尾 | |
-aspect[:stream_specifier] 寬高比 | 輸出參數(shù),每個(gè)流 | 視頻顯示寬高比倍权,aspect可以是浮點(diǎn)數(shù)字符串掷豺,也可以是寬高比形式的字符串,例如“4:3”薄声,“16:9”当船,“1.3333”和“1.7777”是有效的參數(shù)值。如果與-vcodec副本一起使用默辨,則會(huì)影響存儲(chǔ)在容器級(jí)別的寬高比德频,但不會(huì)影響存儲(chǔ)在編碼幀中的寬高比(如果存在)。 | |
-vn | 輸出參數(shù) | 輸出參數(shù) | 禁用視頻錄制 |
-vcodec編解碼器 | 輸出參數(shù) | 設(shè)置視頻編解碼器缩幸。這是-codec:v的別名壹置。 | |
-vf filtergraph | 輸出參數(shù) | 創(chuàng)建由filtergraph指定的過濾器圖,并使用它來過濾流 |
音頻參數(shù)
參數(shù) | 參數(shù)類型 | 說明 |
---|---|---|
-aframes | 輸出參數(shù) | 設(shè)置要輸出的音頻幀的數(shù)量表谊。這是-frames:a的一個(gè)過時(shí)的別名钞护。 |
-ar[:stream_specifier] freq | 輸入輸出,每個(gè)流 | 設(shè)置音頻采樣頻率爆办。對(duì)于輸出流难咕,它默認(rèn)設(shè)置為相應(yīng)輸入流的頻率。對(duì)于輸入流距辆,此選項(xiàng)僅適用于音頻捕獲設(shè)備和原始分路器余佃,并映射到相應(yīng)的分路器選件 |
-ac[:stream_specifier] 通道 | 輸入輸出參數(shù),每個(gè)流 | 設(shè)置音頻通道的數(shù)量跨算。對(duì)于輸出流咙冗,它默認(rèn)設(shè)置為輸入音頻通道的數(shù)量。對(duì)于輸入流漂彤,此選項(xiàng)僅適用于音頻捕獲設(shè)備和原始分路器雾消,并映射到相應(yīng)的分路器選件。 |
-an | 輸出參數(shù) | 禁用錄音 |
-acodec編解碼器 | 輸入輸出參數(shù) | 設(shè)置音頻編解碼器挫望。這是-codec的別名:a |
-sample_fmt[:stream_specifier] sample_fmt | 輸出參數(shù)立润,每個(gè)流 | 設(shè)置音頻采樣格式。使用-sample_fmts獲取支持的樣本格式列表 |
-af filtergraph | 輸出參數(shù) | 創(chuàng)建由filtergraph指定的過濾器圖媳板,并使用它來過濾流 |
錄制
查看 Mac 上的舍比誒
ffmpeg -f avfoundation -list_devices true -i ""
ffmpeg version 4.2.git Copyright (c) 2000-2019 the FFmpeg developers
built with Apple LLVM version 10.0.1 (clang-1001.0.46.4)
configuration: --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-videotoolbox --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=clang --host-cflags= --host-ldflags=
libavutil 56. 33.100 / 56. 33.100
libavcodec 58. 55.101 / 58. 55.101
libavformat 58. 31.104 / 58. 31.104
libavdevice 58. 9.100 / 58. 9.100
libavfilter 7. 58.101 / 7. 58.101
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
[AVFoundation indev @ 0x7f85b450ed80] AVFoundation video devices:
[AVFoundation indev @ 0x7f85b450ed80] [0] FaceTime HD Camera
[AVFoundation indev @ 0x7f85b450ed80] [1] Capture screen 0
[AVFoundation indev @ 0x7f85b450ed80] AVFoundation audio devices:
[AVFoundation indev @ 0x7f85b450ed80] [0] MacBook Pro 麥克風(fēng)
[AVFoundation indev @ 0x7f85b450ed80] [1] WH-1000XM3
: Input/output error
視頻播放
ffplay /Users/victoryang/Desktop/out.mp4
ffplay 直接跟視頻文件
錄屏
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
- -f 指定使用 avfoundation 采集數(shù)據(jù)
- -i 指定從哪兒采集數(shù)據(jù)桑腮,它是一個(gè)文件索引號(hào),從查詢的設(shè)備中可以看出 1 是桌面
- -r 指定幀率蛉幸。按ffmpeg官方文檔說-r與-framerate作用相同破讨,但實(shí)際測(cè)試時(shí)發(fā)現(xiàn)不同丛晦。-framerate 用于限制輸入,而-r用于限制輸出
桌面的輸入對(duì)幀率沒有要求提陶,所以不用限制桌面的幀率
錄屏加上聲音
ffmpeg -f avfoundation -i "1:0" -r 29.97 -c:v libx264 -crf 0 -c:a libfdk_aac -profile:a aac_he -b:a 32k out.flv
- -i "1:0" 1 代表視頻索引烫沙,0 代表音頻索引
- -c:v 表示視頻編碼器,c 是 codec 的縮寫隙笆,v 是video的縮寫
- -crf 是 x264 的參數(shù)锌蓄。0表示無損壓縮
- -c:a 音頻編碼器
- -profile 是 fdk_acc 的參數(shù),使用 aac_he 壓縮數(shù)據(jù)
- -b:a 指定音頻碼率撑柔, b 是 bitrate的縮寫, a是 audio的縮寫
錄視頻
ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4
- -framerate 限制視頻的采集幀率, 不限制會(huì)報(bào)錯(cuò)瘸爽,根據(jù)提示設(shè)置
- -f 指定使用 avfoundation 采集數(shù)據(jù)
- -i 指定視頻設(shè)備的索引號(hào)
錄制視頻加上音頻
ffmpeg -framerate 30 -f avfoundation -i 0:0 out.mp4
錄音
ffmpeg -f avfoundation -i :0 out.wav
錄制音頻裸數(shù)據(jù)
ffplay /Users/victoryang/Desktop/out.pcm
分解復(fù)用
通過 copy 參數(shù)提供給 -codec 選項(xiàng)來拷貝流的某種形式,比如只拷貝音頻铅忿,只拷貝視頻剪决,這樣就能進(jìn)行音視頻的提取以及合并。流拷貝沒有解碼和編碼步驟檀训,只能進(jìn)行多路分解和多路復(fù)用昼捍。
graph TD
A(input file) -->|demuxer 分解| B[encoded data packets 解碼器]
B --> |muxer 復(fù)用器|E(output file)
沒有解碼或編碼,速度非持叮快妒茬,也沒有質(zhì)量的損失。
抽取音頻流
ffmpeg -i /Users/victoryang/Desktop/out.mp4 -acodec copy -vn out.aac
- acodec: 指定音頻編碼器蔚晨,copy 指明只拷貝乍钻,不做編解碼
- vn: v 代表視頻,n 代表 no 也就是無視頻的意思
抽取視頻流
ffmpeg -i /Users/victoryang/Desktop/out.mp4 -vcodec copy -an out.h264
- vcodec: 指定視頻編碼器铭腕,copy 指明只拷貝银择,不做編解碼
- an: a 代表視頻,n 代表 no 也就是無音頻的意思
格式轉(zhuǎn)換
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
音視頻合成
ffmpeg -i out.h264 -i 222.aac -vcodec copy -acodec copy 3333.mp4
處理原始數(shù)據(jù)
提取 YUV 數(shù)據(jù)
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv
ffplay -s 寬x高 out.yuv
- -c:v rawvideo 指定將視頻轉(zhuǎn)成原始數(shù)據(jù)
- -pixel_format yuv420p 指定轉(zhuǎn)換格式為yuv420p
YUV 轉(zhuǎn) H264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264
提取 PCM 數(shù)據(jù)
ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
ffplay -ar 44100 -ac 2 -f s16le -i out.pcm
PCM 轉(zhuǎn) WAV
ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.raw output.wav
濾鏡
在編碼之前累舷,ffmpeg可以使用libavfilter庫中的過濾器處理原始音頻和視頻幀浩考。 幾個(gè)鏈?zhǔn)竭^濾器形成一個(gè)過濾器圖形。 ffmpeg區(qū)分兩種類型的過濾器圖形:簡單和復(fù)雜被盈。
簡單濾鏡
只有一個(gè)輸入和輸出析孽,都是相同類型,通過在解碼和編碼之間插入一個(gè)額外步驟來實(shí)現(xiàn):
graph TD
A[decoded frames 未壓縮的幀即原始視頻或PCM音頻等]
A --> |簡單濾鏡|C[filtered frames]
C --> |encoder|D[encoded data packets 編碼器]
復(fù)雜濾鏡
復(fù)雜的過濾器圖是那些不能簡單描述為應(yīng)用于一個(gè)流的線性處理鏈的過濾器圖,例如只怎,當(dāng)圖形有多個(gè)輸入和/或輸出袜瞬,或者當(dāng)輸出流類型與輸入不同時(shí),就是這種情況:
graph TD
A[input 0]
B[input 1]
C[input 2]
A --> |復(fù)雜濾鏡|D[filtered frames]
B --> |復(fù)雜濾鏡|D[filtered frames]
C --> |復(fù)雜濾鏡|D[filtered frames]
D --> E[output 0]
D --> F[output 1]
-lavfi選項(xiàng)等同于-filter_complex
舉例
視頻和音頻使用-vf和-af別名
添加水印
ffmpeg -i out222.mp4 -vf "movie=logo.png,scale=100:100[watermask];[in][watermask] overlay=30:10 [out]" wuwei.mp4
- movie 指定logo位置
- scale 指定 logo 大小
- overlay 指定 logo 擺放的位置身堡。
刪除水印
先找到 logo 位置
ffplay -i /Users/victoryang/Desktop/wuwei.mp4 -vf delogo=x=30:y=10:w=100:h=100:show=1
通過調(diào)節(jié)位置大小邓尤,把綠框框完全覆蓋logo,再使用 delogo 刪除 logo
ffmpeg -i /Users/victoryang/Desktop/wuwei.mp4 -vf delogo=x=30:y=10:w=100:h=100 delogo.mp4
視頻縮小1倍
ffmpeg -i out222.mp4 -vf scale=iw/2:-1 scale.mp4
- scale 指定使用簡單過濾器 scale
- iw/2:-1 中的 iw 指定按整型取視頻的寬度。 -1 表示高度隨寬度一起變化汞扎。
視頻裁剪
ffmpeg -i wuwei.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy -video_size 1280x720 vr_new.mp4
crop 格式:crop=out_w:out_h:x:y
- out_w: 輸出的寬度季稳。可以使用 in_w 表式輸入視頻的寬度
- out_h: 輸出的高度澈魄【笆螅可以使用 in_h 表式輸入視頻的高度
- x : X坐標(biāo)
- y : Y坐標(biāo)
如果 x和y 設(shè)置為 0,說明從左上角開始裁剪。如果不寫是從中心點(diǎn)裁剪
倍速播放
ffmpeg -i wuwei.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" speed2.0.mp4
- -filter_complex 復(fù)雜濾鏡一忱,[0:v]表示第一個(gè)(文件索引號(hào)是0)文件的視頻作為輸入。setpts=0.5*PTS表示每幀視頻的pts時(shí)間戳都乘0.5 谭确,也就是差少一半帘营。[v]表示輸出的別名
- map 可用于處理復(fù)雜輸出,如可以將指定的多路流輸出到一個(gè)輸出文件逐哈,也可以指定輸出到多個(gè)文件芬迄。"[v]" 復(fù)雜濾鏡輸出的別名作為輸出文件的一路流。上面 map的用法是將復(fù)雜濾鏡輸出的視頻和音頻輸出到指定文件中
對(duì)稱視頻
ffmpeg -i out.mp4 -filter_complex "[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w" duicheng.mp4
- hflip 水平翻轉(zhuǎn)
- vflip 垂直翻轉(zhuǎn)
畫中畫
ffmpeg -i out.mp4 -i wuwei.mp4 -filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[ckout];[0:v][ckout]overlay=x=W-w-10:y=0[out]" -map "[out]" -movflags faststart new.mp4
錄制畫中畫
錄屏幕加上錄制攝像頭
ffmpeg -f avfoundation -i "1" -framerate 30 -f avfoundation -i "0:0" -r 30 -c:v libx264 -preset ultrafast -c:a libfdk_aac -profile:a aac_he_v2 -ar 44100 -ac 2 -filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[a];[0:v][a]overlay=x=W-w-10:y=0[out]" -map "[out]" -movflags faststart -map 1:a b.mp4
多路視頻拼接
錄屏和攝像頭水平拼接到一起昂秃,錄屏左邊禀梳,攝像頭右邊
ffmpeg -f avfoundation -i "1" -framerate 30 -f avfoundation -i "0:0" -r 30 -c:v libx264 -preset ultrafast -c:a libfdk_aac -profile:a aac_he_v2 -ar 44100 -ac 2 -filter_complex "[0:v]scale=320:240[a];[a]pad=640:240[b];[b][1:v]overlay=320:0[out]" -map "[out]" -movflags faststart -map 1:a c.mp4
音視頻的拼接和裁剪
裁剪
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out1.mp4
- -ss 指定裁剪的開始時(shí)間,精確到秒
- -t 被裁剪后的時(shí)長
合并
首先創(chuàng)建一個(gè) inputs.txt 文件肠骆,順序排列算途,也就會(huì)按順序播放:
file '1.mp4'
file '2.mp4'
file '3.mp4'
ffmpeg -f concat -i inputs.txt -c copy output.mp4
hls 切片
ffmpeg -i out.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8
- -strict -2 指明音頻使有AAC
- -f hls 轉(zhuǎn)成 m3u8 格式
視頻圖片互轉(zhuǎn)
視頻轉(zhuǎn)JPEG
ffmpeg -i wuwei.mp4 -r 1 -f image2 image-%3d.jpeg
視頻轉(zhuǎn) GIF
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out.gif
ffmpeg -ss 8 -t 15 -i 11.mp4 -s 600x400 -r 10 res.gif
- -s:設(shè)定分辨率
- -ss 8 -t 15:從第8秒開始,往后截取15秒鐘
- -r:設(shè)定幀數(shù)
圖片轉(zhuǎn)視頻
ffmpeg -f image2 -i image-%3d.jpeg images.mp4
將所有同一個(gè)文件夾下的類似image-000.jpeg, image-001.jpeg, image-002.jpeg 的圖片轉(zhuǎn)換為視頻
獲取某個(gè)視頻的首幀圖片
ffmpeg -i plan_vedio_1.mp4 -ss 00:00:00 -vframes 1 1.png
直播相關(guān)
推流
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
拉流保存
ffmpeg -i rtmp://server/live/streamName -c copy dump.flv
轉(zhuǎn)流
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v copy -f flv rtmp://server/live/h264Stream
實(shí)時(shí)推流
ffmpeg -framerate 15 -f avfoundation -i "1" -s 1280x720 -c:v libx264 -f flv rtmp://localhost:1935/live/room
ffplay
播放 YUV 數(shù)據(jù)
ffplay -pix_fmt nv12 -s 192x144 1.yuv
播放 YUV 中的 Y 平面
ffplay -pix_fmt nv21 -s 640x480 -vf extractplanes='y' 1.yuv