草庐IT

ffmpeg 多路操作

hvac_011 2023-04-12 原文

多路流合成为一路,并排显示
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   指定解析媒体所需要花销的时间
 
 
 
 

有关ffmpeg 多路操作的更多相关文章

  1. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  2. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  3. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  4. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  5. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  6. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  7. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  8. Postman测试简单操作 - 2

    1、接口请求基本操作1.1例子tips在view的选项可以zoomin调整窗口字帖大小。1、创建一个测试的workspace,并命名为test2、test后面新增一个addrequest3、选择发送GET,URL为一个开源的https://api.apiopen.top/api/sentences获取每日一句4、点击send查看内容Tips:如果提示出现Error:tunnelingsocketcouldnotbeestablished,statusCode=407错误,参照以下解决办法)关于tunnelingsocketcouldnotbeestablished,cause=getaddri

  9. 【Linux操作系统】——网络配置与SSH远程 - 2

    Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好

  10. ruby - Ruby 语言可以用来构建操作系统吗? - 2

    Ruby语言是否可以用于创建全新的移动操作系统或桌面操作系统,即是否可以用于系统编程? 最佳答案 嗯,现在有一些操作系统使用比C更高级的语言。基本上,ruby解释器本身需要用一些低级的东西来编写,并且需要一些引导加载代码将功能齐全的ruby​​解释器作为独立内核加载到内存中。一旦ruby​​解释器被引导并以内核模式(或innerrings之一)运行,就没有什么可以阻止您在其上构建整个操作系统。不幸的是,它可能会很慢。每个操作系统功能的垃圾收集可能会相当引人注目。ruby解释器将负责任务调度和网络堆栈等基本事情,使用垃圾收集框架会大大

随机推荐