Spaces:
Build error
Build error
Commit
·
fb04e43
1
Parent(s):
634ff01
working on the new version
Browse files- package-lock.json +32 -37
- scripts/censorship.sh +1 -1
- scripts/channel_sorter.sh +0 -0
- scripts/{archive_old_videos.sh → decimate_content.sh} +15 -9
- scripts/init.sh +4 -0
- scripts/video2.sh +1 -1
- scripts/video3.sh +1 -1
- scripts/video4.sh +1 -1
- src/downloadVideo.mts +1 -0
- src/interpolate/TODO_USE_ME.mts +0 -27
- src/interpolateVideo.mts +30 -54
- src/postprod/interpolate.mts +1 -1
- src/postprod/interpolateVideoCLI.mts +48 -0
- src/postprod/interpolateVideoForScript.mts +0 -53
- start.sh +6 -6
package-lock.json
CHANGED
@@ -137,9 +137,9 @@
|
|
137 |
}
|
138 |
},
|
139 |
"node_modules/@huggingface/inference": {
|
140 |
-
"version": "2.
|
141 |
-
"resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.
|
142 |
-
"integrity": "sha512-
|
143 |
"engines": {
|
144 |
"node": ">=18"
|
145 |
}
|
@@ -184,11 +184,6 @@
|
|
184 |
"split2": "^4.1.0"
|
185 |
}
|
186 |
},
|
187 |
-
"node_modules/@kararty/dank-twitch-irc/node_modules/ms": {
|
188 |
-
"version": "2.1.3",
|
189 |
-
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
190 |
-
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
191 |
-
},
|
192 |
"node_modules/@puppeteer/browsers": {
|
193 |
"version": "1.4.3",
|
194 |
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.3.tgz",
|
@@ -308,9 +303,9 @@
|
|
308 |
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
|
309 |
},
|
310 |
"node_modules/@types/node": {
|
311 |
-
"version": "20.
|
312 |
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.
|
313 |
-
"integrity": "sha512-
|
314 |
},
|
315 |
"node_modules/@types/qs": {
|
316 |
"version": "6.9.7",
|
@@ -368,9 +363,9 @@
|
|
368 |
}
|
369 |
},
|
370 |
"node_modules/acorn": {
|
371 |
-
"version": "8.
|
372 |
-
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.
|
373 |
-
"integrity": "sha512-
|
374 |
"bin": {
|
375 |
"acorn": "bin/acorn"
|
376 |
},
|
@@ -712,11 +707,11 @@
|
|
712 |
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
|
713 |
},
|
714 |
"node_modules/cross-fetch": {
|
715 |
-
"version": "
|
716 |
-
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-
|
717 |
-
"integrity": "sha512-
|
718 |
"dependencies": {
|
719 |
-
"node-fetch": "^2.6.
|
720 |
}
|
721 |
},
|
722 |
"node_modules/cross-fetch/node_modules/node-fetch": {
|
@@ -770,6 +765,11 @@
|
|
770 |
"debug": "^2.1.0"
|
771 |
}
|
772 |
},
|
|
|
|
|
|
|
|
|
|
|
773 |
"node_modules/deep-is": {
|
774 |
"version": "0.1.4",
|
775 |
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
@@ -1627,9 +1627,9 @@
|
|
1627 |
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
|
1628 |
},
|
1629 |
"node_modules/ms": {
|
1630 |
-
"version": "2.
|
1631 |
-
"resolved": "https://registry.npmjs.org/ms/-/ms-2.
|
1632 |
-
"integrity": "sha512-
|
1633 |
},
|
1634 |
"node_modules/negotiator": {
|
1635 |
"version": "0.6.3",
|
@@ -1943,27 +1943,27 @@
|
|
1943 |
}
|
1944 |
},
|
1945 |
"node_modules/puppeteer": {
|
1946 |
-
"version": "20.
|
1947 |
-
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.
|
1948 |
-
"integrity": "sha512-
|
1949 |
"hasInstallScript": true,
|
1950 |
"dependencies": {
|
1951 |
"@puppeteer/browsers": "1.4.3",
|
1952 |
"cosmiconfig": "8.2.0",
|
1953 |
-
"puppeteer-core": "20.
|
1954 |
},
|
1955 |
"engines": {
|
1956 |
"node": ">=16.3.0"
|
1957 |
}
|
1958 |
},
|
1959 |
"node_modules/puppeteer-core": {
|
1960 |
-
"version": "20.
|
1961 |
-
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.
|
1962 |
-
"integrity": "sha512-
|
1963 |
"dependencies": {
|
1964 |
"@puppeteer/browsers": "1.4.3",
|
1965 |
"chromium-bidi": "0.4.16",
|
1966 |
-
"cross-fetch": "
|
1967 |
"debug": "4.3.4",
|
1968 |
"devtools-protocol": "0.0.1135028",
|
1969 |
"ws": "8.13.0"
|
@@ -2161,11 +2161,6 @@
|
|
2161 |
"node": ">= 0.8.0"
|
2162 |
}
|
2163 |
},
|
2164 |
-
"node_modules/send/node_modules/ms": {
|
2165 |
-
"version": "2.1.3",
|
2166 |
-
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
2167 |
-
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
2168 |
-
},
|
2169 |
"node_modules/serve-static": {
|
2170 |
"version": "1.15.0",
|
2171 |
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
|
@@ -2419,9 +2414,9 @@
|
|
2419 |
}
|
2420 |
},
|
2421 |
"node_modules/tar-stream": {
|
2422 |
-
"version": "3.1.
|
2423 |
-
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.
|
2424 |
-
"integrity": "sha512-
|
2425 |
"dependencies": {
|
2426 |
"b4a": "^1.6.4",
|
2427 |
"fast-fifo": "^1.2.0",
|
|
|
137 |
}
|
138 |
},
|
139 |
"node_modules/@huggingface/inference": {
|
140 |
+
"version": "2.6.1",
|
141 |
+
"resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.6.1.tgz",
|
142 |
+
"integrity": "sha512-qFYchgOCPeEkZJKiSr7Kz62QwukJtgkeQCT7Q0SSKUcvHpTQVNJp6i/JrJMR4dBdzQysJ1SZDC0pLBBnnskTag==",
|
143 |
"engines": {
|
144 |
"node": ">=18"
|
145 |
}
|
|
|
184 |
"split2": "^4.1.0"
|
185 |
}
|
186 |
},
|
|
|
|
|
|
|
|
|
|
|
187 |
"node_modules/@puppeteer/browsers": {
|
188 |
"version": "1.4.3",
|
189 |
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.3.tgz",
|
|
|
303 |
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
|
304 |
},
|
305 |
"node_modules/@types/node": {
|
306 |
+
"version": "20.4.1",
|
307 |
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.1.tgz",
|
308 |
+
"integrity": "sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg=="
|
309 |
},
|
310 |
"node_modules/@types/qs": {
|
311 |
"version": "6.9.7",
|
|
|
363 |
}
|
364 |
},
|
365 |
"node_modules/acorn": {
|
366 |
+
"version": "8.10.0",
|
367 |
+
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
|
368 |
+
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
|
369 |
"bin": {
|
370 |
"acorn": "bin/acorn"
|
371 |
},
|
|
|
707 |
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
|
708 |
},
|
709 |
"node_modules/cross-fetch": {
|
710 |
+
"version": "4.0.0",
|
711 |
+
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
|
712 |
+
"integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
|
713 |
"dependencies": {
|
714 |
+
"node-fetch": "^2.6.12"
|
715 |
}
|
716 |
},
|
717 |
"node_modules/cross-fetch/node_modules/node-fetch": {
|
|
|
765 |
"debug": "^2.1.0"
|
766 |
}
|
767 |
},
|
768 |
+
"node_modules/debug/node_modules/ms": {
|
769 |
+
"version": "2.0.0",
|
770 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
771 |
+
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
772 |
+
},
|
773 |
"node_modules/deep-is": {
|
774 |
"version": "0.1.4",
|
775 |
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
|
|
1627 |
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
|
1628 |
},
|
1629 |
"node_modules/ms": {
|
1630 |
+
"version": "2.1.3",
|
1631 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
1632 |
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
1633 |
},
|
1634 |
"node_modules/negotiator": {
|
1635 |
"version": "0.6.3",
|
|
|
1943 |
}
|
1944 |
},
|
1945 |
"node_modules/puppeteer": {
|
1946 |
+
"version": "20.8.0",
|
1947 |
+
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-20.8.0.tgz",
|
1948 |
+
"integrity": "sha512-DnTwtQMUzWGkJYN3rvUW8y2LciFMnM0YR9cgwWmYmMLhUnYQw1XX+Q+5cAO8+AADglVuJCz0kaopd0lMI5j04g==",
|
1949 |
"hasInstallScript": true,
|
1950 |
"dependencies": {
|
1951 |
"@puppeteer/browsers": "1.4.3",
|
1952 |
"cosmiconfig": "8.2.0",
|
1953 |
+
"puppeteer-core": "20.8.0"
|
1954 |
},
|
1955 |
"engines": {
|
1956 |
"node": ">=16.3.0"
|
1957 |
}
|
1958 |
},
|
1959 |
"node_modules/puppeteer-core": {
|
1960 |
+
"version": "20.8.0",
|
1961 |
+
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.8.0.tgz",
|
1962 |
+
"integrity": "sha512-sQcuH6nv9jnFiaaePk53+C0O9BaJP6OaPmYKqJ3sWhziThv6uaaosK49Kg3g1HUUEP9KYhbOhedPIUCXJSQUxw==",
|
1963 |
"dependencies": {
|
1964 |
"@puppeteer/browsers": "1.4.3",
|
1965 |
"chromium-bidi": "0.4.16",
|
1966 |
+
"cross-fetch": "4.0.0",
|
1967 |
"debug": "4.3.4",
|
1968 |
"devtools-protocol": "0.0.1135028",
|
1969 |
"ws": "8.13.0"
|
|
|
2161 |
"node": ">= 0.8.0"
|
2162 |
}
|
2163 |
},
|
|
|
|
|
|
|
|
|
|
|
2164 |
"node_modules/serve-static": {
|
2165 |
"version": "1.15.0",
|
2166 |
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
|
|
|
2414 |
}
|
2415 |
},
|
2416 |
"node_modules/tar-stream": {
|
2417 |
+
"version": "3.1.6",
|
2418 |
+
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
|
2419 |
+
"integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
|
2420 |
"dependencies": {
|
2421 |
"b4a": "^1.6.4",
|
2422 |
"fast-fifo": "^1.2.0",
|
scripts/censorship.sh
CHANGED
@@ -7,4 +7,4 @@ echo "removing inappropriate videos.."
|
|
7 |
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*2f6806a9-5cee-4892-adba-83548122309f*
|
8 |
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*6741315d-9b5e-43ef-ab6d-e14e6f93897a*
|
9 |
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*e756d6ea-c424-4a05-b553-4be80ec68513*
|
10 |
-
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*d6bb4dcf-65ce-4e73-b39d-e5f6d58001fc*
|
|
|
7 |
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*2f6806a9-5cee-4892-adba-83548122309f*
|
8 |
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*6741315d-9b5e-43ef-ab6d-e14e6f93897a*
|
9 |
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*e756d6ea-c424-4a05-b553-4be80ec68513*
|
10 |
+
rm -f $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*d6bb4dcf-65ce-4e73-b39d-e5f6d58001fc*
|
scripts/channel_sorter.sh
ADDED
File without changes
|
scripts/{archive_old_videos.sh → decimate_content.sh}
RENAMED
@@ -1,15 +1,11 @@
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
-
#
|
4 |
-
VIDEO_DIR=$WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2
|
5 |
-
|
6 |
-
# Target directory for old files
|
7 |
-
ARCHIVE_DIR=$WEBTV_VIDEO_ARCHIVE_PATH_CHANNEL_2
|
8 |
|
9 |
# Calculate the number of .mp4 files
|
10 |
-
TOTAL_VIDEO_COUNT=$(ls -l ${VIDEO_DIR}*.mp4 | wc -l)
|
11 |
|
12 |
-
# Calculate the number of files to move (
|
13 |
VIDEO_COUNT_TO_MOVE=$((TOTAL_VIDEO_COUNT / 10))
|
14 |
|
15 |
# If there are no videos to move then exit the script
|
@@ -19,10 +15,20 @@ if [ "$VIDEO_COUNT_TO_MOVE" -le 0 ]; then
|
|
19 |
fi
|
20 |
|
21 |
# List all .mp4 files in the directory, sorted by modification date, take the oldest 10%
|
22 |
-
FILES_TO_MOVE=$(ls -ltr ${
|
23 |
|
24 |
# Move the old files to the archive directory
|
25 |
for file in $FILES_TO_MOVE
|
26 |
do
|
27 |
-
mv "${file}" "${
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
done
|
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
+
# this script will destroy (well, move to the archives) 15% of the videos
|
|
|
|
|
|
|
|
|
4 |
|
5 |
# Calculate the number of .mp4 files
|
6 |
+
TOTAL_VIDEO_COUNT=$(ls -l "${VIDEO_DIR}"*.mp4 | wc -l)
|
7 |
|
8 |
+
# Calculate the number of files to move (15%)
|
9 |
VIDEO_COUNT_TO_MOVE=$((TOTAL_VIDEO_COUNT / 10))
|
10 |
|
11 |
# If there are no videos to move then exit the script
|
|
|
15 |
fi
|
16 |
|
17 |
# List all .mp4 files in the directory, sorted by modification date, take the oldest 10%
|
18 |
+
FILES_TO_MOVE=$(ls -ltr "${WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2}*.mp4" | head -n ${VIDEO_COUNT_TO_MOVE})
|
19 |
|
20 |
# Move the old files to the archive directory
|
21 |
for file in $FILES_TO_MOVE
|
22 |
do
|
23 |
+
mv "${file}" "${WEBTV_VIDEO_ARCHIVE_PATH_CHANNEL_2}"
|
24 |
+
|
25 |
+
OPTIONAL: remove from channel 3 as well
|
26 |
+
|
27 |
+
# Extract the base filename
|
28 |
+
BASENAME=$(basename ${file})
|
29 |
+
|
30 |
+
# Check whether file of the same name is in CHANNEL_3 and move if it is
|
31 |
+
if [[ -f "${WEBTV_VIDEO_STORAGE_PATH_CHANNEL_3}/${BASENAME}" ]]; then
|
32 |
+
mv "${WEBTV_VIDEO_STORAGE_PATH_CHANNEL_3}/${BASENAME}" "${WEBTV_VIDEO_ARCHIVE_PATH_CHANNEL_3}"
|
33 |
+
fi
|
34 |
done
|
scripts/init.sh
CHANGED
@@ -27,6 +27,8 @@ echo "creating the storage folders for channel 3.."
|
|
27 |
mkdir -p $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_3
|
28 |
mkdir -p $WEBTV_AUDIO_STORAGE_PATH_CHANNEL_3
|
29 |
|
|
|
|
|
30 |
echo "creating the playlists for channel 3.."
|
31 |
echo "ffconcat version 1.0" > channel_3_video.txt
|
32 |
echo "ffconcat version 1.0" > channel_3_video.txt
|
@@ -37,6 +39,8 @@ echo "creating the storage folders for channel 4.."
|
|
37 |
mkdir -p $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_4
|
38 |
mkdir -p $WEBTV_AUDIO_STORAGE_PATH_CHANNEL_4
|
39 |
|
|
|
|
|
40 |
echo "creating the playlists for channel 4.."
|
41 |
echo "ffconcat version 1.0" > channel_4_video.txt
|
42 |
echo "ffconcat version 1.0" > channel_4_video.txt
|
|
|
27 |
mkdir -p $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_3
|
28 |
mkdir -p $WEBTV_AUDIO_STORAGE_PATH_CHANNEL_3
|
29 |
|
30 |
+
mkdir -p $WEBTV_VIDEO_ARCHIVE_PATH_CHANNEL_3
|
31 |
+
|
32 |
echo "creating the playlists for channel 3.."
|
33 |
echo "ffconcat version 1.0" > channel_3_video.txt
|
34 |
echo "ffconcat version 1.0" > channel_3_video.txt
|
|
|
39 |
mkdir -p $WEBTV_VIDEO_STORAGE_PATH_CHANNEL_4
|
40 |
mkdir -p $WEBTV_AUDIO_STORAGE_PATH_CHANNEL_4
|
41 |
|
42 |
+
mkdir -p $WEBTV_VIDEO_ARCHIVE_PATH_CHANNEL_4
|
43 |
+
|
44 |
echo "creating the playlists for channel 4.."
|
45 |
echo "ffconcat version 1.0" > channel_4_video.txt
|
46 |
echo "ffconcat version 1.0" > channel_4_video.txt
|
scripts/video2.sh
CHANGED
@@ -10,7 +10,7 @@ while true; do
|
|
10 |
if [ $new_count -ne $current_count ]; then
|
11 |
echo "there are $new_count videos files for channel 2"
|
12 |
|
13 |
-
echo "Updating
|
14 |
current_count=$new_count
|
15 |
files=($WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*.mp4)
|
16 |
|
|
|
10 |
if [ $new_count -ne $current_count ]; then
|
11 |
echo "there are $new_count videos files for channel 2"
|
12 |
|
13 |
+
echo "Updating playlist for channel 2.."
|
14 |
current_count=$new_count
|
15 |
files=($WEBTV_VIDEO_STORAGE_PATH_CHANNEL_2*.mp4)
|
16 |
|
scripts/video3.sh
CHANGED
@@ -10,7 +10,7 @@ while true; do
|
|
10 |
if [ $new_count -ne $current_count ]; then
|
11 |
echo "there are $new_count videos files for channel 3"
|
12 |
|
13 |
-
echo "Updating
|
14 |
current_count=$new_count
|
15 |
files=($WEBTV_VIDEO_STORAGE_PATH_CHANNEL_3*.mp4)
|
16 |
|
|
|
10 |
if [ $new_count -ne $current_count ]; then
|
11 |
echo "there are $new_count videos files for channel 3"
|
12 |
|
13 |
+
echo "Updating playlist for channel 3.."
|
14 |
current_count=$new_count
|
15 |
files=($WEBTV_VIDEO_STORAGE_PATH_CHANNEL_3*.mp4)
|
16 |
|
scripts/video4.sh
CHANGED
@@ -10,7 +10,7 @@ while true; do
|
|
10 |
if [ $new_count -ne $current_count ]; then
|
11 |
echo "there are $new_count videos files for channel 4"
|
12 |
|
13 |
-
echo "Updating
|
14 |
current_count=$new_count
|
15 |
files=($WEBTV_VIDEO_STORAGE_PATH_CHANNEL_4*.mp4)
|
16 |
|
|
|
10 |
if [ $new_count -ne $current_count ]; then
|
11 |
echo "there are $new_count videos files for channel 4"
|
12 |
|
13 |
+
echo "Updating playlist for channel 4.."
|
14 |
current_count=$new_count
|
15 |
files=($WEBTV_VIDEO_STORAGE_PATH_CHANNEL_4*.mp4)
|
16 |
|
src/downloadVideo.mts
CHANGED
@@ -9,6 +9,7 @@ export const downloadVideo = async (remoteUrl: string, fileName: string): Promis
|
|
9 |
|
10 |
// download the video
|
11 |
const response = await fetch(remoteUrl)
|
|
|
12 |
|
13 |
// write it to the disk
|
14 |
const arrayBuffer = await response.arrayBuffer()
|
|
|
9 |
|
10 |
// download the video
|
11 |
const response = await fetch(remoteUrl)
|
12 |
+
console.log(`downloading file from ${remoteUrl}`)
|
13 |
|
14 |
// write it to the disk
|
15 |
const arrayBuffer = await response.arrayBuffer()
|
src/interpolate/TODO_USE_ME.mts
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
import { promises as fs } from "node:fs"
|
2 |
-
import path from "node:path"
|
3 |
-
|
4 |
-
import { client } from "@gradio/client"
|
5 |
-
import tmpDir from "temp-dir"
|
6 |
-
|
7 |
-
const spaceUrl = "https://jbilcke-hf-video-frame-interpolation.hf.space"
|
8 |
-
|
9 |
-
export const interpolateVideo = (fileName: string) {
|
10 |
-
|
11 |
-
const filePath = path.join(tmpDir, fileName)
|
12 |
-
|
13 |
-
const app = await client(spaceUrl)
|
14 |
-
|
15 |
-
const video = await fs.readFile(filePath)
|
16 |
-
|
17 |
-
const result = await app.predict(1, [
|
18 |
-
video.toString('base64'), // blob in 'parameter_5' Video component
|
19 |
-
1, // number (numeric value between 1 and 4) in 'Interpolation Steps' Slider component
|
20 |
-
"24", // string in 'FPS output' Radio component
|
21 |
-
])
|
22 |
-
|
23 |
-
const data = (result as any).data
|
24 |
-
|
25 |
-
console.log(data)
|
26 |
-
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/interpolateVideo.mts
CHANGED
@@ -1,65 +1,41 @@
|
|
1 |
-
import
|
2 |
-
import
|
|
|
|
|
3 |
|
4 |
-
import
|
5 |
-
import
|
6 |
-
import { downloadVideo } from './downloadVideo.mts'
|
7 |
-
|
8 |
-
// TODO we should use an inference endpoint instead
|
9 |
-
export async function interpolateVideo(fileName: string) {
|
10 |
-
|
11 |
-
const browser = await puppeteer.launch({
|
12 |
-
// headless: true,
|
13 |
-
protocolTimeout: 300000,
|
14 |
-
})
|
15 |
|
16 |
-
|
17 |
|
18 |
-
|
|
|
|
|
19 |
|
20 |
-
|
21 |
-
waitUntil: 'networkidle2',
|
22 |
-
})
|
23 |
|
24 |
const inputFilePath = path.join(tmpDir, fileName)
|
25 |
-
// console.log(`local file to upscale: ${inputFilePath}`)
|
26 |
-
|
27 |
-
await new Promise(r => setTimeout(r, 3000))
|
28 |
-
|
29 |
-
const fileField = await page.$('input[type=file]')
|
30 |
-
|
31 |
-
// console.log(`uploading file..`)
|
32 |
-
await fileField.uploadFile(inputFilePath)
|
33 |
|
34 |
-
|
35 |
-
|
36 |
|
37 |
-
|
38 |
-
await submitButton.click()
|
39 |
|
|
|
40 |
|
41 |
-
|
42 |
-
|
43 |
-
|
|
|
|
|
|
|
|
|
44 |
|
45 |
-
const
|
46 |
-
|
47 |
-
const
|
48 |
-
|
49 |
-
// console.log(
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
const tmpFilePath = path.join(tmpDir, tmpFileName)
|
55 |
-
const filePath = path.join(tmpDir, fileName)
|
56 |
-
|
57 |
-
await fs.promises.copyFile(tmpFilePath, filePath)
|
58 |
-
try {
|
59 |
-
await fs.promises.unlink(tmpFilePath)
|
60 |
-
} catch (err) {
|
61 |
-
console.log('failed to cleanup (no big deal..)')
|
62 |
-
}
|
63 |
-
|
64 |
-
return fileName
|
65 |
-
}
|
|
|
1 |
+
import { promises as fs } from "node:fs"
|
2 |
+
import path from "node:path"
|
3 |
+
import { Blob } from "buffer"
|
4 |
+
// import { blobFrom } from "fetch-blob"
|
5 |
|
6 |
+
import { client } from "@gradio/client"
|
7 |
+
import tmpDir from "temp-dir"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
+
import { downloadVideo } from './downloadVideo.mts'
|
10 |
|
11 |
+
const instances: string[] = [
|
12 |
+
process.env.WEBTV_INTERPOLATION_SPACE_URL
|
13 |
+
]
|
14 |
|
15 |
+
export const interpolateVideo = async (fileName: string) => {
|
|
|
|
|
16 |
|
17 |
const inputFilePath = path.join(tmpDir, fileName)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
19 |
+
const instance = instances.shift()
|
20 |
+
instances.push(instance)
|
21 |
|
22 |
+
const app = await client(instance)
|
|
|
23 |
|
24 |
+
const video = await fs.readFile(inputFilePath)
|
25 |
|
26 |
+
const blob = new Blob([video], { type: 'video/mp4' })
|
27 |
+
// const blob = blobFrom(filePath)
|
28 |
+
const result = await app.predict(1, [
|
29 |
+
blob, // blob in 'parameter_5' Video component
|
30 |
+
1, // number (numeric value between 1 and 4) in 'Interpolation Steps' Slider component
|
31 |
+
24, // string in 'FPS output' Radio component
|
32 |
+
])
|
33 |
|
34 |
+
const data = (result as any).data[0]
|
35 |
+
// console.log('raw data:', data)
|
36 |
+
const { orig_name, data: remoteFilePath } = data
|
37 |
+
const remoteUrl = `${instance}/file=${remoteFilePath}`
|
38 |
+
// console.log("remoteUrl:", remoteUrl)
|
39 |
+
|
40 |
+
await downloadVideo(remoteUrl, fileName)
|
41 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/postprod/interpolate.mts
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
import { interpolateVideo } from "./
|
2 |
|
3 |
// to test this file:
|
4 |
// npm run postprod:interpolate sandbox/video/1688471841394.mp4 sandbox/video/output.mp4
|
|
|
1 |
+
import { interpolateVideo } from "./interpolateVideoCLI.mts"
|
2 |
|
3 |
// to test this file:
|
4 |
// npm run postprod:interpolate sandbox/video/1688471841394.mp4 sandbox/video/output.mp4
|
src/postprod/interpolateVideoCLI.mts
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { promises as fs } from "node:fs"
|
2 |
+
// import path from "node:path"
|
3 |
+
import { Blob } from "buffer"
|
4 |
+
|
5 |
+
import { client } from "@gradio/client"
|
6 |
+
// import tmpDir from "temp-dir"
|
7 |
+
|
8 |
+
const instances: string[] = [
|
9 |
+
process.env.WEBTV_INTERPOLATION_SPACE_URL
|
10 |
+
]
|
11 |
+
|
12 |
+
export const interpolateVideo = async (filePath: string, outputFilePath: string) => {
|
13 |
+
const instance = instances.shift()
|
14 |
+
instances.push(instance)
|
15 |
+
|
16 |
+
// const filePath = path.join(tmpDir, fileName)
|
17 |
+
console.log('filePath: ', filePath)
|
18 |
+
const app = await client(instance)
|
19 |
+
console.log('app ready')
|
20 |
+
const video = await fs.readFile(filePath)
|
21 |
+
console.log('calling app.predict')
|
22 |
+
|
23 |
+
const blob = new Blob([video], { type: 'video/mp4' })
|
24 |
+
|
25 |
+
const result = await app.predict(1, [
|
26 |
+
blob, // blob in 'parameter_5' Video component
|
27 |
+
1, // number (numeric value between 1 and 4) in 'Interpolation Steps' Slider component
|
28 |
+
8, // string in 'FPS output' Radio component
|
29 |
+
])
|
30 |
+
|
31 |
+
|
32 |
+
const data = (result as any).data[0]
|
33 |
+
console.log('raw data:', data)
|
34 |
+
const { orig_name, data: remoteFilePath } = data
|
35 |
+
|
36 |
+
const remoteUrl = `${instance}/file=${remoteFilePath}`
|
37 |
+
|
38 |
+
// download the video
|
39 |
+
const response = await fetch(remoteUrl)
|
40 |
+
|
41 |
+
// write it to the disk
|
42 |
+
const arrayBuffer = await response.arrayBuffer()
|
43 |
+
|
44 |
+
await fs.writeFile(
|
45 |
+
outputFilePath,
|
46 |
+
Buffer.from(arrayBuffer)
|
47 |
+
)
|
48 |
+
}
|
src/postprod/interpolateVideoForScript.mts
DELETED
@@ -1,53 +0,0 @@
|
|
1 |
-
import fs from 'node:fs'
|
2 |
-
|
3 |
-
import puppeteer from 'puppeteer'
|
4 |
-
|
5 |
-
// TODO we should use an inference endpoint instead
|
6 |
-
export async function interpolateVideo(inputFilePath: string, outputFilePath: string) {
|
7 |
-
|
8 |
-
const browser = await puppeteer.launch({
|
9 |
-
headless: true,
|
10 |
-
protocolTimeout: 400000,
|
11 |
-
})
|
12 |
-
|
13 |
-
const spaceUrl = process.env.WEBTV_INTERPOLATION_SPACE_URL
|
14 |
-
|
15 |
-
const page = await browser.newPage()
|
16 |
-
await page.goto(spaceUrl, { waitUntil: 'networkidle2' })
|
17 |
-
|
18 |
-
await new Promise(r => setTimeout(r, 3000))
|
19 |
-
|
20 |
-
const fileField = await page.$('input[type=file]')
|
21 |
-
|
22 |
-
// console.log(`uploading file..`)
|
23 |
-
await fileField.uploadFile(inputFilePath)
|
24 |
-
|
25 |
-
// console.log('looking for the button to submit')
|
26 |
-
const submitButton = await page.$('button.lg')
|
27 |
-
|
28 |
-
// console.log('clicking on the button')
|
29 |
-
await submitButton.click()
|
30 |
-
|
31 |
-
await page.waitForSelector('a[download="interpolated_result.mp4"]', {
|
32 |
-
timeout: 400000, // need to be large enough in case someone else attemps to use our space
|
33 |
-
})
|
34 |
-
|
35 |
-
const interpolatedFileUrl = await page.$$eval('a[download="interpolated_result.mp4"]', el => el.map(x => x.getAttribute("href"))[0])
|
36 |
-
|
37 |
-
// console.log('downloading file from space..')
|
38 |
-
console.log(`- downloading from ${interpolatedFileUrl}`)
|
39 |
-
|
40 |
-
|
41 |
-
// download the video
|
42 |
-
const response = await fetch(interpolatedFileUrl)
|
43 |
-
// write it to the disk
|
44 |
-
const arrayBuffer = await response.arrayBuffer()
|
45 |
-
|
46 |
-
await fs.promises.writeFile(
|
47 |
-
outputFilePath,
|
48 |
-
Buffer.from(arrayBuffer)
|
49 |
-
)
|
50 |
-
console.log('success! wrote to:', outputFilePath)
|
51 |
-
|
52 |
-
process.exit()
|
53 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
start.sh
CHANGED
@@ -5,13 +5,13 @@ bash ./scripts/init.sh
|
|
5 |
|
6 |
# ------------ UPDATE MUSIC ------------
|
7 |
# echo "skipping new music download"
|
8 |
-
bash scripts/download_fresh_music.sh
|
9 |
|
10 |
# ---------- CONTENT ALIGNMENT ---------
|
11 |
bash scripts/censorship.sh
|
12 |
|
13 |
-
# ----------- ARCHIVE OLD,
|
14 |
-
|
15 |
|
16 |
# ------ background processes ---------
|
17 |
|
@@ -24,18 +24,18 @@ sleep 1
|
|
24 |
|
25 |
# background process that creates an audio stream from audio files
|
26 |
bash scripts/audio1.sh &
|
27 |
-
bash scripts/audio2.sh &
|
28 |
|
29 |
# background process that creates a video stream from video files
|
30 |
# bash scripts/video1.sh &
|
31 |
-
bash scripts/video2.sh &
|
32 |
bash scripts/video3.sh &
|
33 |
|
34 |
sleep 1
|
35 |
|
36 |
# background process that sends data to the media server
|
37 |
# bash scripts/stream1.sh &
|
38 |
-
bash scripts/stream2.sh &
|
39 |
bash scripts/stream3.sh &
|
40 |
bash scripts/stream3_twitch.sh &
|
41 |
|
|
|
5 |
|
6 |
# ------------ UPDATE MUSIC ------------
|
7 |
# echo "skipping new music download"
|
8 |
+
# bash scripts/download_fresh_music.sh
|
9 |
|
10 |
# ---------- CONTENT ALIGNMENT ---------
|
11 |
bash scripts/censorship.sh
|
12 |
|
13 |
+
# ----------- ARCHIVE OLD, UNINTERESTING VIDEOS -------
|
14 |
+
bash scripts/decimate_content.sh
|
15 |
|
16 |
# ------ background processes ---------
|
17 |
|
|
|
24 |
|
25 |
# background process that creates an audio stream from audio files
|
26 |
bash scripts/audio1.sh &
|
27 |
+
# bash scripts/audio2.sh &
|
28 |
|
29 |
# background process that creates a video stream from video files
|
30 |
# bash scripts/video1.sh &
|
31 |
+
# bash scripts/video2.sh &
|
32 |
bash scripts/video3.sh &
|
33 |
|
34 |
sleep 1
|
35 |
|
36 |
# background process that sends data to the media server
|
37 |
# bash scripts/stream1.sh &
|
38 |
+
# bash scripts/stream2.sh &
|
39 |
bash scripts/stream3.sh &
|
40 |
bash scripts/stream3_twitch.sh &
|
41 |
|