Después de la tendencia reciente de YouTube en los videos de YouTube "Reddit to Text-to-Dpeech", embarcé en un proyecto para crear un programa que pueda automatizar el proceso de recibir, generar y cargar estos videos a YouTube con la menor intervención posible. Tomó 4 meses terminar el proyecto y está compuesto por 3 programas separados que funcionan simultáneamente para completar esta tarea.
La idea era minimizar la mayor intervención manual posible y automatizar todas las tareas triviales. Sin embargo, el proceso no puede ser 100% automatizado. Por ejemplo, los comentarios con enlaces en ellos no pueden mantenerse ya que la calidad del video se componirá debido al TTS. Además, si bien un comentario podría tener una gran cantidad de votos, podría ser ofensivo y no seguro para un video de YouTube y, por lo tanto, debe eliminarse. La miniatura, aunque parcialmente generada, debe editarse para crear cualquier tipo de atractivo para los espectadores para que hagan clic en su video. Lo mismo ocurre con el título del video que debe ser clickbait-y para recibir atención. He intentado optimizar el proceso manual con el programa del cliente y me lleva aproximadamente 30 minutos crear 6 videos (el máximo que se puede cargar dentro de las 24 horas con la API de datos de YouTube).
Algunos de mis videos generados:
https://www.youtube.com/watch?v=xxdkmhyxcsq
https://www.youtube.com/watch?v=aw0yjixxnxi&t=35s
El proceso de completar un video implica:
Ejemplo de canales de texto a voz Reddit:
https://www.youtube.com/watch?v=izsxhx64pgq https://www.youtube.com/watch?v=vzdtuap2ztw
Coloque estos en una carpeta llamada "Activos" dentro del directorio del generador de video Bot de YouTube.
Además, cambié de opinión en muchos aspectos de diseño parcialmente a través del proyecto y, por lo tanto, algunos archivos se llaman extrañamente y hay código no utilizado aquí y allá. Ya no actualizaré el código, sin embargo, no dude en hacerlo.
Verificar dependencias.txt
Para instalar la mayoría de las dependencias de Python fácilmente, ejecute el siguiente comando después de la clonación (algunos pueden necesitar instalarse manualmente):
pip install -r requirements.txt
Esta tendencia reciente en videos de texto a voz de Reddit consiste (generalmente) de una fórmula muy simple:
Se elige una canción al azar. He descargado ~ 40 canciones Kevin MacLeod Royality Songs Free Songs para ser elegidos al azar.
https://www.youtube.com/watch?v=ccpyyrds-qo&list=plbzgr7h3fyus3lvitxtfaigv601ukuhjx
Todos los activos utilizados en la generación del video se pueden descargar aquí:
http://www.mediafire.com/file/hpu1j1k1avwp9dj/youtube_bot_assets.zip/file
Deben colocarse en una carpeta llamada "Activos" en el programa de generador de video.
El proyecto se compone de tres programas separados:
Este programa alberga el (1) servidor Socket para conectarse al programa Cliente (s) y también al (2) Socket Server para conectarse a los Clientes de Video Generadores. Además, este programa también obtendrá nuevos scripts de Reddit cada hora, y también actualizará los existentes que aún no se han editado.
(1) Este servidor Socket enviará scripts sin procesar desde la base de datos al programa de revisión manual (ver más abajo). Luego recibirá estos scripts revisados y actualizará la base de datos con los scripts finalizados que incluirán una miniatura, una descripción y un título. El servidor puede manejar varios clientes para que varias personas puedan editar estos scripts.
(2) El servidor del generador de video actualmente solo está diseñado para manejar un cliente de generador de video. Los planes originales eran para que este servidor maneje múltiples clientes de generadores de video repartidos entre varias computadoras. Sin embargo, descubrí que una computadora era suficiente para todas mis necesidades de generación de videos, por lo que decidí codificarla a un solo cliente. El propósito de este servidor es enviar scripts finalizados desde la base de datos al cliente del generador de video.
Este programa recibirá scripts de video finalizados del servidor de generador de video Bot de YouTube que incluye miniaturas, descripciones, etiquetas y un título. Estos scripts se generarán en un archivo MP4 y luego se cargarán en YouTube en un tiempo de lanzamiento programado (actualmente al azar a las 5 p.m., 6 pm, 7pm GMT, los tiempos recomendados para cargar a YouTube). Una vez que se reciba el script, se generará, el programa esperará hasta que tenga suficientes créditos de API para cargar verificando cuando se cargaron los últimos 6 videos.
El uso de la cuota de API se restablece a las 8 a.m. GMT . He calculado que cargar cada video costará 1658 créditos . Puede usar un máximo de 10 000 créditos al día. Esto significa que, en teoría, podrá subir 6 videos al día . Sin embargo, en la práctica he podido subir 5 videos, a veces el sexto cargará, sin embargo, no habrá suficientes cuotas disponibles para cargar la miniatura, lo que en ese caso requerirá una intervención manual para cargar la miniatura manualmente. Los videos están cargados con YouTube-Spload, que solo he logrado trabajar con Python 2.7. Se llama con subprocesos.check_call con la versión de Python especificada y los argumentos según sea necesario (enlace a continuación).
Una vez que se carga un video con éxito, su estado está configurado para completarse junto con un tiempo de carga para que el programa pueda verificar cuántos videos se cargaron dentro del día para evitar exceder el uso de las cuotas.
Información de API de datos de YouTube https://developers.google.com/youtube/v3/getting-started youtube-upload (Python 2.7) https://github.com/tokland/youtube-upload
Texto a voz con mucho uno de los aspectos más desafiantes del proyecto fue lograr que el texto del habla funcionara correctamente. Quería usar el texto de escaneo suave de Daniel MLG a Speech Voice, el que se encuentra en la mayoría de los videos de texto a Speech Reddit. Creí que esta era una parte importante del proyecto porque esta voz es muy reconocible y (en mi opinión) es (en mi opinión) uno de los mejores textos de sonido disponibles. Utilizo la versión de línea de comandos de Balabolka para generar los archivos .WAV y estos se sincronizaron con diferentes marcos en el programa de generación de videos.
Balabolka http://www.cross-plus-a.com/balabolka.htm Instrucciones sobre cómo obtener la voz de Daniel MLG https://www.youtube.com/watch?v=YJ3DHtnyoty
El programa del cliente es un proceso de Tinder Swipe Izquierda y Right para filtrar comentarios que no deben incluirse en el video. También permite que el usuario escriba el título y cargue una miniatura para el video, así como editar descripción y etiquetas, aunque el título, la descripción y las etiquetas se generan parcialmente de la siguiente manera: Título: Be, por defecto es el título de la publicación Descripción: De manera predeterminada, es una plantilla generada con el título de la publicación y un par de etiquetas de hashtags: algunas etiquetas base: algunas etiquetas base que obtuve de los canales de texto populares de texto. se puede editar. También se genera parcialmente una plantilla para la miniatura. Hay cheques para asegurarse de que la cantidad de caracteres no se excedan para todos estos campos, por ejemplo, el título de menos de 100 caracteres
El contenido final del video incluye el script editado, la miniatura, las etiquetas, la descripción y la configuración del video (es posible cambiar ciertas características de la plantilla del generador de video durante el proceso de edición, como el color de fondo, el tamaño de texto, los anchos de línea, etc. Por lo general, mantenía los valores predeterminados, por lo que realmente no tengo mucho uso para ella) que luego se envía al servidor que a la vuelta a giro se carga en la base de datos.
Mysql
El almacenamiento de los scripts y su información relevante se realiza con una base de datos MySQL. Esta es la primera vez que usé una base de datos MySQL para un proyecto, no soy brillante en SQL. Aprendí lo que era necesario para que las cosas funcionen. Usé tres tablas "usuarios", "videogeneradores" y "scripts"
Tabla de "usuarios"
Originalmente había planeado crear un sistema de inicio de sesión extenso donde los usuarios tenían estadísticas de edición, ver quién está en línea, etc. deseché esto y ahora su único uso es realizar un seguimiento de los usuarios que editan qué videos evitar que el mismo video se edite y cargue dos veces. Las contraseñas están encriptadas con MD5 en el lado del cliente
Mesa de "scripts"
La tabla más importante contiene toda la información del script. El campo de estado es muy importante para realizar un seguimiento de dónde debería estar un script.
-Raw: el script está disponible para editar
-Editar: el script se está editando y no puede ser editado por ningún otro usuarios mientras esté en este estado
-Complete: el script ha terminado de editar y se enviará al cliente del generador de video
-Successupload: el script se ha subido con éxito a YouTube
Table de "Videogeneradores"
Al igual que los usuarios, diseñé al cliente para tener un nombre de usuario y una contraseña para iniciar sesión. La contraseña está encriptada con MD5 en el lado del cliente
Estas tablas se crearán automáticamente dentro de una base de datos llamada "YouTubebot" si aún no existen.
Recibir credenciales para su cuenta de Google API se descargará y guardará automáticamente después de un inicio de sesión único (la ventana de su navegador se abrirá solicitando un inicio de sesión de Google Cuenta): videouploader.py -> get_credentials ()