diff --git a/.gitignore b/.gitignore index 914e2f0..525b3df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /build /videos/* -!/videos/video-example.json \ No newline at end of file +!/videos/video-example.json +/test \ No newline at end of file diff --git a/README.md b/README.md index cb7fce9..e15c117 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Это лишь попытка создать чтото похожее на [оригинальный ютуб 2 от Влада Кунякина](https://www.youtube.com/watch?v=Ywywiqissfg) \ Если вы хотите получить оригинальный ютуб 2, то [покупайте флешку тут](https://t.me/kunyakin/16) +![screenshot](image.png) + ## Как собрать 1. Добавьте все видео в папку `videos/` (смотреть Добавление видео) diff --git a/av1-dl-video.sh b/av1-dl-video.sh index 873bb83..d05c08b 100644 --- a/av1-dl-video.sh +++ b/av1-dl-video.sh @@ -7,7 +7,7 @@ fi VIDEO_URL=$1 shift -ADDITIONAL_ARGS="$@" +ADDITIONAL_ARGS="$@" VIDEO_ID=$(echo -n "$VIDEO_URL" | md5sum | awk '{print $1}') @@ -22,8 +22,8 @@ yt-dlp --skip-download --write-thumbnail -o "videos/${VIDEO_ID}_preview" "$VIDEO PREVIEW_FILENAME=$(find videos -type f -iname "${VIDEO_ID}_preview*") yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" -o "videos/${VIDEO_ID}_video" "$VIDEO_URL" $ADDITIONAL_ARGS VIDEO_FILENAME=$(find videos -type f -iname "${VIDEO_ID}_video*") - -ffmpeg -i $VIDEO_FILENAME -c:v libsvtav1 -crf 15 -preset 4 -c:a copy "videos/${VIDEO_ID}.mkv" + +ffmpeg -i $VIDEO_FILENAME -c:v libsvtav1 -c:a copy "videos/${VIDEO_ID}_video.mkv" # ffmpeg -i "$VIDEO_FILENAME" \ # -vf "scale='min(1920,iw)':'min(1080,ih)':force_original_aspect_ratio=decrease" \ diff --git a/build.sh b/build.sh index dcbdc8d..dae0845 100644 --- a/build.sh +++ b/build.sh @@ -13,4 +13,4 @@ for i in build/iso/www/videos/*.json; do done echo "]" >> build/iso/www/videos.js rm build/iso/www/videos/*.json -mkisofs -r -J -o build/youtube2.iso -V "Youtube2" build/iso \ No newline at end of file +mkisofs -iso-level 3 -r -J -o build/youtube2.iso -V "Youtube2" build/iso diff --git a/dl-video.sh b/dl-video.sh index 0180bc9..68b67a9 100644 --- a/dl-video.sh +++ b/dl-video.sh @@ -11,6 +11,10 @@ ADDITIONAL_ARGS="$@" VIDEO_ID=$(echo -n "$VIDEO_URL" | md5sum | awk '{print $1}') +if [ -f "videos/${VIDEO_ID}.json" ]; then + exit 0 +fi + mkdir -p "videos" yt-dlp --skip-download --write-info-json -o "videos/${VIDEO_ID}" "$VIDEO_URL" $ADDITIONAL_ARGS @@ -58,4 +62,4 @@ jq --arg id "$VIDEO_ID" \ rm "videos/${VIDEO_ID}.info.json" -echo "Видео успешно скачано" \ No newline at end of file +echo "Видео успешно скачано" diff --git a/image.png b/image.png new file mode 100644 index 0000000..3de3ac5 Binary files /dev/null and b/image.png differ diff --git a/nvenc-compress-all.sh b/nvenc-compress-all.sh index 276b0e0..a1dcdf0 100644 --- a/nvenc-compress-all.sh +++ b/nvenc-compress-all.sh @@ -1,14 +1,9 @@ #!/bin/bash -function compress_video { - ffmpeg -i videos/$1 -c:v hevc_nvenc -preset p4 -rc vbr -cq 28 -b:v 0 -c:a aac -b:a 96k videos/tmp_$1 - mv videos/tmp_$1 videos/$1 -} - for video_file in videos/*.mp4; do base_name=$(basename "$video_file") - compress_video $base_name & + ./nvenc-compress.sh $base_name & done wait \ No newline at end of file diff --git a/nvenc-compress.sh b/nvenc-compress.sh index 4d0a691..0121733 100644 --- a/nvenc-compress.sh +++ b/nvenc-compress.sh @@ -6,7 +6,7 @@ if [ -z "$1" ]; then fi function compress_video { - ffmpeg -i videos/$1 -c:v hevc_nvenc -preset p4 -rc vbr -cq 28 -b:v 0 -c:a aac -b:a 96k videos/tmp_$1 + ffmpeg -i videos/$1 -c:v hevc_nvenc -tune ll -crf 26 -preset p7 videos/tmp_$1 mv videos/tmp_$1 videos/$1 } diff --git a/nvenc-dl-playlist.sh b/nvenc-dl-playlist.sh new file mode 100644 index 0000000..f92b64b --- /dev/null +++ b/nvenc-dl-playlist.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if [ -z "$1" ]; then + echo "Ошибка: укажите ссылку на плейлист." + exit 1 +fi + +PLAYLIST_URL=$1 +shift + +VIDEO_URLS=$(yt-dlp --flat-playlist --print webpage_url "$PLAYLIST_URL") + +echo "$VIDEO_URLS" | wc -l + +for VIDEO_URL in $VIDEO_URLS; do + echo "Загружаем видео: $VIDEO_URL" + ./nvenc-dl-video.sh "$VIDEO_URL" "$@" +done + +echo "Плейлист успешно скачан" \ No newline at end of file diff --git a/nvenc-dl-video.sh b/nvenc-dl-video.sh new file mode 100644 index 0000000..fc02159 --- /dev/null +++ b/nvenc-dl-video.sh @@ -0,0 +1,68 @@ +#!/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" + +if [ -f "videos/${VIDEO_ID}.json" ]; then + exit 0 +fi + +yt-dlp --skip-download --write-info-json -o "videos/${VIDEO_ID}" "$VIDEO_URL" $ADDITIONAL_ARGS +yt-dlp --skip-download --write-thumbnail -o "videos/${VIDEO_ID}_preview" "$VIDEO_URL" $ADDITIONAL_ARGS +PREVIEW_FILENAME=$(find videos -type f -iname "${VIDEO_ID}_preview*") +yt-dlp -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" -o "videos/${VIDEO_ID}_video" "$VIDEO_URL" $ADDITIONAL_ARGS +VIDEO_FILENAME=$(find videos -type f -iname "${VIDEO_ID}_video*") +mv $VIDEO_FILENAME "videos/${VIDEO_ID}_video.mp4" +VIDEO_FILENAME="videos/${VIDEO_ID}_video.mp4" + +ffmpeg -i videos/${VIDEO_ID}_video.mp4 -c:v hevc_nvenc -tune ll -crf 26 -preset p7 videos/${VIDEO_ID}_video_compressed.mp4 +VIDEO_FILENAME="videos/${VIDEO_ID}_video_compressed.mp4" + +# ffmpeg -i "$VIDEO_FILENAME" \ +# -vf "scale='min(1920,iw)':'min(1080,ih)':force_original_aspect_ratio=decrease" \ +# -c:v libx264 -preset slow -crf 23 \ +# -c:a copy \ +# "videos/${VIDEO_ID}_video_compressed.mp4" + + +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}_avatar" "$CHANNEL_URL" $ADDITIONAL_ARGS +AVATAR_FILENAME=$(find videos -type f -iname "${CHANNEL_ID}_avatar*") + +jq --arg id "$VIDEO_ID" \ + --arg name "$NAME" \ + --arg description "$DESCRIPTION" \ + --arg video_file "${VIDEO_FILENAME}" \ + --arg image_file "${PREVIEW_FILENAME}" \ + --arg channel_name "$CHANNEL_NAME" \ + --arg channel_avatar_file "${AVATAR_FILENAME}" \ + '{ + id: $id, + 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}.json" + +rm "videos/${VIDEO_ID}.info.json" + +echo "Видео успешно скачано" \ No newline at end of file diff --git a/test-compressing.sh b/test-compressing.sh new file mode 100644 index 0000000..0a6e280 --- /dev/null +++ b/test-compressing.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +mkdir -p test + +echo "download test video" +yt-dlp -o test/video -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" https://www.youtube.com/watch?v=G3C-VevI36s + +# echo "av1 test 1" +# ffmpeg -i "test/video.mp4" -c:v libsvtav1 -crf 23 -b:v 0 -cpu-used 4 -g 240 -strict -2 "test/video.av1.1.mp4" & +# echo "av1 test 2" +# ffmpeg -i "test/video.mp4" -c:v libsvtav1 -crf 23 "test/video.av1.2.mp4" & +# echo "av1 test 3" +# ffmpeg -i "test/video.mp4" -c:v libsvtav1 -crf 30 "test/video.av1.3.mp4" & +# echo "av1 test 4" +# ffmpeg -i "test/video.mp4" -c:v libsvtav1 "test/video.av1.4.mp4" & +# wait +# echo "libaom-av1 test 1" +# ffmpeg -i "test/video.mp4" -c:v libaom-av1 -crf 23 -b:v 0 -cpu-used 4 -g 240 -strict -2 "test/video.libaom-av1.1.mp4" & +# echo "libaom-av1 test 2" +# ffmpeg -i "test/video.mp4" -c:v libaom-av1 -crf 23 "test/video.libaom-av1.2.mp4" & +# echo "libaom-av1 test 3" +# ffmpeg -i "test/video.mp4" -c:v libaom-av1 -crf 30 "test/video.libaom-av1.3.mp4" & +# echo "libaom-av1 test 4" +# ffmpeg -i "test/video.mp4" -c:v libaom-av1 "test/video.libaom-av1.4.mp4" & +# wait +# echo "nvenc test 1" +# ffmpeg -i "test/video.mp4" -c:v hevc_nvenc -tune ll -crf 26 -preset p7 "test/video.nvenc.1.mp4" & +# echo "nvenc test 2" +# ffmpeg -i "test/video.mp4" -c:v hevc_nvenc -crf 26 -preset p7 "test/video.nvenc.2.mp4" & +# wait +# echo "nvenc test 3" +# ffmpeg -i "test/video.mp4" -c:v hevc_nvenc -crf 30 -preset p7 "test/video.nvenc.3.mp4" & +# echo "nvenc test 4" +# fmpeg -i "test/video.mp4" -c:v hevc_nvenc -crf 30 "test/video.nvenc.4.mp4" & +# wait +# echo "nvenc test 5" +# ffmpeg -i "test/video.mp4" -c:v hevc_nvenc -preset p7 "test/video.nvenc.5.mp4" & +# echo "nvenc test 6" +# ffmpeg -i "test/video.mp4" -c:v hevc_nvenc "test/video.nvenc.6.mp4" & +# wait +ffmpeg -i "test/video.mp4" \ + -c:v h264_nvenc \ + -preset p7 \ + -tune hq \ + -cq 50 \ + -profile main "test/video.nvenc.7.mp4"