Leo Technology Stack Leo Technology Stack
首页
  • Android
  • Web
  • SpringBoot
  • 数据库
  • Docker
  • Netty
  • KubeSphere
  • Linux
  • Android Framework
  • 开源库
思维
  • 面试
  • 投资理财
  • 杂事记录
  • 索引

    • 分类
    • 标签
    • 归档
  • 开源项目

    • Advance Markdown
    • AnLibrary (opens new window)

Leo

不知名的架构师
首页
  • Android
  • Web
  • SpringBoot
  • 数据库
  • Docker
  • Netty
  • KubeSphere
  • Linux
  • Android Framework
  • 开源库
思维
  • 面试
  • 投资理财
  • 杂事记录
  • 索引

    • 分类
    • 标签
    • 归档
  • 开源项目

    • Advance Markdown
    • AnLibrary (opens new window)
  • FFmpeg

    • FFmpeg常用命令
      • 常见
        • FFmpeg基本开发
          • 音视频编解码实战
            • 音视频渲染实战
              • FFmpeg开发播放器核心功能
                • Android中使用FFmpeg
                • notes
                • Linux
                • 开源库
                Leo
                2021-04-13

                FFmpeg

                在线视频地址,MP4

                https://v-cdn.zjol.com.cn/280443.mp4
                https://v-cdn.zjol.com.cn/276982.mp4
                https://v-cdn.zjol.com.cn/276984.mp4
                https://v-cdn.zjol.com.cn/276985.mp4

                # FFmpeg常用命令

                • 基本信息查询命令
                • 录制命令
                • 分解/复用命令
                • 处理原始数据命令
                • 剪裁和合并命令
                • 图片/视频互转命令
                • 直播相关命令
                • 各种滤镜

                # 基本信息查询命令

                命令 解释
                -version 显示版本
                -demuxers 显示可用的demuxers
                -muxers 显示可用的muxers
                -devices 显示可用的设备
                -codecs 显示所有编解码器
                -decoders 显示可用的解码器
                -encoders 显示所有的编码器
                -bsfs 显示比特流filter
                -formats 显示可用的格式
                -protocols 显示可用的协议
                -filters 显示可用的过滤器
                -pix_fmts 显示可用的像素格式
                -sample_fmts 显示可用的采样格式
                -layouts 显示channel名称
                -colors 显示识别的颜色名称

                # 录制命令

                ffmpeg -f avfoundation -list_devices true -i ""

                • 录屏
                  ffmpeg -f avfoundation -i 1 -r 30 out.yuv

                • 录音

                ffmpeg -f avfoundation -i :0 out.wav

                # 分解/复用命令

                • 多媒体格式转换
                  ffmpeg -i j20.mov -vcodec copy -acodec copy out.mp4

                ffmpeg -i j20.mov -an -vcodec copy out.h264
                ffmpeg -i j20.mov -an -acodec copy -vn out.aac

                # 处理原始数据命令

                • ffmpeg提取YUV数据
                  ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

                ffplay -s 1024x1080 out.yuv

                • ffmpeg提取PCM数据
                  ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

                ffpaly -ar 44100 -ac 2 -f s16le out.pcm

                # 剪裁和合并命令

                • 裁剪
                  ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts

                • 合并
                  ffmpeg -f concat -i input.txt in.mp4

                # 图片/视频互转命令

                • 视频转图片

                ffmpeg -i in.mp4 -r 1 -f image2 ./img/image-%3d.jpeg

                -r 每秒钟几张
                -f 格式

                • 图片转视频

                ffmpeg -i ./img/image-%3d.jpeg ./img/out.mp4

                # 直播相关命令

                • 推流
                  ffmpeg -re -i in.mp4 -c copy -f flv rtmp://server/live/streamName

                re:

                • 拉流
                  ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

                -c

                # 各种滤镜

                ffmpeg -i in.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4

                in_w:输入视频的width
                in_h:输入视频的height

                crop格式:crop=out_w:out_h❌y

                # 常见

                命令 解释
                -bitexact 使用标准比特率
                -vcodec xvid 使用xvid压缩
                -s 320x240 指定分辨率
                -r 29.97 桢速率
                -bitexact 使用标准比特率
                -bitexact 使用标准比特率
                -bitexact 使用标准比特率
                -bitexact 使用标准比特率
                -bitexact 使用标准比特率

                -b <比特率> 指定压缩比特率,似乎ffmpeg是自动VBR的,指定了就大概是平均比特率,比如768,1500这样的
                就是原来默认项目中有的
                -qscale <数值> 以<数值>质量为基础的VBR,取值0.01-255,约小质量越好
                -qmin <数值> 设定最小质量,与-qmax(设定最大质量)共用,比如-qmin 10 -qmax 31
                -sameq 使用和源同样的质量
                声音部分
                -acodec aac 设定声音编码
                -ac <数值> 设定声道数,1就是单声道,2就是立体声,转换单声道的TVrip可以用1(节省一半容量),高品质
                的DVDrip就可以用2
                -ar <采样率> 设定声音采样率,PSP只认24000
                -ab <比特率> 设定声音比特率,前面-ac设为立体声时要以一半比特率来设置,比如192kbps的就设成96,转换
                君默认比特率都较小,要听到较高品质声音的话建议设到160kbps(80)以上
                -vol <百分比> 设定音量,某些DVDrip的AC3轨音量极小,转换时可以用这个提高音量,比如200就是原来的2倍
                这样,要得到一个高画质音质低容量的MP4的话,首先画面最好不要用固定比特率,而用VBR参数让程序自己去
                判断,而音质参数可以在原来的基础上提升一点,听起来要舒服很多,也不会太大(看情况调整

                # FFmpeg基本开发

                • FFmpeg代码结构
                代码库 解释
                libavcodec 提供了一系列编码器的实现
                libavformat 实现了流协议,容器格式及其基本IO访问
                libavutil 包括hash器,解码器和各种工具函数
                libavfilter 提供各种音视频过滤器
                libavdevice 提供访问捕获设备和回放设备的接口
                libavswresample 实现了混音和重采样
                libswscale 实现了色彩转换和缩放功能
                • FFmpeg 日志系统
                include <libavutil/log.h>
                av_log_set_level(AV_LOG_DEBUG)
                av_log(NULL,AV_LOG_INFO,"...%s\n",op)
                
                //日志级别
                AV_LOG_ERROR
                AV_LOG_WARNING
                AV_LOG_INFO
                
                1
                2
                3
                4
                5
                6
                7
                8
                • 文件删除与重命名

                pkg-config --libs libavformat

                avpriv_io_delete(); //删除

                avpriv_io_move(); //重命名

                • 操作目录重要结构体

                avio_open_dir();

                avio_read_dir();

                avio_close_dir();

                AVIODirContext:操作目录的上下文
                AVIOEntry: 目录项,用于存放文件名字、文件大小等信息

                avio_free_directory_entry();

                • 多媒体文件的基本概念

                  • 多媒体文件其实是个容器
                  • 在容器里有很多流(Stream/Track)
                  • 每种流是由不同编码器编码的
                  • 从流里读出的数据称为包
                  • 在一个包中包含一个或者多个帧
                • 重要的结构体

                  • AVFormatContext
                  • AVStream
                  • AVPacket
                • FFmpeg操作流数据的基本步骤
                  解复用-->获取流--〉读数据包-->释放资源

                • 打印音视频信息

                  • av_register_all()
                  • avformat_open_input()/avformat_close_input()
                  • av_dump_format()
                • 抽取音频数据

                  • av_init_packet()
                  • av_find_best_stream()
                  • av_read_frame()
                  • av_packet_unref()

                # ffmpeg处理音视频流程

                # 音视频编解码实战

                # 音视频渲染实战

                # FFmpeg开发播放器核心功能

                # Android中使用FFmpeg

                编辑此页 (opens new window)
                上次更新: 2022-04-28, 11:21:32
                Theme by Leo | Copyright © 2016-2022 Leo | MIT License
                • 跟随系统
                • 浅色模式
                • 深色模式
                • 阅读模式