使用FFmpeg推流实现在B站24小时点歌直播

使用FFmpeg推流实现在B站24小时点歌直播

本文首发于个人博客

安装FFmpeg

centos7

https://www.myfreax.com/how-to-install-ffmpeg-on-centos-7/

https://linuxize.com/post/how-to-install-ffmpeg-on-centos-7/

使用FFmpeg在B站直播

https://zhuanlan.zhihu.com/p/23951969

实现一个点歌台在B站24小时直播

下图是使用FFmpeg推流到B站,实现24小时直播歌曲的截图

体验地址👉https://live.bilibili.com/23752609

image-20220111230017511

想法主要参考了👉https://github.com/chenxuuu/24h-raspberry-live-on-bilibili

FFmpeg推流

因为直播的话推的是视频,所以要想办法把音频文件 + 图片 + 字幕 合成视频

使用一张图片生成视频

ffmpeg  -loop 1 -i 1.jpg -t 5 1.flv
  • -loop 1:表示对输入的图片流进行循环
  • -i 1.jpg:表示1.jpg这张图片作为输入
  • -t 5: 表示输出视频是5s
  • 1.flv:表示最后生成的视频的名称叫1.flv

这样就生成了一个5s视频,当然了是没有声音的

给视频加上音频

在上一步的基础上加上一个mp3格式的音频-i 1.mp3,就可以合成一个5s带有音频的视频

ffmpeg -loop 1 -i 1.jpg -i 1.mp3 -t 5 1.flv

给视频加上ASS字幕

ffmpeg -loop 1 -i 1.jpg -i 1.mp3 -vf "ass=x.ass" -t 5 1.flv

这样就可以给视频加上字幕了

参考官方文档👉https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo

推流

推流只需要将最后的1.flv换成推流地址就好了

ffmpeg -loop 1 -i 1.jpg -i 1.mp3 -vf "ass=x.ass" -t 5 rtmp://live-push.bilivideo.com/live-bvc/?streamname=xxxx&key=xxx

编解码

这样推到B站的流可能因为编码的问题在电脑浏览器上无法播放,这个时候就要对视频进行编码

ffmpeg -loop 1 -i 1.jpg -i 1.mp3 -vf "ass=x.ass" -t 5 -c:v libx264 -c:a aac rtmp://live-push.bilivideo.com/live-bvc/?streamname=xxxx&key=xxx
  • -c:v libx264:这里表示对视频流用libx264编码
  • -c:a aac:表示对音频流用aac编码

贴一个我用的命令

ffmpeg -loglevel warning -threads 0 -re -loop 1 -r 20  -t 234 -f image2 -i "download/用来生成视频的图片.jpg"  -filter_complex "ass=download/字幕.ass[result]"  -i "download/音频.mp3" -map "[result]" -map 1,0  -preset ultrafast -crf 18 -maxrate 500k -b:v 192k -c:v libx264 -c:a aac -bufsize 2M -f flv "rtmp://live-push.bilivideo.com/live-bvc/?streamname=xxxx&key=yyy"

详细的参数介绍

  • -re (input):以指定帧率读取输入。通常用于模拟一个硬件设备,例如在直播输入流(这时是读取一个文件)。不应该在实际设备或者在直播输入中使用(因为这将导致数据包的丢弃)。默认ffmpeg会尽量以最高可能的帧率读取。这个选项可以降低从输入读取的帧率,这常用于实时输出(例如直播流)。

  • -loop_input:循环输入流。当前它仅作用于图片流。这个选项主要用于FFserver自动化测试。这个选项现在过时了,应该使用-loop 1

  • -i filename (input):指定输入文件

  • -r[:stream_specifier] fps (input/output,per-stream):设置帧率(一种Hz值,缩写或者分数值)。

    在作为输入选项时,会忽略文件中存储的时间戳和时间戳而产生的假设恒定帧率fps,即强制按设定帧率处理视频产生(快进/减缓效果)。这不像-framerate选项是用来让一些输入文件格式如image2或者v412(兼容旧版本的FFmpeg)等,要注意这一点区别,而不要造成混淆。

    作为输出选项时,会复制或者丢弃输入中个别的帧以满足设定达到fps要求的帧率。

  • -t duration (input/output):限制输入/输出的时间。如果是在-i前面,就是限定从输入中读取多少时间的数据;如果是用于限定输出文件,则表示写入多少时间数据后就停止。duration可以是以秒为单位的数值或者hh:mm:ss[.xxx]格式的时间值。

  • -f fmt (input/output):指定输入或者输出文件格式。常规可省略而使用依据扩展名的自动指定,但一些选项需要强制明确设定

  • -filter_complex filtergraph (global):定义一个复合滤镜,可以有任意数量的输入/输出。最简单的滤镜链图至少有一个输入和一个输出,且需要相同类型。参考-filter以获取更多信息(更有价值)。filtergraph用来指定一个滤镜链图。关于滤镜链图的语法可以参考ffmpeg-filters相关章节。

    其中输入链标签必须对应于一个输入流。filtergraph的具体描述可以使用file_index:stream_specifier语法(事实上这同于-map)。如果stream_specifier匹配到了一个多输出流,则第一个被使用。滤镜链图中一个未命名输入将匹配链接到的输入中第一个未使用且类型匹配的流。

    使用-map来把输出链接到指定位置上。未标记的输出会添加到第一个输出文件。

    这里[0:v]是第一个输入文件的第一个视频流,它作为滤镜的第一个(主要的)输入,同样,第二个输入文件的第一个视频流作为滤镜的第二个输入。

  • -map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output):设定一个或者多个输入流作为输出流的源。每个输入流是以input_file_id序数标记的输入文件和input_stream_id标记的流序号共同作用指明,它们都以0起始计数。如果设置了sync_file_id:stream_specifier,则把这个输入流作为同步信号参考。

  • -pix_fmt[:stream_specifier] format (input/output,per-stream):设置像素格式。使用-pix_fmts可以显示所有支持的像素格式。如果设置的像素格式不能被选中(启用),则ffmpeg会输出一个警告和并选择这个编码最好(兼容)的像素格式。如果pix_fmt前面前导了一个+字符,ffmepg会在要求的像素格式不被支持时退出,这也意味着滤镜中的自动转换也会被禁止。如果pix_fmt是单独的+,则ffmpeg选择和输入(或者滤镜通道)一样的像素格式作为输出,这时自动转换也会被禁止。

  • -preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。

  • -c:v codec (input/output,per-stream):c是指codec,为特定的文件选择编/解码模式,对于输出文件就是编码器,对于输入或者某个流就是解码器。选项参数中codec是编解码器的名字,或者是copy(仅对输出文件)则意味着流数据直接复制而不再编码

  • -b:v (output):设置输出视频的码率,b应该是bate的意思

搭点歌台可能用到的

CentOS7安装中文字体,👉https://segmentfault.com/a/1190000040275198

FFmpeg使用中文文档,👉https://xdsnet.gitbooks.io/other-doc-cn-ffmpeg/content/ffmpeg-doc-cn-01.html

CentOS 7.4 安装python3及虚拟环境,👉https://zhuanlan.zhihu.com/p/358605587

pip安装源配置,👉https://www.cnblogs.com/zhangmingyan/articles/11985481.html

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

FreeRTOS任务间通信“IPC”

---------------信号量--------------- 信号量的定义: 操作系统中一种解决问题的机制,可以实现 “共享资源的访问” 信号:起通知作用量:还可以用来表示资源的数量当"量"没有限制时,它就是"计数型信…

C++原创人工智能QPBS01G大功告成!!!

俗话说得好,你周五周六不写作业,要上学了才着急了 我之前的版本bug太多,结果这两天晚上改的我两眼发白,太烦人了 这次这娃学聪明了,遇到不会的问题上网搜,我还更新了反骂人骂人功能,第一次测试…

抖音小店新规又来了!平台下调了两项门槛,惊掉商家下巴!

大家好,我是电商糖果 平台这几年为了快速发展电商项目,一直在向商家释放友好政策,目的就是为了吸引更多的商家入驻。 这不官方5月30日起下调了两个门槛,让不少商家大呼不可思议。 第一个就是保证金下调。 平台按照商家经营类目…

ProxySQL路由策略实现读写分离

目的:配置proxysql路由策略后将不同用户的不同请求路由到不同的节点,实现读写分离 前提条件: 配置表mysql_replication_hostgroups,10为写组,20为读组 mysql_users表中已添加用户writer用户加入10写组,rea…

【QT八股文】系列之篇章3 | QT的多线程以及QThread与QObject

【QT八股文】系列之篇章3 | QT的多线程 前言4. 多线程为什么需要使用线程池线程池的基础知识python中创建线程池的方法使用threading库队列Queue来实现线程池使用threadpool模块,这是个python的第三方模块,支持python2和python3 QThread的定义QT多线程知…

下一代Docker会让部署更丝滑吗

下一代Docker会让部署更丝滑吗 如何通俗易懂的理解DockerDocker有什么缺点Docker与AI结合,会让部署更加丝滑吗 随着互联网技术的不断发展,单机系统已经无法满足日益正常的用户量以及正常处理用户请求,这个时候就需要进行多机部署,…

k8s-helloword部署一个应用

k8s-helloword部署一个应用 快速部署一个pod命令 部署一个名为 test-nginx Pod 方式一:使用 kubectl run kubectl run test-nginx --imagenginx然后使用 kubectl get pod 查看,kubectl get pod 是查看默认名称空间下的Pod 如果想要跟详细的查看这个…

四元数学习总结(1)

导语:相比矩阵,用四元数处理3D旋转的优势是毋庸置疑的,但由于概念复杂,难于理解,一直令我摸不着头脑。最近学习更是发现在机器人、无人机、SLAM等先进领域,四元数被当成实数、整数这样的基础,所…

SQLiteOpenHelper数据库帮助器

SQLiteOpenHelper数据库帮助器是Android提供的数据库辅助工具。 1、继承SQLiteOpenHelper类,需要重写onCreate和onUpgrade两个方法 案例:实现增删改查 package com.example.databases_text;import android.app.PictureInPictureParams; import androi…

FPGA 纯逻辑arinc818 ip core

1、 符合FC-FS、FC-AV、FC-ADVB协议规范; 2、符合ARINC818协议规范; 3、支持光纤通信Class1、Class3服务; 5、可动态配置光纤端口速率,支持1.0625Gbps、2.125Gbps、3.1875Gbps、4.25Gbps可配置; 6、DDR控制接口简洁…

企业级架构及本体论最新进展

本文主要探讨了企业级架构和本体论的新兴趋势,特别是DoDAF、IDEAS、UAF和NAF的发展历程、理论基础、模型构建以及与ArchiMate和语义网技术的关联。原文: The emerging landscape of Enterprise Architecture and Ontology 导言 动机和采用的方法 关注我的人都知道我…

如何修复 System has not been booted with systemd 报错信息?

如何修复 System has not been booted with systemd 报错信息? 一、问题描述: 我们在学习 linux 系统时,使用 systemd 命令(比如 sudo systemctl status ssh),可能会遇到一个报错信息: System…

【图论】最短路(一)

发现之前做的题很乱,用小笔记把看过的博客和题目分类记录一下, 代码参考了很多佬,是标注出来的链接,若不同意我就删掉(鞠躬) 找了几张好点的,图来源图中的id和acwing 1.dijkstra 依次找到距…

KubeKey 安装 K8s

官网教程 在 Linux 上以 All-in-One 模式安装 KubeSphere 步骤 1:准备 Linux 机器 若要以 All-in-One 模式进行安装,您仅需参考以下对机器硬件和操作系统的要求准备一台主机。 硬件推荐配置 操作系统最低配置Ubuntu 16.04, 18.04, 20.04, 22.042 核 …

windows服务器安装TortoiseSVN教程

TortoiseSVN也称小乌龟~ 下载链接: https://www.liqucn.com/rj/91608.shtml 下载完成后,先安装TortoiseSVN,安装完成后,根据需要安装中文包 安装比较简单直接下一步即可,注意安装路径根据需要调整到非c盘。 安装中…

超详细的前后端实战项目(Spring系列加上vue3)前端篇+后端篇(三)(一步步实现+源码)

好了,兄弟们,继昨天的项目之后,开始继续敲前端代码,完成前端部分(今天应该能把前端大概完成开启后端部分了) 昨天补充了一下登录界面加上了文章管理界面和用户个人中心界面 完善用户个人中心界面 修改一…

新手做抖音小店应该注意哪些问题?怎么正确的做抖音小店?

大家好,我是电商花花。 我们想做好一家抖音小店,想长期持久的做好一家抖店,一定要注意下面这些问题,只有避开这些做店的坑,我们才能稳稳的出单,稳稳的赚钱。 做抖音小店不能无脑铺货,要做精细…

【正点原子Linux连载】 第四十七章 音频驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四十…