Скрипт для вырезки фрагмента из записи Twitch стрима

  1. #!/bin/bash
  2.  
  3. # Requirements:
  4. # - curl, ffmpeg, yt-dlp
  5. # - Telegram bot token
  6. # - List of chats
  7.  
  8. TELEGRAM_BOT_TOKEN="1234567890:AAAAABBBBCCCCDDDDDEEEEFFFFFGGGGG"
  9. TELEGRAM_CHATS=("Exit" "User 1" "Chat 1" "Chat 2")
  10. TELEGRAM_CHAT_IDS=("0" "1234567" "-1001234567890" "-1001234567891")
  11. BROWSER="firefox"
  12.  
  13. function to_telegram () {
  14.   echo "Choose a chat:"
  15.   for i in "${!TELEGRAM_CHATS[@]}"; do
  16.     printf " %s. %s\n" "$i" "${TELEGRAM_CHATS[$i]}"
  17.   done
  18.   read -rn1 ch
  19.   local chat_id="${TELEGRAM_CHAT_IDS[$ch]:-0}"
  20.   if [[ "$chat_id" != "0" ]]; then
  21.     echo "Sending to ${TELEGRAM_CHATS[$ch]}"
  22.     curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendVideo" \
  23.        -F parse_mode="markdown" \
  24.        -F caption="$2" \
  25.        -F chat_id="$chat_id" \
  26.        -F video="@$1"
  27.   fi
  28. }
  29.  
  30. if [[ "$1" =~ ((http.*twitch.*videos/([0-9]+))\?t=([0-9]+)h([0-9]+)m([0-9]+)s) ]]; then
  31.   # Download Twitch VOD by timing
  32.   duration=${2:-30}
  33.   scale=${3:-720}
  34.   hh="${BASH_REMATCH[4]}"
  35.   mm="${BASH_REMATCH[5]}"
  36.   ss="${BASH_REMATCH[6]}"
  37.   filename="tw_${BASH_REMATCH[3]}_${hh}${mm}${ss}_${duration}_${scale}p.mp4"
  38.   if [ -f "$filename" ]; then
  39.     echo "File already exists. Choose:"
  40.     echo " 0. Exit"
  41.     echo " 1. Overwrite"
  42.     echo " 2. Send to Telegram"
  43.     read -rn1 ch
  44.     if [[ "$ch" == "2" ]]; then
  45.       to_telegram "$filename" "$1"
  46.       exit 0
  47.     fi
  48.     if [[ "$ch" != "1" ]]; then
  49.       exit 0
  50.     fi
  51.   fi
  52.  
  53.   url="${BASH_REMATCH[2]}"
  54.   start="${hh}:${mm}:${ss}"
  55.   echo "Downloading $url, $start + ${duration}s, ${scale}p > $filename"
  56.   ffmpeg -loglevel quiet -stats \
  57.          -ss "$start" -t "$duration" \
  58.          -i "$(yt-dlp -g -- "$url")" \
  59.          -vf "scale=-2:$scale" \
  60.          -crf 24 \
  61.          -y "$filename" && \
  62.   to_telegram "$filename" "[source]($1)"
  63.  
  64. elif [[ "$1" =~ (http.*twitch.*/(.*)) ]]; then
  65.   # Download Twitch stream
  66.   scale=${2:-720}
  67.   filename="tw_${BASH_REMATCH[2]}__$(date +%s)_${scale}p.mp4"
  68.   url="${BASH_REMATCH[1]}"
  69.   echo "Downloading $url, ${scale}p > $filename"
  70.   ffmpeg -loglevel quiet -stats \
  71.          -i "$(yt-dlp --cookies-from-browser $BROWSER -g -- "$url")" \
  72.          -vf "scale=-2:$scale" \
  73.          -crf 24 \
  74.          -y "$filename" && \
  75.   to_telegram "$filename" "[source]($1)"
  76. fi
  77.  
  78. if [ -f "$1" ]; then
  79.   # Send file to Telegram
  80.   to_telegram "$@"
  81. fi
При помощи данного скрипта можно быстро вырезать нужную часть видео из записи стрима на Twitch. Также может отправлять видео до 20 Мб в Telegram.
Копируем тайминг в формате https://www.twitch.tv/videos/1234567890?t=0h32m28s, затем указываем количество секунд видео и опционально качество (480/720/1080). Пример:
twitch https://www.twitch.tv/videos/1828158224?t=0h29m52s 21 1080
twitch https://www.twitch.tv/Yoclesh 1080

Реклама

Мы в соцсетях

tw tg yt gt