Предавайте вашите видеоклипове XNUMX/XNUMX в YouTube

Напоследък като хоби снимам лекции на приятел психолог. Монтирам кадрите и ги публикувам на сайта си. Преди месец ми хрумна идеята да организирам денонощно излъчване на тези лекции в YouTube 24/7. Нещо като тематичен "телевизионен канал", посветен на личностното израстване.

Знам как да направя нормално предаване. Но как да го направим така, че да е излъчване на видео файлове? Така че да работи 24/7, да е гъвкав, максимално автономен и в същото време да не зависи по никакъв начин от домашния ми компютър. Това трябваше да разбера.

Предавайте вашите видеоклипове XNUMX/XNUMX в YouTube

Отне няколко дни, за да се намери решение. Проучих много форуми и различни ръководства, без които моето предаване просто нямаше да се случи. И сега, след като шегата проработи, изпитвам нужда да споделя своето решение. Така се появи тази статия.

Накратко крайното решение е следното: VPS + ffmeg + bash скрипт. Под съкращенията описвам предприетите стъпки и говоря за „подводните камъни“, които бяха открити по време на организацията на предаването.

Стъпка 1 - Откъде ще тръгне излъчването?

В самото начало беше необходимо да се реши откъде ще бъде излъчването, къде ще бъде неговият източник. Първото нещо, което ми дойде наум - от домашен компютър. Съберете видеоклипове в плейлист и започнете да ги възпроизвеждате във всеки видео плейър. След това заснемете изображението от екрана и го излъчете в YouTube. Но почти веднага отхвърлих тази опция. за да го приложите, трябва да поддържате домашния си компютър постоянно включен, а това е шум от охладители дори през нощта и повишена консумация на електроенергия (+ 100-150 kWh всеки месец). И се оказва, че ще бъде невъзможно да използвате домашния компютър по време на предаването. всяко движение на мишката ще бъде видимо в излъчването.

Тогава започнах да гледам настрани облачни услуги. Търсих готова услуга, в която да качвам моите видеа или например да вмъквам линкове към видеа от YouTube и всичко това да е събрано в едно нон-стоп предаване. Но не намерих нищо подходящо. Може би не съм търсил добре. Единственото нещо, което пасва на сметката, е restream.io, услуга, която ви помага да предавате поточно към множество платформи едновременно. Изглежда, че могат да качват видеоклиповете си. Но тази услуга е създадена за съвсем различна цел и те очакват излъчването да продължи само няколко часа. Мисля, че ако чрез тази услуга беше възможно да се организира денонощно излъчване, тогава това щеше да стреля в десетки или дори стотици долари на месец. Но все пак исках да организирам предаването или безплатно, или с минимални финансови инвестиции.

Стана ясно, че под предаването трябва или отделно устройство Или дори отделен компютър. Мислех в посока на нещо като Raspberry Pi. И какво? Той няма охладител. Записах видеото на USB флаш устройство, включих Ethernet кабел и го оставих да лежи някъде на уединено място, излъчва. опция. Но нямах самата дъска, нито опит в работата с нея, така че отказах и тази опция.

В резултат на това попаднах на определена дискусия, където те обсъждаха създаването собствен сървър излъчвания. Не беше точно това, което търсих, но разбрах основната идея - можете да използвате сървъра! В тази дискусия беше предложено да се използва куп 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 FTP сървър инсталация“. И на първите връзки можете да намерите подробни инструкции стъпка по стъпка.

И така, както писах преди, имах нужда от куп 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 - Добавете автономия

Честито! Сега знаете как да започнете да излъчвате от видео файл. Но това не е достатъчно за денонощно излъчване. Важно е след края на възпроизвеждането на първото видео веднага да започне следващото, а когато се покажат всички видеа, възпроизвеждането да започне отново.

Измислих следната опция: създаване на .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 гигабайт RAM, 25 GB SSD. Имаше достатъчно RAM, но процесорът почти напълно се зареди на 100% (а понякога дори на 102-103% 🙂 Това доведе до замръзване на излъчването на всеки няколко секунди. Грозно.

Можете просто да вземете по-скъпа конфигурация с две ядра, за щастие с облачните технологии промяната на конфигурацията на сървъра става чрез натискане на няколко бутона. Но исках да се побера в капацитета на минималната конфигурация. Започнах да изучавам документацията на ffmpeg и да, има и настройки, които ви позволяват да регулирате натоварването на системата.

Високо качество на изображението може да се постигне по два начина: или чрез високо натоварване на процесора, или чрез висок изходящ трафик. Оказва се, че колкото повече натоварване може да поеме процесорът, толкова по-малка честотна лента ще е необходима. Или не можете да натоварите силно процесора, но тогава ще ви трябва широк канал с голям запас от трафик. Ако има ограничения както за процесора, така и за размера на изходящия канал / трафик, тогава ще трябва да намалите качеството на картината, така че излъчването да върви гладко.

Моят сървър има наличен 10 Mbps канал. Тази ширина е права с марж. Но има ограничение на трафика - 1 TB на месец. Следователно, за да отговаря на ограниченията за трафик, изходящият ми поток не трябва да надвишава ~ 300 Kb в секунда, т.е. битрейтът на изходящия поток трябва да бъде не повече от 2,5 Mbps. 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%. Така че с такива настройки процесорът е достатъчен.

Като зареждам диска, мога да кажа, че почти не се зарежда и обикновен HDD трябва да е достатъчен за излъчване.

Но количеството изходящ трафик ме притеснява. Оказва се, че изходящият ми поток варира от 450 до 650 KB в секунда. За месец ще бъде около 1,8 терабайта. Може да се наложи да купите повече трафик или все пак да преминете към конфигурация с две ядра. Не искам да намалявам качеството на картината.

***

В резултат на това ще кажа, че настройката на такова излъчване от нулата отнема около 1-2 часа. И по-голямата част от времето ще отнеме качването на видеоклипа на сървъра.

Като маркетингов инструмент стартирането на такова предаване не се оправда. Може би, ако увеличите гледанията, така че алгоритмите на YouTube да уловят това излъчване и да започнат активно да го показват в препоръки, тогава нещо ще се получи. При мен за 16 дни непрекъснато излъчване е гледано 58 пъти.

Това е добре. Излъчването хармонично се вписва на главната страница на моя сайт. Получих нещо като възможност бързо да си съставя мнение за лектора и самите лекции.

И един момент. Важно е предаването да не нарушава нечии авторски права, в противен случай ще бъде блокирано. Спокоен съм за предаването си. Специално избрах музикални вложки с безплатно използване, а авторът на съдържанието седи на близкия компютър и няма нищо против да използвам нейното съдържание 🙂

Но ако имате радио, което свири някъде на заден план във вашето предаване, или сте използвали любимата си песен по време на редактиране, или сте взели видео поредица от популярен музикален видеоклип, сериал или филм, тогава вашето излъчване е изложено на риск. Също така е важно излъчването да носи поне минимално семантично натоварване, в противен случай може да бъде блокирано като спам.

***

Това е всичко за мен. Надявам се това ръководство да послужи добре на някого. Е, ако имате какво да добавите - пишете, ще се радвам да прочета допълнения и пояснения към статията.

Източник: www.habr.com

Добавяне на нов коментар