(Termux + FFmpeg)
Код скрипта та опис того, що він робить.
#!/data/data/com.termux/files/usr/bin/sh
trap 'echo; echo "stop"; termux-wake-unlock; exit 0' INT
termux-wake-lock
if [ ! -f twitch.key ]; then
echo "Помилка: файл twitch.key не знайдено!"
exit 1
fi
KEY=$(cat twitch.key)
if ! ls *.mp4 >/dev/null 2>&1; then
echo "Помилка: MP4-файли не знайдені!"
exit 1
fi
VIDEO=$(ls *.mp4 | head -n 1)
echo "Знайдено файл: $VIDEO"
while true; do
ffmpeg -stream_loop -1 \
-re \
-i "$VIDEO" \
-c:v libx264 \
-preset veryfast \
-b:v 6000k \
-maxrate 6000k \
-bufsize 12000k \
-c:a aac \
-b:a 160k \
-ar 44100 \
-f flv "rtmp://live.twitch.tv/app/$KEY"
echo
echo "FFmpeg завершився. Перезапуск через 10 секунд..."
sleep 10
doneСкрипт призначений для безперервної трансляції відеофайлу на Twitch з телефона на Android через термінал Termux. Він бере перший знайдений у папці MP4-файл, зациклює його й у режимі реального часу надсилає на сервер Twitch як живий стрім. Якщо трансляція раптово обривається, скрипт сам запускає її знову.
| Команда / блок | Призначення |
|---|---|
trap '...' INT |
Перехоплює сигнал переривання (Ctrl+C). Перед виходом виводить «stop», знімає блокування сну (termux-wake-unlock) і завершує скрипт. |
termux-wake-lock |
Не дає Android «присипляти» процесор, щоб стрім не зупинявся при вимкненому екрані. |
[ ! -f twitch.key ] |
Перевіряє, чи є поруч файл twitch.key. Якщо його немає — виводить помилку й виходить із кодом 1. |
KEY=$(cat twitch.key) |
Зчитує ключ трансляції (Stream Key) з файла в змінну KEY. Ключ не зберігається прямо в коді. |
ls *.mp4 |
Перевіряє, чи є в поточній папці хоча б один MP4-файл. Якщо немає — помилка та вихід. |
VIDEO=$(ls *.mp4 | head -n 1) |
Обирає перший MP4-файл за алфавітом і виводить його назву на екран. |
while true; do ... done |
Нескінченний цикл: після завершення FFmpeg скрипт чекає 10 секунд (sleep 10) і запускає його знову. Це захист від розривів зв'язку чи збоїв сервера. |
| Параметр | Значення |
|---|---|
-stream_loop -1 |
Зациклює вхідне відео нескінченно (-1 = без обмежень). |
-re |
Читає файл зі швидкістю відтворення (реальний час), а не якнайшвидше. Обов'язково для лайв-стріму. |
-i "$VIDEO" |
Вхідний файл — знайдений MP4. |
-c:v libx264 |
Кодує відео в H.264 — формат, який вимагає Twitch. |
-preset veryfast |
Баланс між швидкістю кодування та якістю; зменшує навантаження на процесор телефона. |
-b:v 6000k |
Цільовий бітрейт відео — 6000 кбіт/с (максимум, рекомендований Twitch). |
-maxrate 6000k |
Верхня межа бітрейта, щоб не перевищувати ліміт. |
-bufsize 12000k |
Розмір буфера (зазвичай удвічі більший за бітрейт) для рівномірнішого потоку. |
-c:a aac |
Кодує звук у AAC. |
-b:a 160k |
Бітрейт звуку — 160 кбіт/с. |
-ar 44100 |
Частота дискретизації звуку — 44,1 кГц. |
-f flv |
Формат контейнера FLV, який використовується для RTMP. |
rtmp://live.twitch.tv/app/$KEY |
Адреса сервера Twitch із підставленим ключем трансляції. |
- Встановіть у Termux потрібні пакети:
pkg install ffmpeg termux-api(також має бути встановлений додаток Termux:API). - Покладіть у одну папку: скрипт, файл
twitch.key(тільки ключ, без пробілів і зайвих рядків) та MP4-відео. - Надайте права на запуск:
chmod +x stream.sh. - Запустіть:
./stream.sh. Зупинити — Ctrl+C.
- Ключ трансляції — секретний. Нікому його не показуйте й не публікуйте разом зі скриптом.
- Відео перекодовується (
libx264), тому телефон помітно навантажується й може грітися. Якщо відео вже у форматі H.264/AAC з потрібним бітрейтом, можна замінити кодування на-c copy— це майже не навантажує процесор (але зациклення може давати короткі збої на стику). - Бітрейт 6000k потребує стабільного інтернету зі швидкістю віддачі щонайменше 8–10 Мбіт/с. При слабкому з'єднанні зменште
-b:v(наприклад, до3000k) та-maxrate. - Якщо в папці кілька MP4, використовується лише перший за алфавітом.
- Назви файлів із пробілами можуть заважати конструкції
ls *.mp4; краще використовувати назви без пробілів. - Повторювана трансляція одного відео має відповідати правилам Twitch щодо контенту й авторських прав.

