FFmpeg 從未知到牽手(1) - 下載晃财、安裝與基本命令

[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)

image.png

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)為模擬視音頻

image.png

顯示所有可用的編碼器

編碼器主要把模擬視音頻信號(hào)壓縮數(shù)據(jù)編碼文件

image.png

顯示所有可用濾鏡

這里有很多音視頻特效處理的功能及舍,比如視頻縮放、截取做鹰、翻轉(zhuǎn)击纬、疊加、跑馬燈钾麸、視頻轉(zhuǎn)GIF等功能

image.png

編譯

./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):


image.png

include 文件夾下是頭文件


image.png

lib 里是動(dòng)態(tài)庫

share 里是文檔相關(guān)及例子

如果編譯后沒有 ffplay


image.png

可能有以下幾個(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ù)為原來的值了
image.png

ffprobe 是多媒體偵測(cè)器
ffplay 是多媒體播放器

執(zhí)行命令

執(zhí)行命令一般用以下路徑的 ffmpeg

image.png

/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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚀腿,一起剝皮案震驚了整個(gè)濱河市嘴瓤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莉钙,老刑警劉巖廓脆,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異磁玉,居然都是意外死亡停忿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蚊伞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來席赂,“玉大人,你說我怎么就攤上這事时迫⊙踉妫” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵别垮,是天一觀的道長便监。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么烧董? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任毁靶,我火速辦了婚禮,結(jié)果婚禮上逊移,老公的妹妹穿的比我還像新娘勾栗。我一直安慰自己爹殊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著常遂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毒姨。 梳的紋絲不亂的頭發(fā)上冤竹,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音案铺,去河邊找鬼蔬芥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛控汉,可吹牛的內(nèi)容都是我干的笔诵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼姑子,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乎婿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起街佑,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤次酌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后舆乔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岳服,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年希俩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吊宋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颜武,死狀恐怖璃搜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳞上,我是刑警寧澤这吻,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站篙议,受9級(jí)特大地震影響唾糯,放射性物質(zhì)發(fā)生泄漏怠硼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一移怯、第九天 我趴在偏房一處隱蔽的房頂上張望香璃。 院中可真熱鬧,春花似錦舟误、人聲如沸葡秒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眯牧。三九已至,卻和暖如春赖草,著一層夾襖步出監(jiān)牢的瞬間学少,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工疚顷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旱易,地道東北人禁偎。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓腿堤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親如暖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笆檀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容