当前位置: 首页 > news >正文

使用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

在这里插入图片描述

相关文章:

使用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/2395…...

汽车防抱死制动系统ABS的单片机程序Proteus仿真设计

次设计对汽车防抱死系统进行简单的设计,针对车速、轮速两个信号进行分析,并根据最佳滑移率计算。采用对比实时滑移率对比分析,ECU控制制动器进行制动力调节使滑移率在制动过程处于最佳范围,保证系统具有良好制动性能。 汽车的制动液压调节器主要包含以下几个部件:调压电磁…...

IOS开发者证书快捷申请

App Uploader 在进行iOS应用开发中,可以借助appuploader辅助工具进行证书制作、上传和安装测试等操作。首先,您需要访问官方网站获取最新版本的appuploader。最新版本已经优化了与Apple账号的登录流程,无需支付688元,并提供了Windows版和Mac版供用户选择。下载完成后,解压…...

python 火焰检测

在日常生活,总是离不开火,有时候我们需要预防火灾发生,但是我们又不可能一直盯着,这时候我们就需要一款程序帮我们盯着,一旦发生火灾从而告知我们,今天就带大家编写这么一款应用。 安装需要的库 pip install opencv-python 代码实现 import cv2 # Library for…...

栈——顺序存储

#include<stdio.h> #define MaxSize 10 //栈的所有操作时间复杂度都是O(1) //定义 typedef struct{int data[MaxSize];int top; //栈顶指针&#xff0c;永远指向栈顶元素 }SqStack;//初始化&#xff0c;使栈顶指针指向-1 void InitStack(SqStack &S){S.top-1; }…...

军队仓库管理系统|DW-S301系统特点

部队仓库管理系统DW-S301系统通过数据采集、互联网和物联网技术&#xff0c;实现数字化智能管控&#xff0c;以提高军用物资的仓储准确率和流转率&#xff0c;缩短周转时间&#xff0c;降低库存成本&#xff0c;也有助于消除生产过程中的不确定性。 系统功能&#xff1a;通过部…...

MySQL和MongoDB数据库的区别

MySQL和MongoDB数据库的区别 随着大数据和云计算技术的兴起&#xff0c;数据库的选择成为开发者和架构师必须面对的重要决策。MySQL和MongoDB作为关系型数据库和非关系型数据库的代表&#xff0c;在各自领域都有着广泛的应用。本文将从多方面详细比较MySQL和MongoDB&#xff0…...

类脑计算和量子计算、人工智能的关系

According to www.iAsk.ai Ask Ai Search Engine: 类脑计算、量子计算和人工智能是三个不同但相关的领域。它们在不同层面上探索和利用了不同的计算模型和技术&#xff0c;但都旨在推动计算能力的发展和创新。 类脑计算是一种受到人脑神经系统启发的计算模型。它试图通过模拟…...

Qt5 互动地图,实现无人机地面站效果

一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库&#xff0c;可选择谷歌地图&#xff0c;必应地图&#xff0c; 雅虎地图&#xff0c;GIS等。可直接使用源码&#xff0c;也可以编译生成库进行调用。实现效果…...

【文末附gpt升级方案】TikTok Symphony AI套件:智能视频制作的新篇章

TikTok Symphony AI套件&#xff1a;智能视频制作的新篇章 摘要 随着短视频平台的兴起&#xff0c;视频内容的创作与制作已成为品牌方吸引用户、传递信息的重要手段。TikTok作为全球领先的短视频平台&#xff0c;近日宣布推出Symphony AI套件&#xff0c;旨在通过人工智能技术…...

面试回答——有高并发、高性能、高可用系统架构设计实践以及性能调优经验

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…...

rocketmq初识

package com.ldj.rocketmq.producer;import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message;import java.nio.charset.StandardCharsets;/*** User: ldj* Date: 2024/3/26* Time: 2:26* Description: 单向消息生产…...

php 使用phpoffice导出导出excel

荆轲刺秦王 在PHP中&#xff0c;可以使用 PhpSpreadsheet 库来创建和导出Excel文件。PhpSpreadsheet 是一个纯PHP 编写的组件库&#xff0c;它使用现代 PHP 写法&#xff0c;代码质量和性能比 PHPExcel 高不少&#xff0c;完全可以替代PHPExcel&#xff08;PHPExcel已不再维护…...

安装docker版elasticsearch和kibana

本文将介绍用docker的方式安装elasticsearch和kibana&#xff0c;并用浏览器访问elasticsearch。这里的elasticsearch主要给测试环境使用&#xff0c;因此不会设置https和密码。kibana是elasticsearch的前端&#xff0c;可以用来访问elasticsearch&#xff0c;展示数据图表、搜…...

大语言模型的工程技巧(四)——梯度检查点

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文将讨论如何利用梯度检查点算法来减少模型在训练时候&#xff08;更准确地说是运行反向传播算法时&#xff09;的内存开支。…...

批量复制文件智能删除已复制,轻松管理文件新体验!让您的文件整理更高效无忧

在信息爆炸的时代&#xff0c;文件管理无疑成为我们日常生活和工作中不可或缺的一部分。面对堆积如山的文件&#xff0c;我们时常陷入无尽的复制、粘贴、删除循环中&#xff0c;不仅耗时耗力&#xff0c;还容易出错。但今天&#xff0c;我要向您推荐一款颠覆传统的文件管理工具…...

从零训练yolov8

1.收集数据 2.数据标注 pip install labelimg3.划分数据集 0.2的验证机0.8的训练集 import os from shutil import copyfile from sys import exit import randomsource r"D:\Data\imgs\screenc" \\ target_train r"D:\Data\imgs\datasets\mydata\images\t…...

民国漫画杂志《时代漫画》第14期.PDF

时代漫画14.PDF: https://url03.ctfile.com/f/1779803-1247458399-6732ac?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;...

maven-依赖管理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Maven BOM二、使用三、SpringBoot的依赖管理 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 依赖管理能带来啥&#xff1a; 避免…...

Java之设计模式

概述 设计模式就是经过我们开发人员通过长时间的开发实践得出的一种开发模式,目的就是在开发过程中降低代码耦合度,提高代码可复用性/扩展/维护。目前设计模式可以分为创建型模式、行为型模式、结构型模式,一共包括23种设计模式。本文列举了实际项目中使用到的设计模式,包括单…...

如何永久保存微信聊天记录并生成个人数据报告?WeChatMsg让数据掌握在自己手中

如何永久保存微信聊天记录并生成个人数据报告&#xff1f;WeChatMsg让数据掌握在自己手中 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/Gi…...

政务帮办新范式:基于检索增强与多智能体协同的智能系统实践

一、引言:政务帮办的挑战与智能化需求 在数字化转型浪潮中,政务服务正从传统的人工办理向智能化帮办演进。然而,当前政务帮办系统普遍存在三类典型问题: 1.1 现有三类系统的局限性 基于预定义规则的传统流程系统 优势:处理标准化业务(如社保基数核定、公积金提取)时表…...

泛型:像“填空”一样写类型,让你的代码从“复制粘贴”中解放

你是不是遇到过这种场景&#xff1a;写了一个函数&#xff0c;处理数字的版本写一遍&#xff0c;处理字符串的版本再写一遍&#xff0c;处理数组的又写一遍……最后代码里全是长得差不多的“双胞胎”。今天我们来学TypeScript的泛型——一个能让你写一次、处处用的“类型模板”…...

YOLOv12部署实战:ONNX、TensorRT、OpenVINO三大引擎对比

YOLOv12部署实战&#xff1a;ONNX、TensorRT、OpenVINO三大引擎对比 【免费下载链接】yolov12 [NeurIPS 2025] YOLOv12: Attention-Centric Real-Time Object Detectors 项目地址: https://gitcode.com/gh_mirrors/yo/yolov12 YOLOv12作为NeurIPS 2025最新推出的注意力中…...

Rack错误处理终极指南:ShowExceptions中间件详解与实战技巧

Rack错误处理终极指南&#xff1a;ShowExceptions中间件详解与实战技巧 【免费下载链接】rack A modular Ruby web server interface. 项目地址: https://gitcode.com/gh_mirrors/ra/rack Rack是Ruby生态系统中最核心的Web服务器接口&#xff0c;为Ruby开发者提供了模块…...

2026大模型变局:DeepSeek V4旗舰测试引爆行业,实测实在Agent如何打通企业落地的“最后一公里”

摘要&#xff1a; 2026年4月&#xff0c;全球人工智能领域再次因DeepSeek的新动作而沸腾。随着DeepSeek V4旗舰模型开启分层测试&#xff0c;大模型正加速从“实验室对话框”向“企业生产力工具”跃迁。然而&#xff0c;面对企业内部错综复杂的系统围墙、无API的旧版软件以及严…...

【vLLM】引擎核心探秘:从Executor到Worker的模型加载链路剖析

1. vLLM引擎架构概览 vLLM作为当前大模型推理领域的高性能解决方案&#xff0c;其核心设计采用了多进程分布式架构来应对百亿参数模型的加载挑战。整个系统像精密的钟表机构&#xff0c;由EngineCore作为主发条&#xff0c;通过Executor协调多个Worker进程完成实际工作。这种设…...

3种跨平台文件系统解决方案:打破设备壁垒的存储策略与实践指南

3种跨平台文件系统解决方案&#xff1a;打破设备壁垒的存储策略与实践指南 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and manag…...

高性能客服系统技术内幕:通过 SpinWait 自旋等待结构体提升高频消息分发性能勘

1. 智能软件工程的范式转移&#xff1a;从库集成到原生框架演进 在生成式人工智能&#xff08;Generative AI&#xff09;从单纯的文本生成向具备自主规划与执行能力的“代理化&#xff08;Agentic&#xff09;”系统跨越的过程中&#xff0c;.NET 生态系统正在经历一场自该平台…...

Carsim与Simulink联合仿真模型——AEB的cpar文件、simulink模型文件及...

Carsim与Simulink联合仿真模型——AEB 提供cpar文件&#xff0c;simulink模型文件&#xff0c;模型搭建过程文档在汽车开发领域&#xff0c;安全系统始终占据着举足轻重的地位。其中&#xff0c;主动安全辅助系统&#xff08;AEB&#xff09;作为现代汽车的安全核心&#xff0c…...