Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Ultimamente, por hobby, tenho filmado palestras de uma psicóloga que conheço. Eu edito a filmagem e publico no meu site. Há um mês tive a ideia de organizar uma transmissão 24 horas por dia, 7 dias por semana, dessas palestras no YouTube. Uma espécie de “canal de TV” temático dedicado ao crescimento pessoal.

Eu sei como fazer uma transmissão regular. Mas como fazer com que seja uma transmissão de arquivos de vídeo? Para que funcione 24 horas por dia, 7 dias por semana, seja flexível, o mais autónomo possível e ao mesmo tempo não dependa de forma alguma do meu computador doméstico. Isso é o que eu precisava descobrir.

Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Demorou vários dias para encontrar uma solução. Estudei muitos fóruns e vários manuais sem os quais minha transmissão simplesmente não teria funcionado. E agora que a pegadinha foi um sucesso, sinto necessidade de compartilhar minha solução. Foi assim que este artigo apareceu.

Resumindo, a solução final foi a seguinte: VPS + ffmeg + script bash. Abaixo do corte, descrevo os passos dados e falo sobre as armadilhas que foram descobertas na organização da transmissão.

Passo 1 – de onde virá a transmissão?

Logo no início foi necessário decidir de onde seria a transmissão e qual seria sua fonte. A primeira coisa que me veio à mente foi do seu computador doméstico. Colete vídeos em uma lista de reprodução e comece a reproduzi-los em qualquer player de vídeo. Em seguida, capture a imagem da tela e transmita-a para o YouTube. Mas rejeitei quase imediatamente esta opção porque... Para implementá-lo, é necessário manter o computador doméstico constantemente ligado, o que significa ruído dos coolers mesmo à noite e aumento do consumo de eletricidade (+100-150 kWh por mês). E acontece que você não poderá usar seu computador doméstico durante a transmissão. qualquer movimento do mouse ficará visível na transmissão.

Então comecei a olhar para o lado serviços na nuvem. Eu procurava um serviço pronto onde pudesse enviar meus vídeos ou, por exemplo, inserir links para vídeos do YouTube e tudo seria empacotado em uma transmissão ininterrupta. Mas não encontrei nada adequado. Talvez eu não tenha pesquisado bem. A única coisa que se enquadra na funcionalidade é o restream.io, serviço que ajuda a transmitir simultaneamente para diversas plataformas. Eles parecem permitir que você envie seus próprios vídeos. Mas este serviço foi criado para propósitos completamente diferentes e eles esperam que a transmissão dure apenas algumas horas. Acho que se através deste serviço fosse possível organizar uma transmissão XNUMX horas por dia, custaria dezenas, ou mesmo centenas de dólares por mês. Mas eu ainda queria organizar a transmissão gratuitamente ou com um investimento financeiro mínimo.

Ficou claro que para a transmissão era necessário ou dispositivo separado ou até mesmo um computador separado. Eu estava pensando em algo como Raspberry Pi. E o que? Ele não tem refrigerador. Gravei o vídeo em um pen drive, conectei o cabo Ethernet e deixei em algum lugar isolado e transmiti. Opção. Mas eu não tinha o conselho em si nem experiência em trabalhar com ele, então também recusei essa opção.

Como resultado, me deparei com uma certa discussão onde discutiam a criação servidor próprio transmissões. Não era exatamente o que eu procurava, mas tive a ideia principal: você pode usar um servidor! Nessa discussão, foi sugerido usar uma combinação de VPS + nginx + OBS. Ficou claro que essa combinação também poderia servir para mim. A única coisa que me confundiu foi que nunca tinha administrado um servidor e parecia-me que ter o meu próprio servidor dedicado era confuso e caro. Resolvi saber quanto custaria alugar um servidor com configuração mínima e fiquei agradavelmente surpreso.

Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Os preços são indicados em rublos bielorrussos e são apenas migalhas. Para entender, 8 rublos bielorrussos equivalem a cerca de 3.5 dólares ou 240 rublos russos. Por um mês usando um computador completo, ligado 24 horas por dia, 7 dias por semana e com acesso rápido à Internet. Por alguma razão, esta descoberta tornou-se muito alegre para mim e durante vários dias andei terrivelmente feliz, como uma criança que descobriu foguetes espaciais :)

Aliás, aproveitei a oferta do primeiro site que o Google me cedeu para a consulta “Aluguel de VPS”. Talvez existam ainda mais soluções orçamentárias, mas esse preço me convinha e não procurei mais.

Ao criar um servidor, você pode selecionar o sistema operacional no qual ele será executado. Você pode organizar uma transmissão em qualquer um dos sistemas listados e fazer uma escolha com base em suas preferências e capacidades financeiras (para um servidor com Windows eles pedem uma taxa adicional). Eu escolhi o CentOS. Simplesmente porque eu tinha pouca experiência com isso antes.

Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Passo 2 – configuração do servidor

A primeira coisa que você precisa após criar um servidor é conectar-se a ele via SSH. No começo usei o PuTTy, mas depois comecei a usar o aplicativo Secure Shell, que roda no Google Chrome. Acabou sendo mais conveniente para mim.

Aí mudei o nome do host, configurei a sincronização de horário no servidor, atualizei o sistema, mexi no iptables... e fiz um monte de outras coisas, mas não porque fosse necessário. Eu estava apenas interessado em configurar o servidor e funcionou para mim. Adoro quando dá certo :)

Aqui estão as etapas que você precisa seguir:

  1. Conecte o repositório EPEL.
  2. Configure um servidor FTP (escolhi vsftp).
  3. Instale o ffmpeg.

Não darei os comandos em detalhes; estas instruções são bastante conceituais para transmitir o plano geral de ação. Se você tiver alguma dificuldade com alguma das etapas, ela pode ser resolvida rapidamente usando uma consulta em um mecanismo de pesquisa como “CentOS connect EPEL” ou “CentOS install FTP server”. E nos primeiros links você encontra instruções detalhadas passo a passo.

Então, como escrevi anteriormente, eu precisava de uma combinação de VPS + nginx + OBS. VPS – pronto. Mas começaram a surgir questões sobre outros pontos. OBS é um programa de transmissão, Open Broadcaster Software. E só funciona com streams, ou seja, por exemplo, ele pega uma imagem de uma webcam e a transmite. Ou gravação de tela. Ou uma transmissão já em andamento é redirecionada para outro site. Mas eu não tenho um stream, só tenho um conjunto de arquivos de vídeo que precisam ser transformados em stream.

Comecei a cavar nessa direção e encontrei o ffmpeg. FFmpeg é um conjunto de bibliotecas gratuitas e de código aberto que permitem gravar, converter e transmitir áudio e vídeo digital em vários formatos.

E fiquei muito surpreso com o quanto o ffmpeg pode fazer. Se desejar, ele extrairá o som do vídeo. Se desejar, ele cortará um fragmento do vídeo sem recodificar. Se desejar, ele será convertido de um formato para outro. E muito, muito mais. A ponto de você especificar um arquivo para ele, ele irá convertê-lo em um stream e transmiti-lo para o próprio YouTube. É isso, a corrente está montada. Resta finalizar as nuances.

Passo 3 – configuração da transmissão

Criamos uma transmissão no YouTube. Nesta fase só precisamos do link e da chave de transmissão. Na captura de tela abaixo eles estão destacados em vermelho.

Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Próximo enviar arquivos de vídeo para o servidor, que planejamos transmitir. Na verdade, o FTP é necessário apenas para esta fase. Se você tiver outra maneira conveniente de fazer upload de arquivos para o servidor, não será necessário configurar um servidor FTP.

Transmitimos o stream para o YouTube. Para iniciar a transmissão, você precisa executar o ffmpeg com vários atributos. Esta é a aparência do comando mais curto que recebi:

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

Decodificação de atributos-re – indica que o arquivo deve ser convertido em um fluxo.

-i – indica qual arquivo deve ser reproduzido. É importante que o comando seja iniciado a partir do mesmo diretório onde está localizado o arquivo de vídeo. Caso contrário, você deve especificar um link absoluto para o arquivo, como /usr/media/lecture1.mp4.

-f – define o formato do arquivo de saída. No meu caso, o ffmpeg converte meu arquivo de mp4 para flv instantaneamente.

E no final indicamos os dados que retiramos do YouTube na página de configurações de transmissão, ou seja, o endereço para o qual você precisa transferir os dados e a chave de transmissão para que a transmissão seja exibida especificamente em seu canal.

Se você fez tudo corretamente, após executar este comando, o YouTube verá o stream transmitido. Para iniciar a transmissão, basta clicar no botão “Iniciar transmissão” no próprio YouTube.

Passo 4 – adicionar autonomia

Parabéns! Agora você sabe como iniciar a transmissão a partir de um arquivo de vídeo. Mas isso não é suficiente para uma transmissão XNUMX horas por dia, XNUMX dias por semana. É importante que após o término da reprodução do primeiro vídeo, o próximo comece imediatamente e, quando todos os vídeos forem exibidos, a reprodução seja iniciada novamente.

Criei a seguinte opção: criar um arquivo .sh no qual escrevi um comando para cada arquivo de vídeo e no final indiquei um comando para executar o mesmo script novamente. O resultado é uma recursão como esta:

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

E, sim, funcionou. Satisfeito comigo mesmo, lancei uma transmissão de teste e fui para a cama.

Pela manhã uma surpresa desagradável me esperava. Acontece que a transmissão durou apenas alguns minutos e terminou quase imediatamente quando desliguei o computador. A investigação mostrou que os comandos lançados desta forma são executados enquanto o usuário está logado no servidor. Assim que desconectei, os comandos que estava executando foram interrompidos. Para evitar que isso aconteça, basta diante da equipe bash adicione o comando nohup. Isso permitirá que o processo em execução seja executado independentemente da sua presença.

A versão mínima final do script é assim:

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 $

Onde start.sh é o arquivo no qual este script está escrito. E este arquivo deve estar localizado no mesmo diretório dos arquivos de vídeo.

Adicionar um cifrão no final permite que o processo seja executado em segundo plano para que você possa continuar a usar o console sem interromper a transmissão.

Os bônus incluíram os seguintes brindes:

  • Você pode alternar manualmente a reprodução do arquivo. Para fazer isso, você precisa “matar” o processo ffmpeg em execução no momento. Depois disso, a reprodução do próximo arquivo da lista será iniciada automaticamente.
  • Novos vídeos podem ser adicionados à transmissão sem interrompê-la. Basta enviar o vídeo para o servidor, adicionar um comando para executar este arquivo no script e salvá-lo. Isso é tudo. Na próxima rodada de reprodução, o novo arquivo será transmitido junto com os arquivos antigos.

Etapa 5 – personalizar o ffmpeg

Em princípio, poderíamos ter parado por aí. Mas eu queria tornar a transmissão um pouco mais amigável para os telespectadores.

Digamos que uma pessoa foi à transmissão, começou a assistir, gostou e queria assistir essa palestra desde o início, mas a transmissão não permite retroceder. Para assistir a uma palestra desde o início, a pessoa precisará acessar meu site e obter a gravação da palestra de seu interesse. Como você pode saber qual palestra lhe interessa? Já são 16 palestras no site e só acontecem mais a cada semana. Acho que mesmo eu, que filmei e editei todas essas palestras, não conseguirei determinar, a partir de um fragmento aleatório, qual palestra se trata. Portanto, é necessário que cada palestra seja designada de alguma forma.

A opção de adicionar legendas aos arquivos de vídeo de origem no programa de edição não me agradou. Era necessário garantir que os arquivos originais fossem utilizados. Para que apoiar a transmissão exija de mim o mínimo de movimentos corporais possível.

Acontece que o ffmpeg também poderia me ajudar com isso. Tem um atributo especial -vf, que permite que o texto seja colocado sobre o vídeo. Para adicionar texto a um vídeo, você precisa adicionar o seguinte fragmento ao comando:

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

Explicação dos parâmetrosfontfile= – link para o arquivo da fonte. Sem isso, a legenda não será adicionada ao vídeo. A maneira mais fácil é colocar o arquivo da fonte na mesma pasta do vídeo. Ou você precisará especificar o caminho completo para o arquivo.

text= – na verdade, o próprio texto que precisa ser colocado no topo do vídeo.

fontsize= – tamanho da fonte em pixels.

fontcolor= - cor da fonte.

borderw= – a espessura do contorno ao redor do texto em pixels (tenho texto branco com contorno preto com 1 pixel de espessura).

bordercolor= – cor do contorno.

x= и y= – coordenadas do texto. Ponto 0;0 está localizado no canto superior esquerdo. Minhas coordenadas são selecionadas de forma que o texto seja colocado no canto inferior esquerdo com resolução de vídeo de 1280x720 pixels.

Parece assim:

Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Passo 6 – determine a qualidade da transmissão

É isso, a transmissão está pronta. Transmissões FFmpeg, arquivos são reproduzidos, minha presença não é necessária para transmissão. Até todas as palestras são assinadas. Parece que é isso.

Mas surgiu mais uma nuance - escolhi a configuração mínima do servidor e ela não gerou transmissão. Configuração do servidor: 1 núcleo (como 2.2 GHz), 1 gigabyte de RAM, SSD de 25 GB. Havia RAM suficiente, mas o processador estava quase completamente carregado a 100% (e às vezes até 102-103% :) Isso fazia com que a transmissão congelasse a cada poucos segundos.

Você poderia simplesmente escolher uma configuração mais cara com dois núcleos, felizmente, com tecnologias de nuvem, a alteração da configuração do servidor ocorre pressionando alguns botões. Mas eu queria caber na capacidade mínima de configuração. Comecei a estudar a documentação do ffmpeg e sim, também existem configurações que permitem regular a carga do sistema.

A alta qualidade de imagem pode ser alcançada de duas maneiras: alta carga de CPU ou alto tráfego de saída. Acontece que quanto mais carga o processador puder suportar, menos largura de banda do canal será necessária. Ou você não pode carregar muito o processador, mas precisará de um canal amplo com grande espaço de tráfego. Se houver restrições tanto no processador quanto no tamanho do canal/tráfego de saída, você terá que reduzir a qualidade da imagem para que a transmissão ocorra sem problemas.

Meu servidor tem acesso a um canal de 10 Mbit/s de largura. Essa largura está certa. Mas há um limite de tráfego - 1 TB por mês. Portanto, para atender às restrições de tráfego, meu fluxo de saída não deve exceder aproximadamente 300 KB por segundo, ou seja, A taxa de bits do fluxo de saída não deve ser superior a 2,5 Mbit/s. A propósito, o YouTube recomenda transmitir nesta taxa de bits.

Para regular a carga do sistema, o ffmpeg usa diferentes abordagens. Bem escrito sobre isso aqui. Acabei usando dois atributos: -crf и -preset.

Fator de taxa constante (CRF) – este é um coeficiente graças ao qual você pode ajustar a qualidade da imagem. O CRF pode ter valores de 0 a 51, onde 0 é a qualidade do arquivo de origem, 51 é a pior qualidade possível. Recomenda-se usar valores de 17 a 28, o padrão é 23. Com coeficiente de 17, o vídeo será visualmente idêntico ao original, mas tecnicamente não será o mesmo. A documentação também afirma que o tamanho do vídeo final, dependendo do CRF especificado, muda exponencialmente, ou seja, aumentar o coeficiente em 6 pontos dobrará a taxa de bits do vídeo de saída.

Se estiver usando CRF você pode selecionar o “peso” da imagem de saída e, em seguida, usando predefinições (-preset) você pode determinar o quanto o processador será carregado. Este atributo possui os seguintes parâmetros:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - valor padrão
  • slow
  • slower
  • veryslow

Quanto “mais rápido” o parâmetro for especificado, maior será a carga do processador.

Primeiro selecionei uma predefinição que era basicamente muito difícil para o meu processador e, em seguida, selecionei a carga com mais precisão usando CRF. No meu caso, a predefinição funcionou fast, e para crf estabeleci o valor 24.

Conclusão

Isso é tudo. O comando final para iniciar a transmissão foi este:

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

Restam apenas dois pontos não descritos aqui:

1) -c:v libx264 – especificando um codec específico para trabalhar com o arquivo de origem.
2) -g 3 – indicação explícita do número de quadros-chave. Neste caso, é especificado que cada terceiro quadro deve ser um quadro-chave. O valor padrão é 5 ou 8, mas o YouTube xinga e pede pelo menos 3.

Você pode ver a qualidade da transmissão aqui.

A carga no servidor foi a seguinte:

Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Transmita seus vídeos no YouTube XNUMX horas por dia, XNUMX dias por semana

Com base nos dados de monitoramento, fica claro que a carga do processador varia de 70% a 95% e durante a semana a transmissão nunca chega a 100%. Isso significa que com essas configurações o processador é suficiente.

Ao carregar o disco, posso dizer que ele quase não carrega e um HDD normal deve ser suficiente para a transmissão.

Mas a quantidade de tráfego de saída me preocupa. Acontece que meu fluxo de saída varia de 450 a 650 KB por segundo. Em um mês, serão cerca de 1,8 terabytes. Talvez você precise comprar tráfego adicional ou mudar para uma configuração com dois núcleos porque... Eu não gostaria de reduzir a qualidade da imagem.

***

Como resultado, direi que a configuração de tal transmissão do zero leva cerca de 1 a 2 horas. Além disso, enviar o vídeo para o servidor levará a maior parte do tempo.

O lançamento de tal transmissão não se justificava como ferramenta de marketing. Talvez, se aumentarmos as visualizações para que os algoritmos do YouTube captem essa transmissão e comecem a mostrá-la ativamente nas recomendações, então algo dê certo. No meu caso, em 16 dias de transmissão contínua foi assistido 58 vezes.

Está bem. A transmissão cabe harmoniosamente na página principal do meu site. Isso me deu a oportunidade de formar rapidamente minha própria opinião sobre o palestrante e as próprias palestras.

E um momento. É importante que a transmissão não viole os direitos autorais de ninguém, caso contrário será bloqueada. Estou tranquilo em relação à minha transmissão porque... Eu escolhi especificamente inserções musicais de uso gratuito, e a autora do conteúdo está sentada em um computador próximo e não se opõe de forma alguma a que eu use seu conteúdo :)

Mas se você tiver um rádio tocando em segundo plano em algum lugar da sua transmissão, ou você usou sua faixa favorita durante a edição, ou gravou uma sequência de vídeo de um videoclipe, série de TV ou filme popular, então sua transmissão está em risco. Também é importante que a transmissão carregue pelo menos uma carga semântica mínima, caso contrário poderá ser bloqueada como spam.

***

Isso é tudo o que eu tenho. Espero que este manual sirva bem a alguém. Bem, se você tem algo a acrescentar, escreva, ficarei feliz em ler os acréscimos e esclarecimentos ao artigo.

Fonte: habr.com

Adicionar um comentário