Skip to content

Instantly share code, notes, and snippets.

@gMan1990
Last active May 12, 2022 11:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gMan1990/b4585ead146c92fe74d59a84cb3942fd to your computer and use it in GitHub Desktop.
Save gMan1990/b4585ead146c92fe74d59a84cb3942fd to your computer and use it in GitHub Desktop.
ffmpeg ysl to a live
#!/bin/bash
cd "$(dirname "$0")" || exit 1
DIR=$(pwd)
OUTFILE="-f flv rtmp://js.live-send.acg.tv/live-js/?streamname=*&key=*"
while :; do
#./ffmpeg -re -i "Bailey No Ordinary Cat.mp4" -c copy $OUTFILE
cd "$DIR/YSL" || exit 1
for name1 in *; do
if [ -d "$DIR/YSL/$name1" ]; then
cd "$DIR/YSL/$name1" || exit 1
for name2 in *; do
if [ -f "$DIR/YSL/$name1/$name2" ]; then
if [ -z "$mp3Fir" ] && [ "mp3" = "${name2##*.}" ]; then
mp3Fir=$name2
if [ -n "$jpgFir" ]; then
break
fi
continue
fi
if [ -z "$jpgFir" ] && [ "jpg" = "${name2##*.}" ]; then
jpgFir=$name2
if [ -n "$mp3Fir" ]; then
break
fi
continue
fi
fi
done
if [ -n "$mp3Fir" ]; then
cd "$DIR" || exit 1
echo "$name1/$mp3Fir" > textfileYSL.txt
if [ -n "$jpgFir" ]; then
imgFile=YSL/$name1/$jpgFir
echo "$jpgFir" >> textfileYSL.txt
else
imgRandom=$(ls YSLImg | sort -R | head -n 1)
imgFile="YSLImg/$imgRandom" # 随机背景图存放文件夹
echo "$imgRandom(RANDOM)" >> textfileYSL.txt
fi
truncate -s "$(( $(stat -c "%s" textfileYSL.txt) - 1 ))" textfileYSL.txt
# 暂定超3分钟的不循环(估计值)
sloop=$((4 * 1024 * 1024 / $(stat -c "%s" "YSL/$name1/$mp3Fir")))
./ffmpeg -re -stream_loop "$((sloop > 10 ? 10 : sloop))" -i "YSL/$name1/$mp3Fir" -loop 1 -i "$imgFile" -c:v libx264 -c:a copy -shortest -vf "scale=iw: -2, drawtext=textfile=textfileYSL.txt: fontcolor=Black: x=w-tw: box=1: boxcolor=White" -threads 2 $OUTFILE
mp3Fir=
fi
jpgFir=
fi
done
done
@gMan1990
Copy link
Author

gMan1990 commented Aug 9, 2019

#!/bin/bash
while true; do
    # -bsf:a aac_adtstoasc  -threads 1  fontfile=mingliu.ttc

    # 2010-神话-胡歌 (1000k 704x416 HE-AACv2): 第一集保留片头片尾; mapfile -t 移除尾随分隔
    mapfile -t sortVarr < <(find "tv-2010-神话-胡歌" -maxdepth 1 -name "\[TSHD\]神话*\[国语中字\]*sxts.net.伤心天使.mkv" | sort -V)
    for ((r = 0; ; r++)); do
        ./bin/ffmpeg -re -i "${sortVarr[0]}" -b:v 600k -c:v h264 -c:a copy -vf \
            "pad= iw:ih+15*3+5:0:oh-ih\
            ,drawtext= text='$(cat bilibili-mark.txt)${sortVarr[0]}  详情查看简介':fontsize=15:line_spacing=2:x=w-mod(n/2+w/2\,w+tw):fontcolor=White\
            " "$@" && break
        [[ $? -eq 255 || $r -eq 2 ]] && exit $?
    done
    for ((i = 1; i < 50; i++)); do # 其它集跳过片头片尾(非完美)
        mapfile -t sortVarr < <(find "tv-2010-神话-胡歌" -maxdepth 1 -name "\[TSHD\]神话*\[国语中字\]*sxts.net.伤心天使.mkv" | sort -V)
        for ((r = 0; ; r++)); do
            ./bin/ffmpeg -re -ss "0:01:55" -to "0:43:45" -i "${sortVarr[i]}" -b:v 600k -c:v h264 -c:a copy -vf \
                "pad= iw:ih+15*3+5:0:oh-ih\
                ,drawtext= text='$(cat bilibili-mark.txt)${sortVarr[i]}  详情查看简介':fontsize=15:line_spacing=2:x=w-mod(n/2+w/2\,w+tw):fontcolor=White\
                " "$@" && break
            [[ $? -eq 255 || $r -eq 2 ]] && exit $?
        done
    done

    # 聊斋a-2007b-奇女子-国语简中; read -r 不处理转义符
    MAPFILE=(); while read -r line; do MAPFILE+=("$line"); done < <(cat tv-LiaoZhaiA-2007b-QiNvZi.txt)
    for ((r = 0; ; r++)); do
        ./bin/ffmpeg -re -i "${MAPFILE[1]}" -b:v 600k -c:v h264 -c:a copy -vf \
            "scale= -2:416\
            ,pad= iw:ih+15*3+5:0:oh-ih\
            ,drawtext= text='$(cat bilibili-mark.txt)2007-聊斋奇女子-国语简中 01/38集 %{pts\:gmtime\:0\:%H\\\\\:%M\\\\\:%S}/${MAPFILE[2]//:/\\:}  详情查看简介':fontsize=15:line_spacing=2:x=w-mod(n/2+w/2\,w+tw):fontcolor=White\
            " -bsf:a aac_adtstoasc "$@" && break
        [[ $? -eq 255 || $r -eq 2 ]] && exit $?
    done
    for ((i = 1 * 2 + 1; i <= 38 * 2; i += 2)); do # grep -oE "\b([0-9]{2}:){2}[0-9]{2}\b"; -t "$((全部 - $ss - 片尾))"; %{pts:gmtime:$ss}
        IFS=":" read -r -a array <<<"${MAPFILE[i + 1]}"
        for ((r = 0; ; r++)); do
            ./bin/ffmpeg -re -ss "0:01:30" -t "$(((array[0] * 3600 + array[1] * 60 + array[2]) - 90 - 105))" -i "${MAPFILE[i]}" -b:v 600k -c:v h264 -c:a copy -vf \
                "scale= -2:416\
                ,pad= iw:ih+15*3+5:0:oh-ih\
                ,drawtext= text='$(cat bilibili-mark.txt)2007-聊斋奇女子-国语简中 $(printf "%02d" $(((i + 1) / 2)))/38集 %{pts\:gmtime\:90\:%H\\\\\:%M\\\\\:%S}/${MAPFILE[i + 1]//:/\\:}  详情查看简介':fontsize=15:line_spacing=2:x=w-mod(n/2+w/2\,w+tw):fontcolor=White\
                " -bsf:a aac_adtstoasc "$@" && break
            [[ $? -eq 255 || $r -eq 2 ]] && exit $?
        done
    done

done

@gMan1990
Copy link
Author

gMan1990 commented Nov 11, 2020

name required type/example
room_id y 9863884
page y 1
page_size y 99
  • https://api.live.bilibili.com/xlive/web-room/v1/record/getLiveRecordUrl
name required type/example
rid y R1ex411c7Jk
platform y html5

@gMan1990
Copy link
Author

gMan1990 commented Nov 28, 2020

# split in files of given max duration, https://unix.stackexchange.com/questions/1670
ffmpeg -hide_banner -i input.mp4 -c copy -f segment -segment_time 0:00:50 -reset_timestamps 1 output-%d.mp4

# split in files of given max size, see GPAC-MP4Box

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment