From 2d50651794fe773701738373ce3b13d175c50802 Mon Sep 17 00:00:00 2001 From: John Howe <89397553+timerring@users.noreply.github.com> Date: Sun, 24 Nov 2024 22:04:05 +0800 Subject: [PATCH 1/5] perf: append to record launcher (#81) re #75 --- startRecord.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/startRecord.sh b/startRecord.sh index fbde5c2..7442e4a 100755 --- a/startRecord.sh +++ b/startRecord.sh @@ -12,5 +12,6 @@ export no_proxy=* host=0.0.0.0 port=2233 +kill -9 $(pgrep -f blrec) nohup blrec -c $config --open --host $host --port $port > $rootPath/logs/blrec.log 2>&1 & echo "blrec run success!" \ No newline at end of file From 35c67bb9a704093cd50c813af5564d9bed0c9f51 Mon Sep 17 00:00:00 2001 From: John Howe <89397553+timerring@users.noreply.github.com> Date: Sun, 24 Nov 2024 22:17:56 +0800 Subject: [PATCH 2/5] docs: add tips for windows OS --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 81d9f46..1e44e82 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,12 @@ > + [使用GPU为FFmpeg 加速](https://yukihane.work/li-gong/ffmpeg-with-gpu) ## 4. Quick start + +> [!NOTE] +> 如果你是 windows 用户,请不要使用命令提示符(Command Prompt)或 Windows PowerShell,请使用 [PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4) 或 Linux 终端例如 WSL 或 **Git Bash**(推荐)。 +> +> **注意:PowerShell 和 Windows PowerShell 是[不同的应用程序](https://learn.microsoft.com/en-us/powershell/scripting/whats-new/differences-from-windows-powershell?view=powershell-7.4&viewFallbackFrom=powershell-7.3)。** + ### 4.1 安装环境 ``` # 安装所需依赖 From 4a907b9cc9de52aed92a6906d954de697c6b16eb Mon Sep 17 00:00:00 2001 From: John Howe <89397553+timerring@users.noreply.github.com> Date: Mon, 25 Nov 2024 16:34:24 +0800 Subject: [PATCH 3/5] perf: adjust the rendering effect (#82) fix #80 --- burnAndMerge.sh | 2 +- danmakuBurning.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/burnAndMerge.sh b/burnAndMerge.sh index e1aa352..d9463af 100755 --- a/burnAndMerge.sh +++ b/burnAndMerge.sh @@ -27,7 +27,7 @@ while read -r line; do xmlFile=${line%.mp4}.xml assFile=${line%.mp4}.ass if [ -f "$xmlFile" ]; then - $rootPath/DanmakuFactory -o "$assFile" -i "$xmlFile" --ignore-warnings + $rootPath/DanmakuFactory -o "$assFile" -i "$xmlFile" --msgboxfontsize 23 --ignore-warnings echo "==================== generated $assFile ====================" export ASS_PATH="$assFile" python3 $rootPath/removeEmojis.py >> $rootPath/logs/removeEmojis.log 2>&1 diff --git a/danmakuBurning.sh b/danmakuBurning.sh index 2ccedb2..cfd5524 100755 --- a/danmakuBurning.sh +++ b/danmakuBurning.sh @@ -51,7 +51,7 @@ assPath="${path}/${roomid}_${year}-${month}-${day}-${hour}.ass" # use DanmakuFactory to convert the xml file xmlPath="${filenameWithoutExt}.xml" if [ -f "$xmlPath" ]; then - $rootPath/DanmakuFactory -o "$assPath" -i "$xmlPath" --ignore-warnings + $rootPath/DanmakuFactory -o "$assPath" -i "$xmlPath" --msgboxfontsize 23 --ignore-warnings rm $xmlPath echo “danmaku convert success!” export ASS_PATH="$assPath" From 0e307d90ae0594ed12b962a4538b438f7b7a8360 Mon Sep 17 00:00:00 2001 From: John Howe <89397553+timerring@users.noreply.github.com> Date: Tue, 26 Nov 2024 23:39:48 +0800 Subject: [PATCH 4/5] refactor: refactor project structure (#85) * refactor: refactor project structure * refactor: set bilive path as system varible * refactor: make project compact --- .gitignore | 17 +++++++- README.md | 2 +- monitor.sh | 34 ---------------- setRoutineTask.sh | 9 +++-- settings.toml | 38 +++++------------- src/__pycache__/Live.cpython-310.pyc | Bin 4917 -> 0 bytes src/__pycache__/Myproc.cpython-310.pyc | Bin 2242 -> 0 bytes src/__pycache__/api.cpython-310.pyc | Bin 899 -> 0 bytes src/__pycache__/httpserver.cpython-310.pyc | Bin 6811 -> 0 bytes src/{blive_upload => bilive_upload}/LICENSE | 0 .../__init__.py | 0 .../bilibiliuploader/__init__.py | 0 .../bilibiliuploader/bilibiliuploader.py | 0 .../bilibiliuploader/cipher.py | 0 .../bilibiliuploader/core.py | 0 .../bilibiliuploader/retry.py | 0 .../cfg_upload.py | 0 .../requirements.txt | 0 src/{blive_upload => bilive_upload}/setup.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 196 -> 0 bytes .../__pycache__/cfg_upload.cpython-310.pyc | Bin 2631 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 282 -> 0 bytes .../bilibiliuploader.cpython-310.pyc | Bin 4742 -> 0 bytes .../__pycache__/cipher.cpython-310.pyc | Bin 2751 -> 0 bytes .../__pycache__/core.cpython-310.pyc | Bin 19736 -> 0 bytes .../__pycache__/retry.cpython-310.pyc | Bin 1882 -> 0 bytes burnAndMerge.sh => src/burnAndMerge.sh | 24 +++++------ danmakuBurning.sh => src/danmakuBurning.sh | 18 ++++----- src/httpserver.py | 2 +- main.py => src/main.py | 4 +- scanSegments.sh => src/scanSegments.sh | 16 +++----- upload.py => src/upload.py | 2 +- startRecord.sh | 6 +-- startScan.sh | 5 +-- startUpload.sh | 5 +-- startUploadNoDanmaku.sh | 2 +- upload/config/1234567.yaml | 14 +++++++ upload/config/22230707.yaml | 14 ------- .../config/upload_config.json | 0 uploadQueue.sh => upload/uploadQueue.sh | 10 ++--- uploadVideo.sh => upload/uploadVideo.sh | 15 +++---- .../uploadVideoQueue.txt | 0 DanmakuFactory => utils/DanmakuFactory | Bin clearLogs.sh => utils/clearLogs.sh | 6 +-- removeEmojis.py => utils/removeEmojis.py | 0 45 files changed, 87 insertions(+), 156 deletions(-) delete mode 100755 monitor.sh delete mode 100644 src/__pycache__/Live.cpython-310.pyc delete mode 100644 src/__pycache__/Myproc.cpython-310.pyc delete mode 100644 src/__pycache__/api.cpython-310.pyc delete mode 100644 src/__pycache__/httpserver.cpython-310.pyc rename src/{blive_upload => bilive_upload}/LICENSE (100%) rename src/{blive_upload => bilive_upload}/__init__.py (100%) rename src/{blive_upload => bilive_upload}/bilibiliuploader/__init__.py (100%) rename src/{blive_upload => bilive_upload}/bilibiliuploader/bilibiliuploader.py (100%) rename src/{blive_upload => bilive_upload}/bilibiliuploader/cipher.py (100%) rename src/{blive_upload => bilive_upload}/bilibiliuploader/core.py (100%) rename src/{blive_upload => bilive_upload}/bilibiliuploader/retry.py (100%) rename src/{blive_upload => bilive_upload}/cfg_upload.py (100%) rename src/{blive_upload => bilive_upload}/requirements.txt (100%) rename src/{blive_upload => bilive_upload}/setup.py (100%) delete mode 100644 src/blive_upload/__pycache__/__init__.cpython-310.pyc delete mode 100644 src/blive_upload/__pycache__/cfg_upload.cpython-310.pyc delete mode 100644 src/blive_upload/bilibiliuploader/__pycache__/__init__.cpython-310.pyc delete mode 100644 src/blive_upload/bilibiliuploader/__pycache__/bilibiliuploader.cpython-310.pyc delete mode 100644 src/blive_upload/bilibiliuploader/__pycache__/cipher.cpython-310.pyc delete mode 100644 src/blive_upload/bilibiliuploader/__pycache__/core.cpython-310.pyc delete mode 100644 src/blive_upload/bilibiliuploader/__pycache__/retry.cpython-310.pyc rename burnAndMerge.sh => src/burnAndMerge.sh (70%) rename danmakuBurning.sh => src/danmakuBurning.sh (74%) rename main.py => src/main.py (91%) rename scanSegments.sh => src/scanSegments.sh (84%) rename upload.py => src/upload.py (89%) create mode 100644 upload/config/1234567.yaml delete mode 100644 upload/config/22230707.yaml rename upload_config.json => upload/config/upload_config.json (100%) rename uploadQueue.sh => upload/uploadQueue.sh (73%) rename uploadVideo.sh => upload/uploadVideo.sh (82%) rename uploadVideoQueue.txt => upload/uploadVideoQueue.txt (100%) rename DanmakuFactory => utils/DanmakuFactory (100%) rename clearLogs.sh => utils/clearLogs.sh (88%) rename removeEmojis.py => utils/removeEmojis.py (100%) diff --git a/.gitignore b/.gitignore index 2971ed0..f2b98f3 100755 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,19 @@ login_file/ node_modules/ package.json pnpm-lock.yaml -package-lock.json \ No newline at end of file +package-lock.json + +# Ignore the biliup folder +upload/config/* +!upload/config/1234567.yaml +!upload/config/upload_config.json +!upload/uploadVideoQueue.txt + +# Ignore the production +startRecord-production.sh +settings-production.toml +path.txt +sameSegments.txt + +# Ignore the cookies.json +cookies.json \ No newline at end of file diff --git a/README.md b/README.md index 1e44e82..addfee8 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ pip install -r requirements.txt # 记录项目根目录 -./setRoutineTask.sh +./setRoutineTask.sh && source ~/.bashrc ``` ### 4.2 biliup-rs 登录 diff --git a/monitor.sh b/monitor.sh deleted file mode 100755 index 63ae153..0000000 --- a/monitor.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# DESCRIPTION: -# The script mainly monitor the video folders and execute the recorded videos. -# -# PARAMETERS: -# INPUT: -# $1 - the video folder (default: $rootPath/Videos) -# OUTPUT: none. - -while read key value; do - export $key="$value" -done < ./path.txt - -if [ $# -gt 0 ]; then - targetFolder="$1" -else - targetFolder="$rootPath/Videos" -fi - - -function MonitorDirectory() { - for file in "$1"/*; do - if [ -d "$file" ]; then - MonitorDirectory "$file" - elif [[ "$file" == *.mp4 ]]; then - $rootPath/danmakuBurning.sh $file - fi - done -} - -while true; do - MonitorDirectory "$targetFolder" - sleep 180 -done \ No newline at end of file diff --git a/setRoutineTask.sh b/setRoutineTask.sh index e1e25e8..3f5a3b8 100755 --- a/setRoutineTask.sh +++ b/setRoutineTask.sh @@ -1,5 +1,8 @@ #!/bin/bash -rootPath=$(pwd) -rm ./path.txt -echo "rootPath $rootPath" >> ./path.txt \ No newline at end of file +# Query the project path +CURRENT_PATH=$(pwd) +# Export the project path to the .bashrc file for the current user using the bash shell +echo "export BILIVE_PATH=$CURRENT_PATH # This for timerring/bilive project path" >> ~/.bashrc +# Make the changes to the .bashrc file immediately effective +echo " Have set the project path $CURRENT_PATH to .bashrc for the current user." \ No newline at end of file diff --git a/settings.toml b/settings.toml index e379693..defae65 100644 --- a/settings.toml +++ b/settings.toml @@ -1,39 +1,19 @@ version = "1.0" -[[tasks]] +webhooks = [] [[tasks]] room_id = 22230707 enable_monitor = true enable_recorder = true -[[webhooks]] -live_began = true -live_ended = true -room_change = true -recording_started = true -recording_finished = true -recording_cancelled = true -video_file_created = true -video_file_completed = true -danmaku_file_created = false -danmaku_file_completed = false -raw_danmaku_file_created = false -raw_danmaku_file_completed = false -cover_image_downloaded = true -video_postprocessing_completed = true -postprocessing_completed = true -space_no_enough = true -error_occurred = true -url = "http://localhost:22333" - [output] path_template = "{roomid}/{roomid}_{year}{month}{day}-{hour}-{minute}-{second}" filesize_limit = 0 -duration_limit = 28800 +duration_limit = 0 out_dir = "./Videos" [logging] -log_dir = "./logs" +log_dir = "./logs/blrecLog" console_log_level = "INFO" backup_count = 30 @@ -57,12 +37,12 @@ save_raw_danmaku = true [recorder] stream_format = "flv" recording_mode = "standard" -quality_number = 150 +quality_number = 250 fmp4_stream_timeout = 10 read_timeout = 3 -disconnection_timeout = 300 -buffer_size = 8192 -save_cover = true +disconnection_timeout = 600 +buffer_size = 32768 +save_cover = false cover_save_strategy = "dedup" [postprocessing] @@ -71,9 +51,9 @@ inject_extra_metadata = true delete_source = "auto" [space] -check_interval = 600 +check_interval = 0 space_threshold = 10737418240 -recycle_records = true +recycle_records = false [email_notification] began_message_type = "html" diff --git a/src/__pycache__/Live.cpython-310.pyc b/src/__pycache__/Live.cpython-310.pyc deleted file mode 100644 index 717c4163e508e44c3ffa4d01a9f09b5cf8fdbfb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4917 zcma)A|Bn;L72nyNwb#D0F>pX21U4ks)D0XQp$$nXO>=sblIy@^T~g4K+fX$ z#;h3&V^)pV?HQXHKQ;sx_M#!|bLLD+q(oXcA|tY5OpJ@1$cuGLX;BdC#RjnvU$SCC zY!aKr7I7cGZbg5axL<4+4}f}y*twKD#e};wHj@_YxKVuYHaId$MW!54j{P{O`_w)X z)cm7iBnb%zu`9L_+7|-whgW6{3lzT)kqcVnPi4$3nwF`4LKV0#ygn zX)(DgrWO;Xur63{&(e|^98T5MrrC|jIQFVxx z3j=53CB@_&yA@aW9J~xw`He~_aFn90c-ZtCiWAq0*TS+;wg;`2l|xK7%60#;rFi7m zsxk-m6suk~+0JRoK9%B!!-juEnRC-Bjn(U3AXGMr%QE)J%v839h0%;_eud1c z|Bwg^C|Zm!q7fU*jKsB&?xbR~!_J}CNiSQ1L4@=sQPSJ$y?O6#_ueVIE&O=LK4k=k zNH47$h|?*x&B+%~>L>!`8I)rv$BXM!dd`;->_Kh@8;WbT`Mh72%C3iv__VS_d0z3; zVN0r1J!rIIU!@|y5;lY+pI7 zwj>KvxvC87K@?U)Sue-Riejl8R8?Y0l0u4(T!)wDRBoXbF(7wQ^$=BCQK@mF2M_h8 zCt|Joq}o6qGZpCr1H8FuqK#;3Hfx$GW-@2!XQJQxndAR%=e5=cQ?+GP$QAle3Jn`Y z>+?x8Vq>=F056&g)&hrSNTbFqG`baFxMT%v!Pb3itFa8NU4lz=Y;FAVL99@;k|UB8 zC+D1`QCpc|qMIInWU*ri_FQ5!=aHLh|$y& zgIV?RynC9UP6XAeFa1XBLNKlW&FfuAaBdK}t;iR&a5Vs84z`~fuq8=1 z+AQS5XqBLYM`>g?RePu+`&CvmY^oGs*>4D#y*6g8-@Qb#kE&^^2(N~Wc0IN&*Mc_8 zR(sLh^idE*8bneB)3GMZ_GYb>uMuif8qp2;+CVpiaD=-0U3V=MH|0Dg92mAkdG!} zMzG9LYk@U(=pacZZ*Da%v1Lx^zF@`nY-%~(LkqsuxM*~&i%5;$vn~NaJaQ7uj-3v} zXzD%l9D8e;8F2>t=(Gs|c>My8v$JEML`0x8>HNX*diIf9)V`TH6PG zb(o%LisP;83z@H-Go~ zjZgmm*{iP&rvJ>3TQV`MelVYMKfnG?_u~5rarf;D!}Mi&DtdA-n;7U%ds6RAAW2;4 zv}Rzg?oX<231NFTdG&xp${a?l+P!i8z3vCUPnf>-$HmY8@lp4mi`c&Vm)CB-zjWj3 z$F#`5K7F%${tq{ zt&1Oauf6;K`0HN#ZTF1}1G<6WN^%>l^iIK>d||RaDZI&N_DmkzGkILc*|t4Jxz-(f zs)k%yv9pq5oup*uHb;d_It5S!h8D*Y03;8V-=c~zPkx)K0T?243xkFv0FvY+k}egB z3mDD_AQEt@%pj6WN|x53hW=X_YgUYEOsv%CifjJS`ULN^4UulnNZ6@E;SmaCOu^xHx2pE%z zQqeq4q0#5@us1m`v<`=OT-C777ZS%g4E9QiB=}HnK*Ne7&#SM|nd--@p@n|~;)s-- z=i~4PFaaRgY6e$)tAH!~{td@(5L{iqDDLbDI%SJ8#sP*>7!&Yc;f2)ey|^QeI)SEET)yy2r6gjxXGnM z-!~|+R%x<$L}$_97QLBm$1cc(nMgq8nD~snZYX%Y%!-V z68&q}$#SHx$!c9mH+^|b(KH{C22)&rwaco8FB|rO}Cob z{)TRN4`UoRKnfU1JfRb+u}WCO<(hVmlK%iGP9@k!wuIP%9Q9tNrkq2GUH^c9EP57| mV>pc5X57j%<5%WJ*d6XZt3TLaX0?ZwHPRcV{ExYk{o;Sm=Gk5V diff --git a/src/__pycache__/Myproc.cpython-310.pyc b/src/__pycache__/Myproc.cpython-310.pyc deleted file mode 100644 index 5ffeb058700fbaf72d33360a0ea86c21da3dfb15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2242 zcmah~OOG2x5bo}IxcyvbNj58jh(S4Ek?aEE5mpf1LP%i~DS;@yj7ILZcg%QZ=xO6! z%Zrd4DW`=qkAov2q5TQ`5e|Lj#2F!^6;i0`v9k{e(W9>FM|D+o^;b1%yEe*9(F z`>jmK?>ITxJea%-J?{V!M9`RY3QjxJ&RK_9?sOdBEOv)p$D=6Y#Qw0Y zge$xUM0nB@{)`UFGpAD#^bTp4{s8@CyG>2CFLlsO6D@Z&O#Qn%N`|6~+b0`3hAsab zh$QF?I702mBGU6<Jn@5G%m>L*kN7 z8Jubw|I@uprQPjAatN-7P!7|i>s!NwP~au#9J&KNe*uUlGcur4I%QL5>Q23>FX({} zFk4|IMO?vmdRB5U=-y7-lvn))JK#O%>C)!11vj4)SGD#^*n9zPq&#uca$N)zTVRsTCUR zNze(>b+t38A&1_GaAoCZ`Yrf!k0h5}qMLhtO7_9Zq^i%&SEmg9y+`gt7VNXHS#qJ^ zV>*Ua0q}AOdMn7C|DC@~^4S=);ddW8o@v*&`#*e-?bmmXF1>x+ipU<%kN6TzliE(0 z1As!MrP!FPFW2)d94At=LfyLk$%k95$w_s`ii*))$VaaikMbQu#}jX)d)KbR5|>Fg z6;aZkcveUIDdXx0faK+|l$r4|6(!nm5o&4Iog^KrbMV53r2sTQUKR=CrkPAs4VRsK z57rCVTMn={rC@&g%rG4+%=_SpDa++r+ffbFNqdG$i`{~(Swm`+ z;2?hqNQH9RuwM;uy2^a!(^cv-M%P(`u2KFCd(8f69I@>L)lV$NvuF|YEAoO7?~+I@ICtQ+mBdJc~~gT&(Q3XIIka1`qZ|C{h1gJe_~ wKvUNCM~-ugffsSHw5UT?>xrOX_E>ief2+9Y4NR&WGntbnBr0No)2H2k0UtsJ6aWAK diff --git a/src/__pycache__/api.cpython-310.pyc b/src/__pycache__/api.cpython-310.pyc deleted file mode 100644 index 045d0d9ce38dbd181f84146e4fd53c8a2d132450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmY*YT}vD>6iqVOb=6%JTM9xc(>Dj|%=)ogsHJo((t>p!u!WpPoQJ5*Ks!i3YOf>(2)Hnct9$P(3&>0xHmBun;JFjBJqd=>u z)Gs|N8djuhc|a)#s`L~%iYcL2gc4l+J4I_)H2}QROS`RoD`hV)U?R{EXH|o8bPiqZ zq2vKY2A@5`Xh<;1#tg~HImW1mKETTvl20V5T*ni9Vi6}B%`w9>@SbL1)kC?nfl7|f z4aYce;JX|)=Rb?*bPLKt6BZTda?CxaJa{p>dTM1CGASyl5}-9L6;$>H1?FlJVyW4+ zt6O-~N>kFs~<{{U6E(L4YE diff --git a/src/__pycache__/httpserver.cpython-310.pyc b/src/__pycache__/httpserver.cpython-310.pyc deleted file mode 100644 index 7413085537f47ec31f8315adaeae9502ab9bb2a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6811 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 diff --git a/src/blive_upload/bilibiliuploader/__pycache__/__init__.cpython-310.pyc b/src/blive_upload/bilibiliuploader/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 623a1770a667158e762d1d3406bb910d7e290419..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmZ8bJ!`{2488M5o3sgJ&DPb6FJum-4VgnAB!d@W`z~;Bwv22C+JDr)3r+aw-l-sI8$8ObLOQHf+I^zs?tY^b$Z z1AGa3b>vqmI7->rc^DJs&Mvf;C55}k5B-%wjDs)d<>&ig}Qg<)qmbT KFipfnj)E&+fJ%G- diff --git a/src/blive_upload/bilibiliuploader/__pycache__/bilibiliuploader.cpython-310.pyc b/src/blive_upload/bilibiliuploader/__pycache__/bilibiliuploader.cpython-310.pyc deleted file mode 100644 index 141a9ac886b5c222183d2b29b08491c85e4252b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4742 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 diff --git a/src/blive_upload/bilibiliuploader/__pycache__/retry.cpython-310.pyc b/src/blive_upload/bilibiliuploader/__pycache__/retry.cpython-310.pyc deleted file mode 100644 index 19b3714129362cdb5e5c4b505e266ec45d88cad4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1882 zcmahJO^X~ww5q!LV`gV3AxJ`EjDw%_C39bNF@8iZjuIo$0cm=>YBs&;nVwX4XS0(Y zS;)c$G0{UpM8)jt1`UWt2p%-z|ER0Xx{HV0Jm|&ux_2h)B3MwbUcK+C_YqG|R|%}c z*_)jQCLzD!W%n}R@&fE+7JwjvMx;yIlp@X|)@H?Nv<*0ohu%yx9!WPbo+2*1mO=(HH!w!=U6IC&_!rP9hiRl&6t_Ti6)U|m^rfMmmyL=&z z`z6>32appGrL8*{Emg__QUU%t(NuAqHcw<}{B}Qzec`B@=WApRn(Z<)? zt5>(azp?r4`sR(hdxe9uGC1dTvR(kvUoCImx;_#w|8Vo#?a@a!w|>1o`s|C* z@_nF`_-U2Nt@Uqy-}q_s%EzM*ZUN(@A0<1q(Z&y3_ipcXGk)w$qYP&I=DqDtukV!- zvg2n_3PL}Bvi04@#Pvk3<#IIzPuA6kajO~<>>XX#)I5<N$i8ZTWM!?I+v}(^1-u%{pCRu;ix2Jh z?ekORxkwiakFL`?sjyj24;s(^&l)`X%EdtT(=hHOjj-29Rp>{JOT*@+VPj?+jo>us zL|Jmyoi6@do67Ia%ZKUEm5B*$_7xO{c7&hGH0(-k^x{Qrbz;@^Q*B4_{CwD(*A+Q- zs__4dgu0H}2e{@~x|;iHKGD{>#qvy2Kg|+NLtQKL=0TrjQd7CN1Pqn+9sxVaQvj-T zKV_^A`FAL%+~I%L4Tsk0QJ@^8&NBO(+k;Bk*r4~XV!*jN-pK*DtddmKK4K zOrdu1ALaXs>ZabaKrQCcQ93wMhAm_eD?g1DOr|)1uAM#Z6*{g_>KB%tMsr28;J1{` zQkkeegJyB4)+uL$eR~YMRqU&t-<6)HtDe`5MHV4m^Stw!AMJ1qNW9vQ*3pvYb8#Fg z{J`RQ3VrO#RS^rmO5uRSTY@)-9HR%PYX=Id>u8QeRMyBL6g~n#Tj^3Cs;D%M&I;-O YG7gixjCK|)Il+-#BMub9etLlY1BOf02LJ#7 diff --git a/burnAndMerge.sh b/src/burnAndMerge.sh similarity index 70% rename from burnAndMerge.sh rename to src/burnAndMerge.sh index d9463af..a5bde78 100755 --- a/burnAndMerge.sh +++ b/src/burnAndMerge.sh @@ -7,11 +7,6 @@ # INPUT: sameSegments.txt # OUTPUT: uploadVideoQueue.txt -# Import the $rootPath -while read key value; do - export $key="$value" -done < ./path.txt - firstOutputFile="" while read -r line; do # Skip when read blanket line @@ -27,10 +22,10 @@ while read -r line; do xmlFile=${line%.mp4}.xml assFile=${line%.mp4}.ass if [ -f "$xmlFile" ]; then - $rootPath/DanmakuFactory -o "$assFile" -i "$xmlFile" --msgboxfontsize 23 --ignore-warnings + $BILIVE_PATH/utils/DanmakuFactory -o "$assFile" -i "$xmlFile" --msgboxfontsize 23 --ignore-warnings echo "==================== generated $assFile ====================" export ASS_PATH="$assFile" - python3 $rootPath/removeEmojis.py >> $rootPath/logs/removeEmojis.log 2>&1 + python3 $BILIVE_PATH/utils/removeEmojis.py >> $BILIVE_PATH/logs/removeEmojis.log 2>&1 fi # Initial some basic parameters and create tmp folder @@ -48,30 +43,29 @@ while read -r line; do echo "file '$newPath'" >> mergevideo.txt if [ -f "$assFile" ]; then # The Nvidia GPU accelerating version. - ffmpeg -hwaccel cuda -c:v h264_cuvid -i "$line" -c:v h264_nvenc -vf "ass=$assFile" "$newPath" -y -nostdin > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + ffmpeg -hwaccel cuda -c:v h264_cuvid -i "$line" -c:v h264_nvenc -vf "ass=$assFile" "$newPath" -y -nostdin > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 # The only cpu version. - # ffmpeg -i "$line" -vf "ass=$assFile" -preset ultrafast "$newPath" -y -nostdin > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + # ffmpeg -i "$line" -vf "ass=$assFile" -preset ultrafast "$newPath" -y -nostdin > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 else # The Nvidia GPU accelerating version. - ffmpeg -hwaccel cuda -c:v h264_cuvid -i "$line" -c:v h264_nvenc "$newPath" -y -nostdin > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + ffmpeg -hwaccel cuda -c:v h264_cuvid -i "$line" -c:v h264_nvenc "$newPath" -y -nostdin > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 # The only cpu version. - # ffmpeg -i "$line" -vf -preset ultrafast "$newPath" -y -nostdin > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + # ffmpeg -i "$line" -vf -preset ultrafast "$newPath" -y -nostdin > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 fi # Delete the related items of videos rm ${line%.mp4}.* -done < sameSegments.txt +done < ./src/sameSegments.txt # merge the videos echo "==================== merge starts ====================" # echo "ffmpeg -f concat -i mergevideo.txt -c copy $firstOutputFile" -ffmpeg -f concat -safe 0 -i mergevideo.txt -use_wallclock_as_timestamps 1 -c copy $firstOutputFile > $rootPath/logs/mergeLog/merge-$(date +%Y%m%d%H%M%S).log 2>&1 +ffmpeg -f concat -safe 0 -i mergevideo.txt -use_wallclock_as_timestamps 1 -c copy $firstOutputFile > $BILIVE_PATH/logs/mergeLog/merge-$(date +%Y%m%d%H%M%S).log 2>&1 # delete useless videos and lists rm -r $tmpDir rm mergevideo.txt echo "==================== start upload $firstOutputFile ====================" -# echo "nohup /root/blive/uploadVideo.sh $firstOutputFile > /root/blive/logs/uploadDanmakuLog/$(date +%Y%m%d%H%M%S).log 2>&1 &" -echo "$firstOutputFile" >> $rootPath/uploadVideoQueue.txt +echo "$firstOutputFile" >> $BILIVE_PATH/upload/uploadVideoQueue.txt echo "==================== OVER ====================" \ No newline at end of file diff --git a/danmakuBurning.sh b/src/danmakuBurning.sh similarity index 74% rename from danmakuBurning.sh rename to src/danmakuBurning.sh index cfd5524..d207b03 100755 --- a/danmakuBurning.sh +++ b/src/danmakuBurning.sh @@ -8,10 +8,6 @@ # OUTPUT: # $formatVideoName - eg:/path/to/video/roomid_YYYY-MM-DD-HH.mp4 -while read key value; do - export $key="$value" -done < ./path.txt - # check if the filename is provided. if [ $# -ne 1 ]; then echo "Usage: $0 filename" @@ -51,25 +47,25 @@ assPath="${path}/${roomid}_${year}-${month}-${day}-${hour}.ass" # use DanmakuFactory to convert the xml file xmlPath="${filenameWithoutExt}.xml" if [ -f "$xmlPath" ]; then - $rootPath/DanmakuFactory -o "$assPath" -i "$xmlPath" --msgboxfontsize 23 --ignore-warnings + $BILIVE_PATH/utils/DanmakuFactory -o "$assPath" -i "$xmlPath" --msgboxfontsize 23 --ignore-warnings rm $xmlPath echo “danmaku convert success!” export ASS_PATH="$assPath" - python3 $rootPath/removeEmojis.py >> $rootPath/logs/removeEmojis.log 2>&1 + python3 $BILIVE_PATH/utils/removeEmojis.py >> $BILIVE_PATH/logs/removeEmojis.log 2>&1 fi # Burn danmaku into video. if [ -f "$assPath" ]; then # The only cpu version - # ffmpeg -y -i $fullPath -vf ass=$assPath -preset ultrafast $formatVideoName > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + # ffmpeg -y -i $fullPath -vf ass=$assPath -preset ultrafast $formatVideoName > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 # The Nvidia GPU accelerating version - ffmpeg -y -hwaccel cuda -c:v h264_cuvid -i $fullPath -c:v h264_nvenc -vf ass=$assPath $formatVideoName > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + ffmpeg -y -hwaccel cuda -c:v h264_cuvid -i $fullPath -c:v h264_nvenc -vf ass=$assPath $formatVideoName > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 rm $assPath else # The only cpu version - # ffmpeg -y -i $fullPath -vf -preset ultrafast $formatVideoName > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + # ffmpeg -y -i $fullPath -vf -preset ultrafast $formatVideoName > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 # The Nvidia GPU acceleting version - ffmpeg -y -hwaccel cuda -c:v h264_cuvid -i $fullPath -c:v h264_nvenc $formatVideoName > $rootPath/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 + ffmpeg -y -hwaccel cuda -c:v h264_cuvid -i $fullPath -c:v h264_nvenc $formatVideoName > $BILIVE_PATH/logs/burningLog/burn-$(date +%Y%m%d%H%M%S).log 2>&1 fi echo "ffmpeg successfully complete!" @@ -78,4 +74,4 @@ echo "ffmpeg successfully complete!" rm $fullPath # Upload video. -echo "$formatVideoName" >> $rootPath/uploadVideoQueue.txt \ No newline at end of file +echo "$formatVideoName" >> $BILIVE_PATH/upload/uploadVideoQueue.txt \ No newline at end of file diff --git a/src/httpserver.py b/src/httpserver.py index badf939..7973ab6 100644 --- a/src/httpserver.py +++ b/src/httpserver.py @@ -46,7 +46,7 @@ def config(cls, video_list_path,upload_log_dir, upload_config_path): # class method, for loading the upload list from the config file @classmethod def set_upload_list(cls): - with open("upload_config.json", 'r', encoding='utf-8') as f: + with open("../upload/config/upload_config.json", 'r', encoding='utf-8') as f: # load the JSON config config = json.load(f) # assign the list of room_ids from the config file to the upload list diff --git a/main.py b/src/main.py similarity index 91% rename from main.py rename to src/main.py index 4627445..1b2de54 100755 --- a/main.py +++ b/src/main.py @@ -13,7 +13,7 @@ if __name__ == "__main__": # open and read the TOML configuration file - with open('settings.toml', 'r', encoding='utf-8') as f: + with open('../settings.toml', 'r', encoding='utf-8') as f: settings = toml.load(f) # get the video list file path video_list_path = os.path.join(settings['output']['out_dir'], "_list") @@ -25,7 +25,7 @@ os.makedirs(upload_log_dir, exist_ok = True) # configure the paths and configuration file for MyHandler - MyHandler.config(video_list_path, upload_log_dir, "upload_config.json") + MyHandler.config(video_list_path, upload_log_dir, "../upload/config/upload_config.json") # set the server listening address and port server_address = ('', PORT) # create the HTTP server instance, using MyHandler as the request processor diff --git a/scanSegments.sh b/src/scanSegments.sh similarity index 84% rename from scanSegments.sh rename to src/scanSegments.sh index 9acae4a..5dd1615 100755 --- a/scanSegments.sh +++ b/src/scanSegments.sh @@ -7,10 +7,6 @@ # INPUT: none. # OUTPUT: $otherMp4File >> sameSegments.txt -while read key value; do - export $key="$value" -done < ./path.txt - CheckAndProcessFolder() { local folderPath=$1 @@ -30,7 +26,7 @@ CheckAndProcessFolder() { # This length to prevent processing the burned videos again! if [ ${#detectName} -gt 27 ]; then - echo $mp4File > sameSegments.txt + echo $mp4File > ./src/sameSegments.txt # Find the same date and hour video datePart=$(basename "$mp4File" | cut -d '_' -f 2| cut -d '-' -f 1) @@ -40,23 +36,23 @@ CheckAndProcessFolder() { # if [[ $(basename "$otherMp4File" | cut -d '_' -f 2| cut -d '-' -f 1) == $datePart && $(basename "$otherMp4File" | cut -d '-' -f 2) == $hourPart ]]; then if [[ $(basename "$otherMp4File" | cut -d '_' -f 2| cut -d '-' -f 1) == $datePart ]]; then if [[ "$mp4File" != "$otherMp4File" ]]; then - echo "$otherMp4File" >> sameSegments.txt + echo "$otherMp4File" >> ./src/sameSegments.txt fi fi done - lineCount=$(wc -l < "sameSegments.txt") + lineCount=$(wc -l < "./src/sameSegments.txt") echo "$lineCount" if [ $lineCount -gt 1 ]; then - $rootPath/burningAndMerge.sh sameSegments.txt + $BILIVE_PATH/src/burnAndMerge.sh ./src/sameSegments.txt else - $rootPath/danmakuBurning.sh $mp4File + $BILIVE_PATH/src/danmakuBurning.sh $mp4File fi fi fi done } -roomFolderPath="$rootPath/Videos" +roomFolderPath="$BILIVE_PATH/Videos" while true; do for roomFolder in "$roomFolderPath"/*; do if [ -d "$roomFolder" ]; then diff --git a/upload.py b/src/upload.py similarity index 89% rename from upload.py rename to src/upload.py index 2e0a54b..f2a98c1 100755 --- a/upload.py +++ b/src/upload.py @@ -4,7 +4,7 @@ import time from src.blive_upload import configured_upload -UPLOAD_CONFIGURATION = "upload_config.json" +UPLOAD_CONFIGURATION = "../upload/config/upload_config.json" if __name__ == '__main__': os.environ['TZ'] = 'Asia/Shanghai' diff --git a/startRecord.sh b/startRecord.sh index 7442e4a..dbeafc1 100755 --- a/startRecord.sh +++ b/startRecord.sh @@ -1,8 +1,4 @@ # pause#!/bin/bash -while read key value; do - export $key="$value" -done < ./path.txt - export config=./settings.toml # Do not use proxy @@ -13,5 +9,5 @@ host=0.0.0.0 port=2233 kill -9 $(pgrep -f blrec) -nohup blrec -c $config --open --host $host --port $port > $rootPath/logs/blrec.log 2>&1 & +nohup blrec -c $config --open --host $host --port $port > $BILIVE_PATH/logs/blrec.log 2>&1 & echo "blrec run success!" \ No newline at end of file diff --git a/startScan.sh b/startScan.sh index c1d1f65..69dea96 100755 --- a/startScan.sh +++ b/startScan.sh @@ -1,10 +1,7 @@ -while read key value; do - export $key="$value" -done < ./path.txt # kill the previous scanSegments process kill -9 $(pgrep -f scanSegments) # start the scanSegments process -nohup $rootPath/scanSegments.sh > $rootPath/logs/scanSegments.log 2>&1 & +nohup $BILIVE_PATH/src/scanSegments.sh > $BILIVE_PATH/logs/scanSegments.log 2>&1 & # Check if the last command was successful if [ $? -eq 0 ]; then echo "success" diff --git a/startUpload.sh b/startUpload.sh index 7cc9c47..bd33c39 100755 --- a/startUpload.sh +++ b/startUpload.sh @@ -1,10 +1,7 @@ -while read key value; do - export $key="$value" -done < ./path.txt # kill the previous scanSegments process kill -9 $(pgrep -f uploadQueue) # start the scanSegments process -nohup $rootPath/uploadQueue.sh > $rootPath/logs/uploadQueue.log 2>&1 & +nohup $BILIVE_PATH/upload/uploadQueue.sh > $BILIVE_PATH/logs/uploadQueue.log 2>&1 & # Check if the last command was successful if [ $? -eq 0 ]; then echo "success" diff --git a/startUploadNoDanmaku.sh b/startUploadNoDanmaku.sh index 3a65018..7a26e1b 100755 --- a/startUploadNoDanmaku.sh +++ b/startUploadNoDanmaku.sh @@ -1,3 +1,3 @@ # pause#!/bin/bash -nohup python3 $rootPath/main.py > $rootPath/logs/uploadNoDanmaku.log 2>&1 & +nohup python3 $BILIVE_PATH/src/main.py > $BILIVE_PATH/logs/uploadNoDanmaku.log 2>&1 & echo "auto upload without danmaku run success!" \ No newline at end of file diff --git a/upload/config/1234567.yaml b/upload/config/1234567.yaml new file mode 100644 index 0000000..5727993 --- /dev/null +++ b/upload/config/1234567.yaml @@ -0,0 +1,14 @@ +line: kodo +limit: 3 +streamers: + VIDEO_PATH: + copyright: 1 + source: BILI_SOURCE + tid: 138 + cover: + title: 【弹幕版】某某某直播回放-%Y年%M月%d日%H点场(按需修改) + desc_format_id: 0 + desc: edit your video description(视频简介,按需修改) + dynamic: "" + tag: tag1,tag2,tag3(视频标签按需修改标签之间用英文逗号间隔) + dtime: ~ diff --git a/upload/config/22230707.yaml b/upload/config/22230707.yaml deleted file mode 100644 index 70c01ae..0000000 --- a/upload/config/22230707.yaml +++ /dev/null @@ -1,14 +0,0 @@ -line: kodo -limit: 3 -streamers: - /root/blive/Videos/22230707/%P: - copyright: 1 - source: https://live.bilibili.com/22230707 - tid: 138 - cover: - title: 【弹幕版】峰哥亡命天涯直播回放-%Y年%M月%d日%H点场 - desc_format_id: 0 - desc: 峰哥亡命天涯直播,直播间地址:https://live.bilibili.com/22230707 内容仅供娱乐,直播中主播的言论、观点和行为均由主播本人负责,不代表录播员的观点或立场。 - dynamic: "" - tag: 峰哥,录播,峰哥亡命天涯,峰哥直播,峰峰,雅典大学堂 - dtime: ~ diff --git a/upload_config.json b/upload/config/upload_config.json similarity index 100% rename from upload_config.json rename to upload/config/upload_config.json diff --git a/uploadQueue.sh b/upload/uploadQueue.sh similarity index 73% rename from uploadQueue.sh rename to upload/uploadQueue.sh index ae84efa..5978531 100755 --- a/uploadQueue.sh +++ b/upload/uploadQueue.sh @@ -6,16 +6,12 @@ # INPUT: none. # OUTPUT: none. -while read key value; do - export $key="$value" -done < ./path.txt - -uploadQueue="$rootPath/uploadVideoQueue.txt" -tempQueue="$rootPath/tempVideoQueue.txt" +uploadQueue="$BILIVE_PATH/upload/uploadVideoQueue.txt" +tempQueue="$BILIVE_PATH/upload/tempVideoQueue.txt" processVideo() { local line="$1" - $rootPath/uploadVideo.sh "$line" > $rootPath/logs/uploadDanmakuLog/upload-$(date +%Y%m%d%H%M%S).log 2>&1 + $BILIVE_PATH/upload/uploadVideo.sh "$line" > $BILIVE_PATH/logs/uploadDanmakuLog/upload-$(date +%Y%m%d%H%M%S).log 2>&1 sleep 10 sed -i '1d' "$uploadQueue" } diff --git a/uploadVideo.sh b/upload/uploadVideo.sh similarity index 82% rename from uploadVideo.sh rename to upload/uploadVideo.sh index 8f3954e..fda6dc6 100755 --- a/uploadVideo.sh +++ b/upload/uploadVideo.sh @@ -8,15 +8,11 @@ # $uploadPath - eg:/path/to/video/roomid_YYYY-MM-DD-HH.mp4 # OUTPUT: none -while read key value; do - export $key="$value" -done < ./path.txt - # check if the provided parameters # specific for manually upload single video if [ $# -ne 1 ]; then echo "Please provide the full path of mp4" - echo "for example:$rootPath/Videos//_YYYY-MM-DD-HH.mp4" + echo "for example:$BILIVE_PATH/Videos//_YYYY-MM-DD-HH.mp4" exit 1 fi @@ -47,7 +43,7 @@ echo "hour: $hour" # original to create the copy. Then upload videos via the copy. # define the path of yaml. -yamlFile="$rootPath/biliup/config/$roomID.yaml" +yamlFile="$BILIVE_PATH/upload/config/$roomID.yaml" # check if the yaml is exist. if [ ! -f "$yamlFile" ]; then @@ -56,7 +52,7 @@ if [ ! -f "$yamlFile" ]; then fi # define the path of copy. -copyYamlFile="$rootPath/biliup/config/copy_$roomID.yaml" +copyYamlFile="$BILIVE_PATH/upload/config/copy_$roomID.yaml" # make the copy. cp "$yamlFile" "$copyYamlFile" @@ -66,12 +62,13 @@ sed -i "s/%Y/$year/g" "$copyYamlFile" sed -i "s/%M/$month/g" "$copyYamlFile" sed -i "s/%d/$day/g" "$copyYamlFile" sed -i "s/%H/$hour/g" "$copyYamlFile" -sed -i "s/%P/${fileName}/g" "$copyYamlFile" +sed -i "s|VIDEO_PATH|$uploadPath|g" "$copyYamlFile" +sed -i "s|BILI_SOURCE|https://live.bilibili.com/$roomID|g" "$copyYamlFile" echo "The parameters have been updated in the $copyYamlFile" # Use biliup tool to upload video, and then delete the subtitle ass file and video file. -if $rootPath/biliup/biliup upload "$uploadPath" --config "$copyYamlFile"; then +if $BILIVE_PATH/upload/biliup upload "$uploadPath" --config "$copyYamlFile"; then echo "Upload successfully,then delete the video" rm $uploadPath else diff --git a/uploadVideoQueue.txt b/upload/uploadVideoQueue.txt similarity index 100% rename from uploadVideoQueue.txt rename to upload/uploadVideoQueue.txt diff --git a/DanmakuFactory b/utils/DanmakuFactory similarity index 100% rename from DanmakuFactory rename to utils/DanmakuFactory diff --git a/clearLogs.sh b/utils/clearLogs.sh similarity index 88% rename from clearLogs.sh rename to utils/clearLogs.sh index 67c2b0e..cfa796a 100755 --- a/clearLogs.sh +++ b/utils/clearLogs.sh @@ -7,10 +7,8 @@ # PARAMETERS: # INPUT: none. # OUTPUT: none. -while read key value; do - export $key="$value" -done < ./path.txt -targetDir="$rootPath/logs" + +targetDir="$BILIVE_PATH/logs" # Retrieve seconds currentTime=$(date +%s) diff --git a/removeEmojis.py b/utils/removeEmojis.py similarity index 100% rename from removeEmojis.py rename to utils/removeEmojis.py From 29ea0e0fbe5ba80d0cee17a38a559af8063e379a Mon Sep 17 00:00:00 2001 From: John Howe <89397553+timerring@users.noreply.github.com> Date: Wed, 27 Nov 2024 20:58:30 +0800 Subject: [PATCH 5/5] refactor: pre production version (#86) --- .gitignore | 8 +++---- src/bilive_upload/LICENSE | 21 ------------------ src/burnAndMerge.sh | 6 ++--- src/danmakuBurning.sh | 6 ++--- .../__init__.py | 0 .../bilibiliuploader/__init__.py | 0 .../bilibiliuploader/bilibiliuploader.py | 0 .../bilibiliuploader/cipher.py | 0 .../bilibiliuploader/core.py | 0 .../bilibiliuploader/retry.py | 0 {upload => src/uploadProcess}/biliup | Bin .../cfg_upload.py | 0 .../uploadProcess}/config/1234567.yaml | 0 .../uploadProcess}/config/upload_config.json | 0 .../requirements.txt | 0 src/{bilive_upload => uploadProcess}/setup.py | 0 {upload => src/uploadProcess}/uploadQueue.sh | 6 ++--- {upload => src/uploadProcess}/uploadVideo.sh | 6 ++--- .../uploadProcess}/uploadVideoQueue.txt | 0 {utils => src/utils}/DanmakuFactory | Bin {utils => src/utils}/clearLogs.sh | 0 {utils => src/utils}/removeEmojis.py | 0 startUpload.sh | 2 +- 23 files changed, 17 insertions(+), 38 deletions(-) delete mode 100755 src/bilive_upload/LICENSE rename src/{bilive_upload => uploadProcess}/__init__.py (100%) rename src/{bilive_upload => uploadProcess}/bilibiliuploader/__init__.py (100%) rename src/{bilive_upload => uploadProcess}/bilibiliuploader/bilibiliuploader.py (100%) rename src/{bilive_upload => uploadProcess}/bilibiliuploader/cipher.py (100%) rename src/{bilive_upload => uploadProcess}/bilibiliuploader/core.py (100%) rename src/{bilive_upload => uploadProcess}/bilibiliuploader/retry.py (100%) rename {upload => src/uploadProcess}/biliup (100%) rename src/{bilive_upload => uploadProcess}/cfg_upload.py (100%) rename {upload => src/uploadProcess}/config/1234567.yaml (100%) rename {upload => src/uploadProcess}/config/upload_config.json (100%) rename src/{bilive_upload => uploadProcess}/requirements.txt (100%) rename src/{bilive_upload => uploadProcess}/setup.py (100%) rename {upload => src/uploadProcess}/uploadQueue.sh (73%) rename {upload => src/uploadProcess}/uploadVideo.sh (90%) rename {upload => src/uploadProcess}/uploadVideoQueue.txt (100%) rename {utils => src/utils}/DanmakuFactory (100%) rename {utils => src/utils}/clearLogs.sh (100%) rename {utils => src/utils}/removeEmojis.py (100%) diff --git a/.gitignore b/.gitignore index f2b98f3..b69fe2d 100755 --- a/.gitignore +++ b/.gitignore @@ -25,10 +25,10 @@ pnpm-lock.yaml package-lock.json # Ignore the biliup folder -upload/config/* -!upload/config/1234567.yaml -!upload/config/upload_config.json -!upload/uploadVideoQueue.txt +src/uploadProcess/config/* +!src/uploadProcess/config/1234567.yaml +!src/uploadProcess/config/upload_config.json +!src/uploadProcess/uploadVideoQueue.txt # Ignore the production startRecord-production.sh diff --git a/src/bilive_upload/LICENSE b/src/bilive_upload/LICENSE deleted file mode 100755 index 04d6b50..0000000 --- a/src/bilive_upload/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 FDS - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/burnAndMerge.sh b/src/burnAndMerge.sh index a5bde78..9ee6ff2 100755 --- a/src/burnAndMerge.sh +++ b/src/burnAndMerge.sh @@ -22,10 +22,10 @@ while read -r line; do xmlFile=${line%.mp4}.xml assFile=${line%.mp4}.ass if [ -f "$xmlFile" ]; then - $BILIVE_PATH/utils/DanmakuFactory -o "$assFile" -i "$xmlFile" --msgboxfontsize 23 --ignore-warnings + $BILIVE_PATH/src/utils/DanmakuFactory -o "$assFile" -i "$xmlFile" --msgboxfontsize 30 --msgboxsize 400x1000 --ignore-warnings echo "==================== generated $assFile ====================" export ASS_PATH="$assFile" - python3 $BILIVE_PATH/utils/removeEmojis.py >> $BILIVE_PATH/logs/removeEmojis.log 2>&1 + python3 $BILIVE_PATH/src/utils/removeEmojis.py >> $BILIVE_PATH/logs/removeEmojis.log 2>&1 fi # Initial some basic parameters and create tmp folder @@ -67,5 +67,5 @@ rm -r $tmpDir rm mergevideo.txt echo "==================== start upload $firstOutputFile ====================" -echo "$firstOutputFile" >> $BILIVE_PATH/upload/uploadVideoQueue.txt +echo "$firstOutputFile" >> $BILIVE_PATH/src/uploadProcess/uploadVideoQueue.txt echo "==================== OVER ====================" \ No newline at end of file diff --git a/src/danmakuBurning.sh b/src/danmakuBurning.sh index d207b03..0c0856c 100755 --- a/src/danmakuBurning.sh +++ b/src/danmakuBurning.sh @@ -47,11 +47,11 @@ assPath="${path}/${roomid}_${year}-${month}-${day}-${hour}.ass" # use DanmakuFactory to convert the xml file xmlPath="${filenameWithoutExt}.xml" if [ -f "$xmlPath" ]; then - $BILIVE_PATH/utils/DanmakuFactory -o "$assPath" -i "$xmlPath" --msgboxfontsize 23 --ignore-warnings + $BILIVE_PATH/src/utils/DanmakuFactory -o "$assPath" -i "$xmlPath" --msgboxfontsize 30 --ignore-warnings rm $xmlPath echo “danmaku convert success!” export ASS_PATH="$assPath" - python3 $BILIVE_PATH/utils/removeEmojis.py >> $BILIVE_PATH/logs/removeEmojis.log 2>&1 + python3 $BILIVE_PATH/src/utils/removeEmojis.py >> $BILIVE_PATH/logs/removeEmojis.log 2>&1 fi # Burn danmaku into video. @@ -74,4 +74,4 @@ echo "ffmpeg successfully complete!" rm $fullPath # Upload video. -echo "$formatVideoName" >> $BILIVE_PATH/upload/uploadVideoQueue.txt \ No newline at end of file +echo "$formatVideoName" >> $BILIVE_PATH/src/uploadProcess/uploadVideoQueue.txt \ No newline at end of file diff --git a/src/bilive_upload/__init__.py b/src/uploadProcess/__init__.py similarity index 100% rename from src/bilive_upload/__init__.py rename to src/uploadProcess/__init__.py diff --git a/src/bilive_upload/bilibiliuploader/__init__.py b/src/uploadProcess/bilibiliuploader/__init__.py similarity index 100% rename from src/bilive_upload/bilibiliuploader/__init__.py rename to src/uploadProcess/bilibiliuploader/__init__.py diff --git a/src/bilive_upload/bilibiliuploader/bilibiliuploader.py b/src/uploadProcess/bilibiliuploader/bilibiliuploader.py similarity index 100% rename from src/bilive_upload/bilibiliuploader/bilibiliuploader.py rename to src/uploadProcess/bilibiliuploader/bilibiliuploader.py diff --git a/src/bilive_upload/bilibiliuploader/cipher.py b/src/uploadProcess/bilibiliuploader/cipher.py similarity index 100% rename from src/bilive_upload/bilibiliuploader/cipher.py rename to src/uploadProcess/bilibiliuploader/cipher.py diff --git a/src/bilive_upload/bilibiliuploader/core.py b/src/uploadProcess/bilibiliuploader/core.py similarity index 100% rename from src/bilive_upload/bilibiliuploader/core.py rename to src/uploadProcess/bilibiliuploader/core.py diff --git a/src/bilive_upload/bilibiliuploader/retry.py b/src/uploadProcess/bilibiliuploader/retry.py similarity index 100% rename from src/bilive_upload/bilibiliuploader/retry.py rename to src/uploadProcess/bilibiliuploader/retry.py diff --git a/upload/biliup b/src/uploadProcess/biliup similarity index 100% rename from upload/biliup rename to src/uploadProcess/biliup diff --git a/src/bilive_upload/cfg_upload.py b/src/uploadProcess/cfg_upload.py similarity index 100% rename from src/bilive_upload/cfg_upload.py rename to src/uploadProcess/cfg_upload.py diff --git a/upload/config/1234567.yaml b/src/uploadProcess/config/1234567.yaml similarity index 100% rename from upload/config/1234567.yaml rename to src/uploadProcess/config/1234567.yaml diff --git a/upload/config/upload_config.json b/src/uploadProcess/config/upload_config.json similarity index 100% rename from upload/config/upload_config.json rename to src/uploadProcess/config/upload_config.json diff --git a/src/bilive_upload/requirements.txt b/src/uploadProcess/requirements.txt similarity index 100% rename from src/bilive_upload/requirements.txt rename to src/uploadProcess/requirements.txt diff --git a/src/bilive_upload/setup.py b/src/uploadProcess/setup.py similarity index 100% rename from src/bilive_upload/setup.py rename to src/uploadProcess/setup.py diff --git a/upload/uploadQueue.sh b/src/uploadProcess/uploadQueue.sh similarity index 73% rename from upload/uploadQueue.sh rename to src/uploadProcess/uploadQueue.sh index 5978531..3e59db2 100755 --- a/upload/uploadQueue.sh +++ b/src/uploadProcess/uploadQueue.sh @@ -6,12 +6,12 @@ # INPUT: none. # OUTPUT: none. -uploadQueue="$BILIVE_PATH/upload/uploadVideoQueue.txt" -tempQueue="$BILIVE_PATH/upload/tempVideoQueue.txt" +uploadQueue="$BILIVE_PATH/src/uploadProcess/uploadVideoQueue.txt" +tempQueue="$BILIVE_PATH/src/uploadProcess/tempVideoQueue.txt" processVideo() { local line="$1" - $BILIVE_PATH/upload/uploadVideo.sh "$line" > $BILIVE_PATH/logs/uploadDanmakuLog/upload-$(date +%Y%m%d%H%M%S).log 2>&1 + $BILIVE_PATH/src/uploadProcess/uploadVideo.sh "$line" > $BILIVE_PATH/logs/uploadDanmakuLog/upload-$(date +%Y%m%d%H%M%S).log 2>&1 sleep 10 sed -i '1d' "$uploadQueue" } diff --git a/upload/uploadVideo.sh b/src/uploadProcess/uploadVideo.sh similarity index 90% rename from upload/uploadVideo.sh rename to src/uploadProcess/uploadVideo.sh index fda6dc6..3468733 100755 --- a/upload/uploadVideo.sh +++ b/src/uploadProcess/uploadVideo.sh @@ -43,7 +43,7 @@ echo "hour: $hour" # original to create the copy. Then upload videos via the copy. # define the path of yaml. -yamlFile="$BILIVE_PATH/upload/config/$roomID.yaml" +yamlFile="$BILIVE_PATH/src/uploadProcess/config/$roomID.yaml" # check if the yaml is exist. if [ ! -f "$yamlFile" ]; then @@ -52,7 +52,7 @@ if [ ! -f "$yamlFile" ]; then fi # define the path of copy. -copyYamlFile="$BILIVE_PATH/upload/config/copy_$roomID.yaml" +copyYamlFile="$BILIVE_PATH/src/uploadProcess/config/copy_$roomID.yaml" # make the copy. cp "$yamlFile" "$copyYamlFile" @@ -68,7 +68,7 @@ sed -i "s|BILI_SOURCE|https://live.bilibili.com/$roomID|g" "$copyYamlFile" echo "The parameters have been updated in the $copyYamlFile" # Use biliup tool to upload video, and then delete the subtitle ass file and video file. -if $BILIVE_PATH/upload/biliup upload "$uploadPath" --config "$copyYamlFile"; then +if $BILIVE_PATH/src/uploadProcess/biliup upload "$uploadPath" --config "$copyYamlFile"; then echo "Upload successfully,then delete the video" rm $uploadPath else diff --git a/upload/uploadVideoQueue.txt b/src/uploadProcess/uploadVideoQueue.txt similarity index 100% rename from upload/uploadVideoQueue.txt rename to src/uploadProcess/uploadVideoQueue.txt diff --git a/utils/DanmakuFactory b/src/utils/DanmakuFactory similarity index 100% rename from utils/DanmakuFactory rename to src/utils/DanmakuFactory diff --git a/utils/clearLogs.sh b/src/utils/clearLogs.sh similarity index 100% rename from utils/clearLogs.sh rename to src/utils/clearLogs.sh diff --git a/utils/removeEmojis.py b/src/utils/removeEmojis.py similarity index 100% rename from utils/removeEmojis.py rename to src/utils/removeEmojis.py diff --git a/startUpload.sh b/startUpload.sh index bd33c39..4c7881f 100755 --- a/startUpload.sh +++ b/startUpload.sh @@ -1,7 +1,7 @@ # kill the previous scanSegments process kill -9 $(pgrep -f uploadQueue) # start the scanSegments process -nohup $BILIVE_PATH/upload/uploadQueue.sh > $BILIVE_PATH/logs/uploadQueue.log 2>&1 & +nohup $BILIVE_PATH/src/uploadProcess/uploadQueue.sh > $BILIVE_PATH/logs/uploadQueue.log 2>&1 & # Check if the last command was successful if [ $? -eq 0 ]; then echo "success"