diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..883244e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/build +/videos/* \ No newline at end of file diff --git a/README.md b/README.md index 604d175..6de28b7 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,62 @@ Прога которая делает из флешки переносной ютуб 2 \ Это лишь попытка создать чтото похожее на [оригинальный ютуб 2 от Влада Кунякина](https://www.youtube.com/watch?v=Ywywiqissfg) \ Если вы хотите получить оригинальный ютуб 2, то [покупайте флешку тут](https://t.me/kunyakin/16) + +## Как собрать + +1. Добавьте все видео в папку `videos/` (смотреть Добавление видео) +2. Соберите сайт через `./build.sh` +3. Запишите сайт на флешку через dd (замените sdX на тот что из lsblk): +```bash +sudo dd if=build/youtube2.iso of=/dev/sdX bs=4M status=progress oflag=sync +``` + +## Добавление видео + +### Скачать из ютуба + +Установите `yt-dlp` для работы скриптов. + +Скачать одно видео: + +```bash +./dl-video.sh https://www.youtube.com/watch?v= +``` + +Скачать плейлист: + +```bash +./dl-playlist.sh https://www.youtube.com/playlist?list= +``` + +К скриптам также можно добавлять аргументы для `yt-dlp`, например `./dl-video.sh ... --cookies-from-browser firefox` для импортирования куки-файлов из файрфокса + +### Ручное добавление + +1. Добавьте json файл `.json` в папку `videos/`: +```json +{ + "name": "Название видео", + "description": "Описание видео", + "video-file": ".mp4", + "image-file": ".png", + "channel-name": "Название канала", + "channel-avatar-file": ".png", +} +``` + +2. Добавьте видео файл `.mp4` в папку `videos/` +3. Добавьте превью видео `.png` в папку `videos/` +4. Добавьте `.png` в папку `videos/` + +## Сжатие видео + +Для сжатия всех видео в `.av1` формат, используйте эту ffmpeg команду (если у вас изначальный формат не `.mp4` то замените) + +Используйте скрипт `convert-to-av1.sh`: + +```bash +./convert-to-av1.sh +``` + +Учтите что формат видео `.av1` поддерживается не везде! \ No newline at end of file diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..50b8c3a --- /dev/null +++ b/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +mkdir build +cp -r root build/iso +cp -r www build/iso/www +cp -r videos build/iso/www/videos +find videos -type f -name "*.json" | sed 's|^videos/||; s|\.json$||' > build/iso/www/videos.txt +truncate -s -1 build/iso/www/videos.txt +mkisofs -o build/youtube2.iso -V "Youtube2" -J -r build/iso \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..e69de29 diff --git a/convert-to-av1.sh b/convert-to-av1.sh new file mode 100644 index 0000000..75bdc9d --- /dev/null +++ b/convert-to-av1.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +for video_file in videos/*.mp4; do + base_name=$(basename "$video_file" .mp4) + + ffmpeg -i "$video_file" -c:v libaom-av1 -crf 23 -b:v 0 -cpu-used 4 -g 240 -strict -2 "videos/$base_name.av1.mp4" || exit 1 + + mv "videos/$base_name.av1.mp4" "$video_file" +done \ No newline at end of file diff --git a/dl-playlist.sh b/dl-playlist.sh new file mode 100644 index 0000000..a0fd8d1 --- /dev/null +++ b/dl-playlist.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [ -z "$1" ]; then + echo "Ошибка: укажите ссылку на плейлист." + exit 1 +fi + +PLAYLIST_URL=$1 +shift + +VIDEO_URLS=$(yt-dlp --flat-playlist -i --print url "$PLAYLIST_URL") + +for VIDEO_URL in $VIDEO_URLS; do + echo "Загружаем видео: $VIDEO_URL" + ./dl-video "$VIDEO_URL" "$@" +done + +echo "Плейлист успешно скачан" \ No newline at end of file diff --git a/dl-video.sh b/dl-video.sh new file mode 100644 index 0000000..12b589e --- /dev/null +++ b/dl-video.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +if [ -z "$1" ]; then + echo "Ошибка: укажите ссылку на видео." + exit 1 +fi + +VIDEO_URL=$1 +shift +ADDITIONAL_ARGS="$@" + +VIDEO_ID=$(echo -n "$VIDEO_URL" | md5sum | awk '{print $1}') + +mkdir -p "videos" + +yt-dlp --write-info-json --write-thumbnail \ + -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" \ + -o "videos/${VIDEO_ID}" "$VIDEO_URL" $ADDITIONAL_ARGS + +NAME=$(jq -r '.fulltitle' "videos/${VIDEO_ID}.info.json") +DESCRIPTION=$(jq -r '.description' "videos/${VIDEO_ID}.info.json") +CHANNEL_NAME=$(jq -r '.uploader' "videos/${VIDEO_ID}.info.json") +CHANNEL_ID=$(jq -r '.channel_id' "videos/${VIDEO_ID}.info.json") +CHANNEL_URL=$(jq -r '.uploader_url' "videos/${VIDEO_ID}.info.json") + +yt-dlp --write-thumbnail --skip-download --playlist-items 0 -o "videos/${CHANNEL_ID}" "$CHANNEL_URL" $ADDITIONAL_ARGS + +jq --arg name "$NAME" --arg description "$DESCRIPTION" --arg video_file "${VIDEO_ID}.mp4" \ + --arg image_file "${VIDEO_ID}.png" --arg channel_name "$CHANNEL_NAME" \ + --arg channel_avatar_file "${CHANNEL_ID}.png" \ + '{ + name: $name, + description: $description, + "video-file": $video_file, + "image-file": $image_file, + "channel-name": $channel_name, + "channel-avatar-file": $channel_avatar_file + }' \ + "videos/${VIDEO_ID}.info.json" > "videos/${VIDEO_ID}.tmp.json" && mv "videos/${VIDEO_ID}.tmp.json" "videos/${VIDEO_ID}.json" + +rm "videos/${VIDEO_ID}.info.json" + +echo "Видео успешно скачано" \ No newline at end of file diff --git a/root/autorun.inf b/root/autorun.inf new file mode 100644 index 0000000..961454d --- /dev/null +++ b/root/autorun.inf @@ -0,0 +1,3 @@ +[AutoRun] +open=./www/index.html +label=Run Youtube2 diff --git a/root/start.command b/root/start.command new file mode 100644 index 0000000..d69dc79 --- /dev/null +++ b/root/start.command @@ -0,0 +1,2 @@ +#!/bin/bash +open "./www/index.html" diff --git a/root/start.desktop b/root/start.desktop new file mode 100644 index 0000000..426b351 --- /dev/null +++ b/root/start.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Run Youtube2 +Type=Application +Exec=xdg-open ./www/index.html +Icon=html +Terminal=false diff --git a/root/start.sh b/root/start.sh new file mode 100644 index 0000000..e4c13c1 --- /dev/null +++ b/root/start.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xdg-open "./www/index.html" \ No newline at end of file diff --git a/root/start.url b/root/start.url new file mode 100644 index 0000000..4ba1691 --- /dev/null +++ b/root/start.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=./www/index.html diff --git a/root/start.webloc b/root/start.webloc new file mode 100644 index 0000000..bb2e691 --- /dev/null +++ b/root/start.webloc @@ -0,0 +1,9 @@ + + + + + URL + ./www/index.html + + diff --git a/www/index.html b/www/index.html new file mode 100644 index 0000000..d05f91e --- /dev/null +++ b/www/index.html @@ -0,0 +1,11 @@ + + + + + + Youtube 2 + + + + + \ No newline at end of file