ffmpeg 多路操作

多路流合成为一路,并排显示
ffmpeg -i "rtmp://192.168.20.130:1935/live/livestream1" -i "rtmp://192.168.20.130:1935/live/livestream2" -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 -f flv "rtmp://192.168.20.130:1935/live/livestream_"
ffmpeg -thread_queue_size 128 -i rtmp://192.168.20.249:1935/live/livestream -i rtmp://192.168.20.249:1935/live/11 -filter_complex "[0:v]pad=w=iw*2:h*2=ih[b];[b][1:v]overlay=x=W/2" -filter_complex amix=inputs=2:duration=shortest:dropout_transition=2,volume=1 -f flv rtmp://192.168.20.249:1935/live/livestream_11

./objs/ffmpeg/bin/ffmpeg -thread_queue_size 256 -i rtmp://192.168.20.249:1935/live/stream01 
 -i rtmp://192.168.20.249:1935/live/11 
 -filter_complex [0:v]pad=w=iw*2:h=ih[b];[b][1:v]overlay=x=W/2 -filter_complex amix=inputs=2:duration=shortest:dropout_transition=2,volume=1 -b:v 3072k -f flv rtmp://192.168.20.249:1935/live/stream01_11 

并排显示两路流
ffmpeg -thread_queue_size 128 -i rtmp://192.168.20.249:1935/live/livestream -i rtmp://192.168.20.249:1935/live/11 -acodec aac -vcodec libx264 -preset ultrafast  -filter_complex "[0:v]pad=w=iw*2:h=ih[b];[b][1:v]overlay=x=W/2" -filter_complex "amix=inputs=2:duration=shortest:dropout_transition=2,volume=1" -movflags faststart -f flv rtmp://192.168.20.249:1935/live/livestream_11
 

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

--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主要模块:
    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命令:
-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关键数据结构:
    解协议:
        URLContext主要存储视音频使用的协议的类型以及状态。
        URLProtocol存储输入视音频使用的封装格式。
        每种协议都对应一个URLProtocol结构
    解封装:
        AVFormatContext主要存储视音频封装格式中包含的信息;
        AVInputFormat存储输入视音频使用的封装格式。
        每种视音频封装格式都对应一个AVInputFormat 结构
    解码:
        每个AVStream存储一个视频/音频流的相关数据;
        每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;
        每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。
        每种解码器都对应一个AVCodec结构
    存数据:
        视频的话,每个结构一般是存一帧;音频可能有好几帧
        解码前数据:AVPacket
        解码后数据:AVFrame
                   
                
     initialize_combine failed, ret = -1, cid=-1, current_cid=110   

ffmpeg -i rtmp://192.168.20.249:1935/live/livestream -i rtmp://192.168.20.249:1935/live/11 -filter_complex "[0:v]pad=w=iw*2:h=ih[b];[b][1:v]overlay=x=W/2" -filter_complex amix=inputs=2:duration=first:dropout_transition=2,volume=1 -f flv rtmp://192.168.20.249:1935/live/livestream_11
 
ffmpeg命令:
画面上半部分翻转到下面输出
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   指定解析媒体所需要花销的时间
 
 
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值