Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

Son zamanlarda hobi olarak tanıdığım bir psikoloğun derslerini filme alıyorum. Görüntüleri düzenleyip web sitemde yayınlıyorum. Bir ay önce bu derslerin YouTube'da 24/7 yayınlanmasını organize etme fikri aklıma geldi. Kişisel gelişime adanmış bir tür tematik “TV kanalı”.

Düzenli yayın yapmayı biliyorum. Peki bunu video dosyalarının yayını olacak şekilde nasıl yapabiliriz? Böylece 24/7 çalışır, esnektir, mümkün olduğunca özerktir ve aynı zamanda hiçbir şekilde ev bilgisayarıma bağlı değildir. Öğrenmem gereken şey buydu.

Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

Bir çözüm bulmak birkaç gün sürdü. Pek çok forum ve çeşitli kılavuzlar üzerinde çalıştım; bunlar olmasa yayınımın işe yarayamazdı. Artık şaka başarılı olduğuna göre çözümümü paylaşma ihtiyacı hissediyorum. Bu makale bu şekilde ortaya çıktı.

Kısaca nihai çözüm şuydu: VPS + ffmeg + bash betiği. Kesimin altında atılan adımları anlatıyorum ve yayını düzenlerken keşfedilen tuzaklardan bahsediyorum.

Adım 1 – yayın nereden gelecek?

Başlangıçta yayının nereden olacağına, kaynağının nerede olacağına karar vermek gerekiyordu. Aklıma ilk gelen şey şu oldu ev bilgisayarınızdan. Videoları bir oynatma listesine toplayın ve bunları herhangi bir video oynatıcıda oynatmaya başlayın. Ardından ekran görüntüsünü yakalayın ve YouTube'da yayınlayın. Ama bu seçeneği neredeyse anında reddettim çünkü... Bunu uygulamak için evdeki bilgisayarınızı sürekli açık tutmanız gerekiyor, bu da geceleri bile soğutuculardan ses gelmesi ve elektrik tüketiminin artması (her ay +100-150 kWh) anlamına geliyor. Ve yayın sırasında ev bilgisayarınızı kullanamayacağınız ortaya çıktı. yayında farenin herhangi bir hareketi görülecektir.

Sonra yan tarafa bakmaya başladım bulut hizmetleri. Videolarımı yükleyebileceğim veya örneğin YouTube'daki videolara bağlantılar ekleyebileceğim hazır bir hizmet arıyordum ve bunların hepsi kesintisiz tek bir yayında paketlenecekti. Ama uygun bir şey bulamadım. Belki de iyi aramadım. İşlevselliğe uyan tek şey, aynı anda birden fazla platforma yayın yapılmasına yardımcı olan bir hizmet olan restream.io'dur. Kendi videolarınızı yüklemenize izin veriyor gibi görünüyorlar. Ancak bu hizmet tamamen farklı amaçlar için oluşturulmuş ve yayının yalnızca birkaç saat sürmesini bekliyorlar. Bu hizmet aracılığıyla XNUMX saat yayın düzenlemek mümkün olsaydı, bunun ayda onlarca, hatta yüzlerce dolara çıkacağını düşünüyorum. Ama yine de yayını ya ücretsiz ya da minimum finansal yatırımla düzenlemek istedim.

Yayın için gerekli olduğu veya ayrı cihaz hatta ayrı bir bilgisayar. Raspberri Pi gibi bir şey düşünüyordum. Ve ne? Soğutucusu yok. Videoyu bir flash sürücüye kaydettim, Ethernet kablosunu taktım ve tenha bir yerde bırakıp yayınladım. Seçenek. Ancak ne yönetim kurulunun kendisi ne de onunla çalışma deneyimim vardı, bu yüzden bu seçeneği de reddettim.

Sonuç olarak yaratılış konusunu tartıştıkları bir tartışmaya rastladım. kendi sunucusu yayınlar. Tam olarak aradığım şey bu değildi ama ana fikri buldum; bir sunucu kullanabilirsiniz! Bu tartışmada VPS + nginx + OBS kombinasyonunun kullanılması önerildi. Bu kombinasyonun bana da yakışabileceği belli oldu. Kafamı karıştıran tek şey, hiçbir zaman bir sunucuyu yönetmemiş olmamdı ve bana kendi özel sunucuma sahip olmanın kafa karıştırıcı ve pahalı görünmesiydi. Minimum konfigürasyona sahip bir sunucu kiralamanın ne kadara mal olacağını öğrenmeye karar verdim ve hoş bir sürpriz oldu.

Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

Fiyatlar Belarus rublesi cinsinden belirtilmiştir ve bunlar sadece kırıntıdır. Anlamak için 8 Belarus rublesi yaklaşık 3.5 dolar veya 240 Rus rublesidir. Bir ay boyunca 24/7 açık ve hızlı internet erişimine sahip tam teşekküllü bir bilgisayar kullanmak. Nedense bu keşif benim için çok keyifli oldu ve birkaç gün boyunca uzay roketlerini keşfeden bir çocuk gibi müthiş mutlu dolaştım :)

Bu arada “VPS kiralama” sorgusu için Google'ın bana sunduğu ilk sitenin teklifinden yararlandım. Belki daha da fazla bütçe çözümü var ama bu fiyat bana uygundu ve daha fazla bakmadım.

Bir sunucu oluştururken altında çalışacağı işletim sistemini seçebilirsiniz. Listelenen sistemlerden herhangi birinde yayın düzenleyebilir ve tercihlerinize ve finansal yeteneklerinize göre seçim yapabilirsiniz (Windows'lu bir sunucu için ek ücret talep ederler). CentOS'u seçtim. Çünkü daha önce bu konuda çok az deneyimim vardı.

Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

Adım 2 – sunucu kurulumu

Bir sunucu oluşturduktan sonra ihtiyacınız olan ilk şey, sunucuya SSH aracılığıyla bağlanmaktır. İlk başta PuTTy kullandım ancak daha sonra Google Chrome'da çalışan Secure Shell Uygulamasını kullanmaya başladım. Benim için daha uygun olduğu ortaya çıktı.

Daha sonra ana bilgisayar adını değiştirdim, sunucuda zaman senkronizasyonunu ayarladım, sistemi güncelledim, iptables ile uğraştım... ve bir sürü başka şey yaptım, ama gerekli olduğu için değil. Ben sadece sunucuyu kurmakla ilgileniyordum ve bu benim için işe yaradı. İşe yaradığında bunu seviyorum :)

Atmanız gereken adımlar şunlardır:

  1. EPEL deposunu bağlayın.
  2. Bir FTP sunucusu kurun (vsftp'yi seçtim).
  3. Ffmpeg'i yükleyin.

Komutları ayrıntılı olarak vermeyeceğim; bu talimatlar genel eylem planını aktarmak açısından oldukça kavramsaldır. Adımlardan herhangi birinde zorluk yaşarsanız, "CentOS connect EPEL" veya "CentOS kurulum FTP sunucusu" gibi bir arama motoru sorgusu kullanılarak hızlı bir şekilde çözülebilir. Ve ilk bağlantılarda ayrıntılı adım adım talimatlar bulabilirsiniz.

Bu yüzden daha önce de yazdığım gibi VPS + nginx + OBS kombinasyonuna ihtiyacım vardı. VPS – hazır. Ancak başka noktalarda da sorular ortaya çıkmaya başladı. OBS bir yayın programıdır, Open Broadcaster Yazılımıdır. Ve yalnızca akışlarla çalışır, yani. örneğin web kamerasından bir görüntü alıp yayınlıyor. Veya ekran kaydı. Veya halihazırda devam eden bir yayın başka bir siteye yönlendiriliyor. Ancak bir akışım yok, yalnızca bir akışa dönüştürülmesi gereken bir dizi video dosyam var.

Bu yönde kazmaya başladım ve ffmpeg ile karşılaştım. FFmpeg, çeşitli formatlarda dijital ses ve videoyu kaydetmenize, dönüştürmenize ve yayınlamanıza olanak tanıyan bir dizi ücretsiz ve açık kaynak kitaplıktır.

Ve ffmpeg'in bu kadar çok şey yapabileceğine çok şaşırdım. İsterseniz videodan sesi çıkaracaktır. İsterseniz videonun bir kısmını yeniden kodlamadan keser. İsterseniz bir formattan diğerine dönüşecektir. Ve çok daha fazlası. Ona bir dosya belirtebileceğiniz noktaya kadar, onu bir akışa dönüştürecek ve YouTube'un kendisine iletecektir. İşte bu, zincir monte edildi. Geriye kalan tek şey nüansları tamamlamak.

3. Adım – yayın kurulumu

YouTube'da bir yayın oluşturuyoruz. Bu aşamada sadece linke ve yayın anahtarına ihtiyacımız var. Aşağıdaki ekran görüntüsünde kırmızı renkle vurgulanmıştır.

Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

İleri video dosyalarını sunucuya yükleyin, yayınlamayı planlıyoruz. Aslında FTP'ye sadece bu aşama için ihtiyaç duyuluyor. Dosyaları sunucuya yüklemek için başka bir uygun yolunuz varsa, bir FTP sunucusu kurmanıza gerek yoktur.

Akışı YouTube'a aktarıyoruz. Yayına başlamak için ffmpeg'i çeşitli özelliklerle çalıştırmanız gerekir. Aldığım en kısa komut şuna benziyor:

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

Özellik kod çözme-re – dosyanın bir akışa dönüştürülmesi gerektiğini belirtir.

-i – hangi dosyanın oynatılması gerektiğini gösterir. Komutun, video dosyasının bulunduğu dizinden başlatılması önemlidir. Aksi takdirde, dosyaya aşağıdaki gibi mutlak bir bağlantı belirtmelisiniz: /usr/media/lecture1.mp4.

-f – çıktı dosyası formatını ayarlar. Benim durumumda, ffmpeg'in dosyamı anında mp4'ten flv'ye dönüştürdüğü ortaya çıktı.

Ve sonunda YouTube'dan aldığımız verileri yayın ayarları sayfasında belirtiyoruz, yani. yayının kanalınızda özel olarak görüntülenmesi için veri aktarmanız gereken adres ve yayın anahtarı.

Her şeyi doğru yaptıysanız, bu komutu çalıştırdıktan sonra YouTube iletilen akışı görecektir. Yayını başlatmak için YouTube'un kendisinde bulunan "Yayını Başlat" butonuna tıklamanız yeterli.

4. Adım – özerklik ekleyin

Tebrikler! Artık bir video dosyasından yayına nasıl başlayacağınızı biliyorsunuz. Ancak XNUMX/XNUMX yayın için bu yeterli değil. İlk videonun oynatılması bittikten sonra bir sonrakinin hemen başlaması ve tüm videolar gösterildiğinde oynatmanın yeniden başlaması önemlidir.

Şu seçeneği buldum: Her video dosyası için bir komut yazdığım ve en sonunda aynı betiği tekrar çalıştırmak için bir komut belirttiğim bir .sh dosyası oluşturun. Sonuç şöyle bir özyinelemedir:

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

Ve evet işe yaradı. Kendimden memnun olarak bir test yayını başlattım ve yattım.

Sabah beni hoş olmayan bir sürpriz bekliyordu. Yayının sadece birkaç dakika sürdüğü ve bilgisayarımı kapattığımda hemen bittiği ortaya çıktı. Araştırma, bu şekilde başlatılan komutların, kullanıcı sunucuda oturum açtığında yürütüldüğünü gösterdi. Bağlantıyı keser kesmez çalıştırdığım komutlar kesintiye uğradı. Bunun olmasını önlemek için takımın önünde yeterli bash komutu ekle nohup. Bu, çalışan işlemin sizin varlığınız ne olursa olsun yürütülmesine olanak tanır.

Komut dosyasının son minimal sürümü şuna benzer:

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 bu betiğin yazıldığı dosyadır. Ve bu dosyanın video dosyalarıyla aynı dizinde bulunması gerekir.

Sonuna dolar işareti eklemek, işlemin arka planda çalışmasına olanak tanır, böylece yayını kesmeden konsolu kullanmaya devam edebilirsiniz.

Bonuslar aşağıdaki güzellikleri içeriyordu:

  • Dosya oynatmayı manuel olarak değiştirebilirsiniz. Bunu yapmak için şu anda çalışan ffmpeg işlemini "sonlandırmanız" gerekir. Bundan sonra listedeki bir sonraki dosyanın oynatılması otomatik olarak başlayacaktır.
  • Yayın durdurulmadan yayına yeni videolar eklenebilir. Sadece videoyu sunucuya yükleyin, bu dosyayı komut dosyasında çalıştırmak için bir komut ekleyin ve kaydedin. Bu kadar. Bir sonraki oynatma turunda yeni dosya eski dosyalarla birlikte yayınlanacaktır.

Adım 5 – ffmpeg'i özelleştirin

Prensip olarak orada durabilirdik. Ancak yayını izleyiciler için biraz daha samimi hale getirmek istedim.

Diyelim ki bir kişi yayına gitti, izlemeye başladı, beğendi ve bu dersi baştan izlemek istedi ancak yayın geri sarmaya izin vermiyor. Bir dersi baştan izlemek için kişinin web siteme gitmesi ve ilgili dersin kaydını alması gerekir. Hangi dersin onu ilgilendirdiğini nasıl anlarsınız? Sitede halihazırda 16 ders var ve her hafta bunlardan yalnızca daha fazlası ekleniyor. Sanırım tüm bu dersleri filme alan ve kurgulayan ben bile rastgele bir parçadan bunun hangi ders olduğunu belirleyemeyeceğim. Bu nedenle her dersin bir şekilde belirlenmiş olması gerekir.

Düzenleme programında kaynak video dosyalarına altyazı ekleme seçeneği bana pek uymadı. Orijinal dosyaların kullanıldığından emin olmak gerekiyordu. Böylece yayını desteklemek benden mümkün olduğunca az vücut hareketi gerektiriyor.

Ffmpeg'in bu konuda bana da yardımcı olabileceği ortaya çıktı. Özel bir özelliği var -vf, metnin videonun üzerine yerleştirilmesine olanak tanır. Bir videoya metin eklemek için komuta aşağıdaki parçayı eklemeniz gerekir:

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

Parametrelerin açıklamasıfontfile= – yazı tipi dosyasına bağlantı. Bu olmadan altyazı videoya eklenmeyecektir. En kolay yol, yazı tipi dosyasını videoyla aynı klasöre koymaktır. Veya dosyanın tam yolunu belirtmeniz gerekecektir.

text= – aslında videonun üstüne yerleştirilmesi gereken metnin kendisi.

fontsize= – piksel cinsinden yazı tipi boyutu.

fontcolor= - yazı rengi.

borderw= – metnin etrafındaki çerçevenin piksel cinsinden kalınlığı (1 piksel kalınlığında siyah çerçeveli beyaz metnim var).

bordercolor= – anahat rengi.

x= и y= – metin koordinatları. Nokta 0;0 sol üst köşede bulunur. Koordinatlarım, metin 1280x720 piksel video çözünürlüğünde sol alt köşeye yerleştirilecek şekilde seçiliyor.

Şuna benziyor:

Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

Adım 6 – yayının kalitesini belirleyin

İşte bu, yayın hazır. FFmpeg yayınları, dosyalar oynatılır, yayın için varlığıma gerek yoktur. Hatta her ders imzalıdır. Görünüşe göre bu kadar.

Ancak bir nüans daha ortaya çıktı - minimum sunucu yapılandırmasını seçtim ve yayını başlatmadı. Sunucu yapılandırması: 1 çekirdek (2.2 GHz gibi), 1 gigabayt RAM, 25 GB SSD. Yeterli RAM vardı, ancak işlemci neredeyse tamamen %100 (hatta bazen %102-103) yüklüydü. Bu da yayının birkaç saniyede bir donmasına yol açtı. Hoş değil.

İki çekirdekli daha pahalı bir konfigürasyonu kolayca alabilirsiniz, neyse ki bulut teknolojilerinde sunucu konfigürasyonunun değiştirilmesi birkaç düğmeye basılarak gerçekleşir. Ancak minimum konfigürasyon kapasitesine sığdırmak istedim. Ffmpeg belgelerini incelemeye başladım ve evet, sistemdeki yükü düzenlemenize olanak tanıyan ayarlar da var.

Yüksek görüntü kalitesi iki şekilde elde edilebilir: yüksek CPU yükü veya yüksek giden trafik. İşlemci ne kadar fazla yük alabilirse, kanal bant genişliğinin o kadar az gerekli olacağı ortaya çıktı. Veya işlemciyi çok fazla yükleyemezsiniz, ancak o zaman geniş trafik boşluğuna sahip geniş bir kanala ihtiyacınız olacaktır. Hem işlemci hem de giden kanalın/trafiğin boyutunda kısıtlamalar varsa, yayının sorunsuz ilerlemesi için görüntü kalitesini düşürmeniz gerekecektir.

Sunucumun 10 Mbit/s genişliğinde bir kanala erişimi var. Bu genişlik tam olarak doğru. Ancak trafik sınırı var - ayda 1 TB. Bu nedenle, trafik kısıtlamalarını karşılamak için giden akışım saniyede ~300 KB'yi geçmemelidir; Giden akışın bit hızı 2,5 Mbit/s'den fazla olmamalıdır. Bu arada YouTube bu bit hızında yayın yapılmasını öneriyor.

Sistemdeki yükü düzenlemek için ffmpeg farklı yaklaşımlar kullanır. Bu konuda iyi yazılmış burada. Sonunda iki özelliği kullandım: -crf и -preset.

Sabit Oran Faktörü (CRF) – bu, resmin kalitesini ayarlayabileceğiniz bir katsayıdır. CRF, 0'dan 51'e kadar değerlere sahip olabilir; burada 0, kaynak dosyanın kalitesidir, 51 ise mümkün olan en kötü kalitedir. 17'den 28'e kadar değerlerin kullanılması tavsiye edilir, varsayılan 23'tür. 17 katsayısı ile video görsel olarak orijinaliyle aynı olacaktır ancak teknik olarak aynı olmayacaktır. Belgelerde ayrıca, belirtilen CRF'ye bağlı olarak son videonun boyutunun katlanarak değiştiği belirtiliyor. Katsayıyı 6 puan artırmak, giden videonun bit hızını iki katına çıkaracaktır.

CRF kullanıyorsanız, giden resmin "ağırlığını" seçebilirsiniz, ardından ön ayarlar (-ön ayar) işlemcinin ne kadar ağır yükleneceğini belirleyebilirsiniz. Bu özellik aşağıdaki parametrelere sahiptir:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - varsayılan değer
  • slow
  • slower
  • veryslow

Parametre ne kadar "hızlı" belirtilirse işlemci üzerindeki yük o kadar yüksek olacaktır.

Öncelikle işlemcim için çok zor olan bir ön ayar seçtim ve ardından CRF kullanarak yükü daha hassas bir şekilde seçtim. Benim durumumda ön ayar işe yaradı fastve crf için 24 değerine karar verdim.

Sonuç

Bu kadar. Yayını başlatmak için son komut şuydu:

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/%КЛЮЧ_ТРАНСЛЯЦИИ%

Burada açıklanmayan yalnızca iki nokta kaldı:

1) -c:v libx264 – kaynak dosyayla çalışmak için belirli bir codec bileşeninin belirtilmesi.
2) -g 3 – anahtar çerçevelerin sayısının açık bir şekilde belirtilmesi. Bu durumda her üç karenin bir anahtar kare olması gerektiği belirtilmektedir. Standart değer ya 5 ya da 8'dir ancak YouTube yemin eder ve en az 3 ister.

Yayının ne kadar kaliteli olduğunu görebilirsiniz burada.

Sunucudaki yük şu şekildeydi:

Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

Videolarınızı YouTube'da XNUMX/XNUMX yayınlayın

İzleme verilerine göre işlemci yükünün %70 ila %95 arasında değiştiği ve hafta boyunca yayının hiçbir zaman %100'e ulaşmadığı açıktır. Bu, bu ayarlarla işlemcinin yeterli olduğu anlamına gelir.

Diski yükleyerek neredeyse hiç yüklenmediğini ve yayın için normal bir HDD'nin yeterli olması gerektiğini söyleyebilirim.

Ancak giden trafiğin miktarı beni endişelendiriyor. Giden akışımın saniyede 450 ile 650 KB arasında değiştiği ortaya çıktı. Bir ay içinde bu yaklaşık 1,8 terabayt olacak. Ek trafik satın almanız veya iki çekirdekli bir yapılandırmaya geçmeniz gerekebilir çünkü... Resmin kalitesini düşürmek istemiyorum.

***

Sonuç olarak böyle bir yayını sıfırdan kurmanın yaklaşık 1-2 saat süreceğini söyleyeceğim. Üstelik videonun sunucuya yüklenmesi çoğu zaman alacaktır.

Böyle bir yayının başlatılması bir pazarlama aracı olarak kendisini haklı çıkarmadı. Belki de YouTube algoritmalarının bu yayını alıp önerilerde aktif olarak göstermeye başlaması için görüntülemeleri artırırsak, o zaman bir şeyler yoluna girebilir. Benim durumumda 16 günlük kesintisiz yayında 58 kez izlendi.

Sorun değil. Yayın web sitemin ana sayfasına uyumlu bir şekilde sığıyor. Bu bana öğretim görevlisi ve dersler hakkında hızla kendi fikrimi oluşturma fırsatı verdi.

Ve bir an. Yayının kimsenin telif hakkını ihlal etmemesi önemlidir, aksi takdirde engellenecektir. Yayınım konusunda sakinim çünkü... Özellikle ücretsiz kullanımlı müzik eklerini seçtim ve içeriğin yazarı yakındaki bir bilgisayarın başında oturuyor ve içeriğini kullanmama hiç de karşı değil :)

Ancak yayınınızın bir yerinde arka planda radyo çalıyorsa, düzenleme sırasında en sevdiğiniz parçayı kullandıysanız ya da popüler bir müzik videosundan, diziden ya da filmden bir video kesiti aldıysanız, yayınınız risk altında demektir. Yayının en azından minimum anlamsal yük taşıması da önemlidir, aksi takdirde spam olarak engellenebilir.

***

Sahip olduğum tek şey bu. Bu kılavuzun birilerine iyi hizmet edeceğini umuyorum. Peki ekleyecekleriniz varsa yazın, yazıya yapılan eklemeleri ve açıklamaları okumaktan memnuniyet duyarım.

Kaynak: habr.com

Yorum ekle