xSky 实验室关注高性能计算,分布式系统/存储,大数据/机器学习/WebRTC
目录
  • 首页
  • 技术相关
  • 原创作品
  • 人工智能/机器学习
  • 系统与架构
  • 数据库/数据分析
  • 分布式系统/存储
  • 服务端开发
  • WEBRTC研究
  • 开发调试
  • 网络与安全
  • 常用工具
  • 杂七杂八

记录FFmpeg抽帧、合流、转码、加水印等操作

2022-08-27 15:45:53
ffmpeg合流
示例 2个输入流
ffmpeg -re -i "/Users/test/Desktop/test.flv" -i "/Users/test/Desktop/test22.flv" -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x480 [left]; [1:v] setpts=PTS-STARTPTS, scale=320x480 [right]; [base][left] overlay=shortest=1 [tmp1]; [tmp1][right] overlay=shortest=1:x=320" -movflags faststart -c:v libx264 -profile:v high -preset medium -filter_complex amix -c:a aac -f flv "rtmp://127.0.0.1/live/livestream"
 
 
 
示例 4个输入流
ffmpeg  -i /Users/test/Desktop/test.flv -i  /Users/test/Desktop/test.flv -i /Users/test/Desktop/test.flv -i /Users/test/Desktop/test.flv -filter_complex "nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240" -movflags faststart -c:v libx264 -profile:v high -preset medium -filter_complex amix -c:a aac -f flv "rtmp://127.0.0.1/live/livestream"
 
 
 
并排显示两路流
ffmpeg -thread_queue_size 128 -i /Users/test/Desktop/test.flv -i /Users/test/Desktop/test22.flv -acodec aac -vcodec libx264 -preset ultrafast  -filter_complex "[0:v]pad=w=iw*2:h=ih[b];[b][1:v]overlay=x=W/2"  -movflags faststart -c:v libx264 -profile:v high -preset medium -filter_complex amix -c:a aac -f flv "rtmp://127.0.0.1/live/livestream"
 
mp4中提取h264码流
ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264 
 
两路流覆盖
ffmpeg -i "rtmp://192.168.20.249:1935/live/livestream" -i "rtmp://192.168.20.249:1935/live/11" -filter_complex overlay=x=W-w:y=H-h -f flv "rtmp://192.168.20.249:1935/live/livestream_11"
 
ffmpeg -i ~/Movies/objectC/facebook.mp4 -i ~/Downloads/pacopacomama-061816_108-FHD/061816_108-paco-720p.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 b.mp4
注意:这些操作必须开启FFmpeg以下插件功能
–enable-libfdk-aac --enable-libx264
 
画中画
./ffmpeg -i rtmp://192.168.20.249:1935/live/livestream -i rtmp://192.168.20.249:1935/live/11 -max_muxing_queue_size 1024 -acodec aac  -vcodec libx264 -preset ultrafast -profile:v baseline -level 3.1 -g 50 -tune zerolatency -r 25 -b:a 20k -b:v 800k -filter_complex "[1:v]scale=iw/3:ih/3:force_original_aspect_ratio=decrease[com];[0:v][com]overlay=x=W-w:y=H-h[out]" -map "[out]" -filter_complex amix=inputs=2:duration=shortest:dropout_transition=2,volume=1 -movflags faststart -f flv -y rtmp://192.168.20.249:1935/live/livestream_11
 
ffmpeg rtmp流OR视频加水印
 
文字水印,输入输出都可以设置为rtmp流地址
ffmpeg -re -i /Users/test/Desktop/test.flv -vf "drawtext=fontsize=50:fontfile=FreeSerif.ttf:text='%{localtime\:%Y\-%m\-%d %H-%M-%S}':x=20:y=20:fontcolor=green" -c:v libx264 -c:a copy -f flv rtmp://127.0.0.1/live/livestream
 
图片水印
ffmpeg -re -i /Users/test/Desktop/test33.flv -vf "movie=/Users/test/Desktop/test.jpeg,colorkey=black:1.0:1.0 [wm];[in][wm]overlay=30:10[out]"  -c:v libx264 -c:a copy -f flv rtmp://127.0.0.1/live/livestream
 
ffmpeg常用命令:
-i inputfile 指定输入文件
-r fps 指定帧率
ffmpeg -i input.avi -r 30 output.mp4
ffmpeg -i clip.mpg -vf fps=fps=25 clip.webm    --(-vf 就是(video filter) 视频过滤器)
 
-b bitrate 设置比特率
ffmpeg -i film.avi -b 1.5M film.mp4
ffmpeg -i film.avi -b:v 1.5M -b:a 1M film.mp4
 
-s 320X240 指定视频大小(视频缩放)
ffmpeg -i input.mpg -s 320x240 output.mp4
ffmpeg -i input.mpg -vf scale=320:240 output.mp4
ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4
 
crop 视频裁剪
ffmpeg -i input -vf crop=iw/3:ih:0:0 output              --左边三分之一
ffmpeg -i input -vf crop=iw/3:ih:iw/3:0 output --中间三分之一
ffmpeg -i input -vf crop=iw/3:ih:iw/3*2:0 output --右边三分之一
 
pad 视频填充
ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink framed_photo.jpg
 
抽帧
ffmpeg.exe -i aa.mp4 -y -f image2 -ss 8 -t 0.01 -s 800x600 test.jpg 
ffmpeg -i inputfile.avi -r 1 -f image2 image-%05d.jpeg
 
画面上半部分翻转到下面输出
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
 
ffmpeg参数
-fflags nobuffer 直接读出或者写出,不存入缓存,降低延迟
-analyzeduration int 指定解析媒体所需要花销的时间
ffmpeg主要模块
libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音
视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。
libavcodec:用于各种类型声音/图像编解码;该库是音视频编解码核心,实现了市面上可见的绝大部分解码器
的功能,libavcodec 库被其他各大解码器 ffdshow,Mplayer 等所包含或应用。
libavdevice : 硬 件 采 集 、 加 速 、 显 示 。 操 作 计 算 机 中 常 用 的 音 视 频 捕 获 或 输 出 设 备 :
ALSA,AUDIO_BEOS,JACK,OSS,1394,VFW。
libavfilter:filter(FileIO、FPS、DrawText)音视频滤波器的开发,如宽高比 裁剪 格式化 非格式化 伸缩。
libavutil:包含一些公共的工具函数的使用库,包括算数运算 字符操作;
libavresample:音视频封转编解码格式预设等。
libswscale:(原始视频格式转换)用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb565
rgb888 等与 yuv420 等之间转换。
libswresample:原始音频格式转码
libpostproc:(同步、时间计算的简单算法)用于后期效果处理;音视频应用的后处理,如图像的去块效应。
ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
ffsever:一个 HTTP 多媒体即时广播串流服务器;
ffplay:是一个简单的播放器,使用 ffmpeg 库解析和解码,通过 SDL 显示
ffmpeg静态库文件编译顺序:(静态库编译存在依赖关系的库注意顺序)
 
-lavformat -lavfilter -lswscale -lavcodec -lswresample -lpostproc -lavutil  -lx264 -lfdk-aac  -ldl -lz -llzma -lbz2  -lrt  -lpthread -lm
 
ffmpeg关键数据结构:
解协议:
URLContext主要存储视音频使用的协议的类型以及状态。
URLProtocol存储输入视音频使用的封装格式。
每种协议都对应一个URLProtocol结构
解封装:
AVFormatContext主要存储视音频封装格式中包含的信息;
AVInputFormat存储输入视音频使用的封装格式。
每种视音频封装格式都对应一个AVInputFormat 结构
解码:
每个AVStream存储一个视频/音频流的相关数据;
每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;
每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。
每种解码器都对应一个AVCodec结构
存数据:
视频的话,每个结构一般是存一帧;音频可能有好几帧
解码前数据:AVPacket
解码后数据:AVFrame
 

By:xSky | 技术相关 |

  • 分类目录

    • 技术相关 (34)
    • 原创作品 (13)
    • 人工智能/机器学习 (6)
    • 系统与架构 (9)
    • 数据库/数据分析 (11)
    • 分布式系统/存储 (4)
    • 服务端开发 (7)
    • WEBRTC研究 (7)
    • 开发调试 (7)
    • 网络与安全 (9)
    • 常用工具 (9)
    • 杂七杂八 (6)
  • 最新文章

    • WSL从C盘迁移到其他盘区
    • 赵何娟:中国AI追随之路的五大误区,我们至少落后十年
    • zap  发送日志到 websocket
    • QUIC(隐藏的)超能力
    • MYSQL 生成日期/时间序列总结
    • Linux bash终端设置代理(proxy)访问
    • centos 下 yum安装python3
    • 使用SQL查询Milvus 向量数据库
    • 浅谈 MySQL 新的身份验证插件 caching_sha2_password
    • Milvus v2.2.1 开源向量搜索引擎使用教程
    • 部署了一个SRS的demo
    • Dockerfile 详解
    • Docker常用命令
    • Tus文件上传协议
    • 编译运行Milvus
    • MinIO 快速入门
    • ESP32
    • Prometheus监控报警系统搭建
    • go语言JSON字典模拟
    • go语言的sql解析器
    • Grafana配置数据源,自定义查询语法
    • TDengine + Telegraf + Grafana
    • gRPC-Gateway 返回JSON数据int64类型被转为string类型问题
    • LLAMA模型试玩
    • 语音识别的一些开源项目整理
    • 使用MYSQL8进行统计分析
    • 记录FFmpeg抽帧、合流、转码、加水印等操作
    • 移动网络弱网处理研究
    • 翻译:使用 Semgrep 进行热点代码评审
    • 共享内存并发路线图
  • 链接

    • xSky的Blog
    • 我的Github
    • 实时监控图表
    • 预印本
    • xRedis 在线文档
    • xSkyProxy
    • xChart 数据在线测试
    • 我的电子书
    • xChart 数据可视化系统
    • 树莓派技术圈
    • WebRTC开发者社区
  • 开源项目

    • xReis C++的redis客户端库
    • xBlog-C++ 博客程序
    • xSkyProxy-新型MySQL代理网关
    • 数据可视化平台- xChart
    • xhttpcache 高速数据缓存服务
    • xMonitor-图形监测工具
    • 网址收集

Powered By xBlog

Copyright 2010~2024 0xsky.com All Rights Reserved.