Трансляція відео на YouTube з Linux сервера
Якщо Вам потрібно запустити стрім з певних відео на YouTube, для цього не обов'язково використовувати Windows сервер та розбиратись в складних програмах. Це можна зробити на Linux сервері за допомогою однієї команди або скрипта.
В залежності від якості відео та стріму, може знадобитись різна кількітсь ядер процесора, тому рекомендуємо використовувати тариф UA-VPS-Custom, починаючи з мінімальної кількості ядер, та збільшуючи їх, якщо трансляція працює з затримкою.
Стрім буде виконуватись за допомогою утиліти ffmpeg.
Для її встановлення необхідно виконати команду:
Ubuntu/Debian: apt -y install ffmpeg
RHEL/Centos/Almalinux: yum -y install ffmpeg
або dnf -y install ffmpeg
Далі для запуску треба завантажити відео сервер та в директорії з відео запустити команду:
ffmpeg -re -i video.mp4 \
-c:v libx264 -preset veryfast -b:v 6M -maxrate 7M -bufsize 12M \
-pix_fmt yuv420p -g 60 \
-c:a aac -b:a 160k -ar 44100 \
-f flv rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY
де video.mp4
- це шлях до відео, а YOUR_STREAM_KEY
- ключ трансляції.
Також, якщо треба транслювати багато файлів, можна використати наступний скрипт.
У ньому вам потрібно додати ключ, Та за необхідності можна змінити інші параметри.
Для керування використовуйте команди:./youtube_stream.sh start # запуск
./youtube_stream.sh stop # зупинка
./youtube_stream.sh restart # перезапуск
#!/bin/bash
# === Налаштування ===
STREAM_KEY="YOUR_STREAM_KEY" # Встав свій ключ YouTube
RESOLUTION="1080p" # Варіанти: 720p, 1080p, 1440p, 2160p
FPS=60 # Кадри на секунду
VIDEO_DIR="./videos" # Папка з відео
LOOP=true # true - нескінченний цикл, false - одноразово
BACKGROUND=true # true - запуск у фоновому режимі
PID_FILE="./youtube_stream.pid" # PID-файл для легкого зупинення
LOG_FILE="./youtube_stream.log" # Лог файл
# === Функція для вибору параметрів під роздільність ===
set_ffmpeg_params() {
case $RESOLUTION in
720p)
BV=3000k; MAXRATE=3500k; BUFSIZE=6000k; G=$((FPS*2)); BA=128k
;;
1080p)
if [ "$FPS" -eq 60 ]; then
BV=9000k; MAXRATE=10000k; BUFSIZE=18000k; G=120; BA=192k
else
BV=6000k; MAXRATE=7000k; BUFSIZE=12000k; G=60; BA=160k
fi
;;
1440p)
if [ "$FPS" -eq 60 ]; then
BV=18000k; MAXRATE=21000k; BUFSIZE=36000k; G=120; BA=256k
else
BV=12000k; MAXRATE=14000k; BUFSIZE=24000k; G=60; BA=192k
fi
;;
2160p)
if [ "$FPS" -eq 60 ]; then
BV=45000k; MAXRATE=51000k; BUFSIZE=100000k; G=120; BA=320k
else
BV=30000k; MAXRATE=35000k; BUFSIZE=60000k; G=60; BA=320k
fi
;;
*)
echo "Невідома роздільність"; exit 1
;;
esac
}
# === Функція трансляції одного відео ===
stream_video() {
local FILE="$1"
echo "📺 Трансляція: $FILE" | tee -a "$LOG_FILE"
ffmpeg -re -i "$FILE" \
-c:v libx264 -preset veryfast -b:v $BV -maxrate $MAXRATE -bufsize $BUFSIZE \
-pix_fmt yuv420p -g $G \
-c:a aac -b:a $BA -ar 48000 \
-f flv rtmp://a.rtmp.youtube.com/live2/$STREAM_KEY >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "✅ Трансляція завершена: $FILE" | tee -a "$LOG_FILE"
else
echo "⚠️ Сталася помилка при трансляції: $FILE. Пропускаємо..." | tee -a "$LOG_FILE"
fi
}
# === Основний цикл ===
set_ffmpeg_params
do_stream() {
while true; do
for FILE in "$VIDEO_DIR"/*.{mp4,mkv,avi,mov}; do
[ -e "$FILE" ] || continue
stream_video "$FILE"
done
[ "$LOOP" = true ] || break
done
echo "Всі відео транслювано." | tee -a "$LOG_FILE"
}
# === Функції для запуску / зупинки ===
start_stream() {
if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
echo "Стрім вже запущено (PID: $(cat "$PID_FILE"))"
exit 1
fi
if [ "$BACKGROUND" = true ]; then
nohup bash -c do_stream > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "🟢 Трансляція запущена у фоні (PID: $(cat "$PID_FILE"), лог: $LOG_FILE)"
else
do_stream
fi
}
stop_stream() {
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
echo "🛑 Зупинка стріму (PID: $PID)..."
kill $PID 2>/dev/null
sleep 1
kill -9 $PID 2>/dev/null
rm -f "$PID_FILE"
echo "Стрім зупинено."
else
echo "Стрім не запущено."
fi
}
# === Аргументи скрипта ===
case "$1" in
start)
start_stream
;;
stop)
stop_stream
;;
restart)
stop_stream
sleep 1
start_stream
;;
*)
echo "Використання: $0 {start|stop|restart}"
exit 1
;;
esac
Завантажити відео можна за допомогою програм FileZilla або WinSCP.