XNUMX/XNUMX 在 YouTube 上播放您的视频

最近,作为一种爱好,我一直在拍摄一位我认识的心理学家的讲座。 我编辑视频并将其发布在我的网站上。 一个月前,我想到在 YouTube 上组织这些讲座的 24/7 直播。 一种致力于个人成长的主题“电视频道”。

我知道如何进行定期广播。 但如何使其成为视频文件的播放呢? 这样它就可以 24/7 运行,非常灵活,尽可能自主,同时不以任何方式依赖我的家用计算机。 这就是我必须找出的。

XNUMX/XNUMX 在 YouTube 上播放您的视频

花了几天时间才找到解决办法。 我研究了很多论坛和各种手册,没有它们我的广播根本就不可能成功。 既然恶作剧成功了,我觉得有必要分享一下我的解决方案。 这篇文章就是这样出现的。

简而言之,最终的解决方案如下: VPS + ffmeg + bash 脚本。 在剪辑下,我描述了所采取的步骤,并讨论了在组织广播时发现的陷阱。

第 1 步 – 广播从哪里来?

一开始,需要决定广播的来源和来源。 我首先想到的是 从您的家用计算机。 将视频收集到播放列表中并开始在任何视频播放器中播放它们。 然后捕获屏幕图像并将其广播到 YouTube。 但我几乎立即拒绝了这个选择,因为...... 为了实现它,您需要保持家用计算机持续开启,这意味着即使在夜间冷却器也会产生噪音,并增加电力消耗(每月+100-150 kWh)。 事实证明,您在广播期间将无法使用家用计算机。 鼠标的任何移动都将在广播中可见。

然后我开始看向旁边 云服务。 我一直在寻找一种现成的服务,可以上传我的视频,或者插入来自 YouTube 的视频链接,然后将其全部打包到一个不间断的广播中。 但我没有找到任何合适的。 可能是我没搜好。 唯一适合该功能的是 restream.io,这是一项帮助同时向多个平台进行广播的服务。 他们似乎允许您上传自己的视频。 但这项服务的创建目的完全不同,他们预计广播只会持续几个小时。 我认为,如果通过这项服务可以组织全天候的广播,那么每个月的收入将达到数十甚至数百美元。 但我仍然想免费或以最少的资金投入来组织广播。

很明显,对于广播来说,有必要或 单独的设备 甚至一台单独的计算机。 我正在考虑像 Raspberri Pi 这样的东西。 还有什么? 他没有冷却器。 我将视频录制在闪存驱动器上,插入以太网电缆,并将其放在一个僻静的地方并进行播放。 选项。 但我既没有董事会本身,也没有使用它的经验,所以我也拒绝了这个选择。

结果,我遇到了一些讨论,他们讨论了创作 自己的服务器 广播。 这并不完全是我想要的,但我得到了主要想法 - 你可以使用服务器! 在那次讨论中,有人建议使用VPS + nginx + OBS的组合。 很明显,这种组合也适合我。 唯一让我困惑的是,我从未管理过服务器,而且在我看来,拥有自己的专用服务器既令人困惑又昂贵。 我决定了解一下租用一台最低配置的服务器需要多少钱,结果令我惊喜不已。

XNUMX/XNUMX 在 YouTube 上播放您的视频

价格以白俄罗斯卢布表示,这些只是面包屑。 要明白,8白俄罗斯卢布大约相当于3.5美元或240俄罗斯卢布。 使用一台 24/7 开启并快速上网的功能齐全的计算机一个月。 出于某种原因,这个发现让我感到非常高兴,有几天我都非常高兴地走来走去,就像一个发现了太空火箭的孩子:)

顺便说一句,我利用了 Google 提供的第一个网站的优惠来查询“VPS 租赁”。 也许还有更多的预算解决方案,但这个价格适合我,所以我没有进一步寻找。

创建服务器时,您可以选择它将运行的操作系统。 您可以在任何列出的系统上组织广播,并根据您的喜好和财务能力做出选择(对于带有 Windows 的服务器,他们要求额外付费)。 我选择了CentOS。 只是因为我以前对此缺乏经验。

XNUMX/XNUMX 在 YouTube 上播放您的视频

第 2 步 – 服务器设置

创建服务器后您需要做的第一件事是通过 SSH 连接到它。 起初我使用 PuTTy,但后来我开始使用 Secure Shell 应用程序,它在 Google Chrome 中运行。 事实证明这对我来说更方便。

然后我更改了主机名,在服务器上设置了时间同步,更新了系统,修补了 iptables...并做了很多其他事情,但并不是因为有必要。 我只是对设置服务器感兴趣,它对我有用。 当它成功时我喜欢它:)

以下是您需要采取的步骤:

  1. 连接 EPEL 存储库。
  2. 设置FTP服务器(我选择vsftp)。
  3. 安装 ffmpeg。

我不会详细给出命令;这些指示相当概念性,以便传达总体行动计划。 如果您在执行任何步骤时遇到任何困难,可以通过使用搜索引擎查询(例如“CentOS connect EPEL”或“CentOS install FTP server”)来快速解决。 在第一个链接上,您可以找到详细的分步说明。

因此,正如我之前所写,我需要 VPS + nginx + OBS 的组合。 VPS——准备好了。 但其他方面开始出现问题。 OBS 是一个广播程序,即 Open Broadcaster Software。 它仅适用于流,即例如,它从网络摄像头获取图像并进行广播。 或者屏幕录制。 或者已经正在进行的广播被重定向到另一个站点。 但我没有流,我只有一组需要制作成流的视频文件。

我开始朝这个方向挖掘并遇到了 ffmpeg。 FFmpeg 是一组免费开源库,允许您以各种格式录制、转换和流式传输数字音频和视频。

我非常惊讶 ffmpeg 能做这么多。 如果需要,它会从视频中提取声音。 如果需要,它会剪切视频片段而不重新编码。 如果需要,它会从一种格式转换为另一种格式。 还有很多很多。 如果您可以为其指定一个文件,它会将其转换为流并将其传输到 YouTube 本身。 就这样,链条就组装好了。 剩下的就是敲定细微差别。

第 3 步 – 广播设置

我们在 YouTube 上创建了一个广播。 在这个阶段我们只需要链接和广播密钥。 在下面的屏幕截图中,它们以红色突出显示。

XNUMX/XNUMX 在 YouTube 上播放您的视频

下一步 上传视频文件到服务器, 我们计划播出。 实际上,FTP仅在这个阶段需要。 如果您有其他方便的方式将文件上传到服务器,那么您就不必设置 FTP 服务器。

我们将流传输到 YouTube。 要开始广播,您需要运行具有多个属性的 ffmpeg。 这是我得到的最短命令:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%

属性解码-re – 表示文件必须转换为流。

-i – 指示应播放哪个文件。 重要的是,该命令是从视频文件本身所在的同一目录启动的。 否则,您应该指定文件的绝对链接,例如 /usr/media/lecture1.mp4.

-f – 设置输出文件格式。 就我而言,事实证明 ffmpeg 会即时将我的文件从 mp4 转换为 flv。

最后,我们在广播设置页面上标明从 YouTube 获取的数据,即您需要将数据传输到的地址以及广播密钥,以便广播专门显示在您的频道上。

如果您所做的一切正确,那么在运行此命令后,YouTube 将看到传输的流。 要开始广播,您只需点击 YouTube 本身的“开始广播”按钮即可。

第 4 步 – 添加自主权

恭喜! 现在您知道如何从视频文件开始广播。 但这对于 XNUMX/XNUMX 广播来说还不够。 重要的是,第一个视频播放完毕后,下一个视频会立即开始,并且当所有视频播放完毕后,会再次开始播放。

我提出了以下选项:创建一个 .sh 文件,在其中为每个视频文件编写一个命令,并在最后指示再次运行相同脚本的命令。 结果是这样的递归:

Команда 1... (запуск трансляции файла lecture1.mp4)
Команда 2... (запуск трансляции файла lecture2.mp4)
Команда 3... (запуск трансляции файла lecture3.mp4)
bash start.sh

是的,它确实有效。 我对自己很满意,开始试播,然后就去睡觉了。

早上,一个令人不愉快的惊喜等待着我。 事实证明,广播只持续了几分钟,当我关掉电脑时,广播几乎立即结束。 调查显示,以这种方式启动的命令是在用户登录服务器时执行的。 一旦我断开连接,我正在运行的命令就会被中断。 为了防止这种情况发生,在团队面前就足够了 bash 添加命令 nohup。 这将允许正在运行的进程运行,无论您是否存在。

脚本的最终最小版本如下所示:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
ffmpeg -re -i lecture2.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
ffmpeg -re -i lecture3.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
nohup bash start.sh $

其中start.sh是编写此脚本的文件。 并且该文件必须与视频文件位于同一目录中。

在末尾添加美元符号允许进程在后台运行,这样您就可以继续使用控制台而不中断广播。

奖金包括以下好东西:

  • 您可以手动切换文件播放。 为此,您需要“杀死”当前正在运行的 ffmpeg 进程。 此后,将自动开始播放列表中的下一个文件。
  • 可以在不停止广播的情况下将新视频添加到广播中。 只需将视频上传到服务器,在脚本中添加运行此文件的命令,然后保存即可。 就这样。 下一轮播放时,新文件将与旧文件一起播放。

第 5 步 – 自定义 ffmpeg

原则上,我们本可以就此打住。 但我想让广播对观众来说更加友好一些。

假设一个人去看了广播,开始观看,喜欢它并想从头开始观看这个讲座,但广播不允许倒带。 要从头开始观看讲座,人们需要访问我的网站并获取感兴趣的讲座的录音。 你怎么知道他对哪个讲座感兴趣? 网站上已经有 16 个讲座,并且每周都会有更多讲座。 我想,即使是我,拍摄和剪辑了所有这些讲座,也无法从随机的片段中确定这是哪一场讲座。 因此,有必要对每次讲座进行某种指定。

在编辑程序中向源视频文件添加字幕的选项不适合我。 有必要确保使用原始文件。 所以为了支持转播,我需要尽可能少的身体动作。

事实证明 ffmpeg 也可以帮助我解决这个问题。 它有一个特殊的属性 -vf,它允许将文本放置在视频上。 要将文本添加到视频中,您需要将以下片段添加到命令中:

-vf drawtext="fontfile=OpenSans.ttf:text='Лекция 13: Психология эмоций. Как создавать радость?':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670"

参数说明fontfile= – 字体文件的链接。 如果没有这个,标题将不会添加到视频中。 最简单的方法是将字体文件与视频放在同一文件夹中。 或者您需要指定文件的完整路径。

text= – 实际上,文本本身需要放置在视频之上。

fontsize= – 字体大小(以像素为单位)。

fontcolor= - 字体颜色。

borderw= – 文本周围轮廓的厚度(以像素为单位)(我有白色文本,黑色轮廓为 1 像素厚)。

bordercolor= – 轮廓颜色。

x= и y= – 文本坐标。 点 0;0 位于左上角。 我的坐标选择方式是将文本放置在左下角,视频分辨率为1280x720像素。

它看起来像这样:

XNUMX/XNUMX 在 YouTube 上播放您的视频

第 6 步 – 确定广播质量

就这样,广播准备好了。 FFmpeg广播,文件播放,广播不需要我在场。 甚至每堂课都有签名。 看起来就是这样。

但又出现了一个细微差别 - 我选择了最低服务器配置,但它没有拉起广播。 服务器配置:1 核(如 2.2 GHz)、1 GB RAM、25 GB SSD。 RAM 足够,但处理器几乎完全加载到 100%(有时甚至 102-103% :),这导致每隔几秒广播就会冻结。这不太好。

您可以简单地采用具有两个核心的更昂贵的配置,幸运的是,利用云技术,只需按几个按钮即可更改服务器配置。 但我想适应最低配置容量。 我开始研究 ffmpeg 文档,是的,那里还有一些设置可以让您调节系统上的负载。

高图像质量可以通过两种方式实现:高 CPU 负载或高传出流量。 事实证明,处理器可以承担的负载越大,所需的通道带宽就越少。 或者你不能给处理器加载太多,但这样你就需要一个具有大流量余量的宽通道。 如果处理器和传出频道/流量的大小都受到限制,那么您将不得不降低图像质量以使广播顺利进行。

我的服务器可以访问 10 Mbit/s 宽的通道。 这个宽度刚刚好。 但有流量限制 - 每月 1 TB。 因此,为了满足流量限制,我的传出流量不应超过每秒约 300 KB,即输出流的比特率不应超过2,5 Mbit/s。 顺便说一下,YouTube 建议以此比特率进行广播。

为了调节系统负载,ffmpeg 使用不同的方法。 关于这个写得很好 这里。 我最终使用了两个属性: -crf и -preset.

恒定速率因子 (CRF) – 这是一个系数,您可以通过它调整图像的质量。 CRF可以有从0到51的值,其中0是源文件的质量,51是最差的质量。 建议使用17到28之间的值,默认为23。系数为17时,视频在视觉上将与原始视频相同,但技术上不会相同。 该文档还指出,最终视频的大小根据指定的 CRF 呈指数变化,即将系数增加 6 个点将使输出视频的比特率加倍。

如果使用CRF,您可以选择传出图片的“权重”,然后使用 预设(-预设) 您可以确定处理器的负载量。 该属性有以下参数:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - 默认值
  • slow
  • slower
  • veryslow

指定的参数“越快”,处理器的负载就越高。

我首先选择了一个对于我的处理器来说基本上太难的预设,然后使用 CRF 更精细地选择了负载。 就我而言,预设有效 fast,对于 cRF,我选择了值 24。

结论

就这样。 启动广播的最终命令是这样的:

ffmpeg -re -i lecture1.mp4 -vf drawtext="fontfile=OpenSans.ttf:text='Лекция 1: Жонглирование картинами мира':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670" -c:v libx264 -preset fast -crf 24 -g 3 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%

这里只剩下两点没有描述:

1) -c:v libx264 – 指定用于处理源文件的特定编解码器。
2) -g 3 – 关键帧数量的明确指示。 在这种情况下,指定每第三帧应该是关键帧。 标准值是 5 或 8,但 YouTube 发誓并要求至少为 3。

您可以看到广播的质量如何 这里.

服务器上的负载如下:

XNUMX/XNUMX 在 YouTube 上播放您的视频

XNUMX/XNUMX 在 YouTube 上播放您的视频

根据监控数据,可以明显看出处理器负载在 70% 到 95% 之间,并且在这一周内广播从未达到 100%。 这意味着有了这些设置处理器就足够了。

通过加载磁盘,我可以说它几乎没有加载,普通硬盘应该足以用于广播。

但传出的流量让我担心。 事实证明,我的传出流的速度范围为每秒 450 到 650 KB。 一个月后,这个数字将达到约 1,8 TB。 您可能需要购买额外的流量或切换到具有两个核心的配置,因为...... 我不想降低图片质量。

***

因此,我想说,从头开始设置这样的广播大约需要 1-2 小时。 而且,将视频上传到服务器会花费大部分时间。

推出这样的广播并不能证明自己是一种营销工具。 也许,如果我们增加观看次数,以便 YouTube 算法接收该广播并开始主动在推荐中显示它,那么事情就会成功。 就我而言,连续播放 16 天,观看次数为 58 次。

那没问题。 该广播与我网站的主页和谐一致。 这让我有机会快速形成自己对讲师和讲座本身的看法。

一会儿。 重要的是广播不能侵犯任何人的版权,否则将会被屏蔽。 我对我的广播很平静,因为...... 我特地选择了免费使用的音乐插入,内容的作者坐在附近的一台电脑上,并且完全不反对我使用她的内容:)

但是,如果您在广播中的某处背景中播放收音机,或者您在编辑过程中使用了自己喜欢的曲目,或者从流行音乐视频、电视剧或电影中截取了视频序列,那么您的广播就会面临风险。 同样重要的是,广播至少携带最小的语义负载,否则它可能会被视为垃圾邮件而被阻止。

***

这就是我的全部。 我希望本手册能够为某人提供良好的服务。 好吧,如果您有什么要添加、写的,我将很乐意阅读本文的添加和澄清。

来源: habr.com

添加评论