From ddce86afaf99392089e65cfa30464bbe1754e66e Mon Sep 17 00:00:00 2001 From: MeexReay Date: Thu, 24 Apr 2025 23:24:26 +0300 Subject: [PATCH] some fixes --- README.md | 18 +++++++++++++++--- compress-videos.sh | 17 +++++++++++++++++ convert-to-av1.sh | 18 +++++++++++++++--- dl-video.sh | 8 ++++++++ 4 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 compress-videos.sh diff --git a/README.md b/README.md index d1741dc..cb7fce9 100644 --- a/README.md +++ b/README.md @@ -53,12 +53,24 @@ sudo dd if=build/youtube2.iso of=/dev/sdX bs=4M status=progress ## Сжатие видео -Для сжатия всех видео в `.av1` формат, используйте эту ffmpeg команду (если у вас изначальный формат не `.mp4` то замените) +### Сжатие до Full HD -Используйте скрипт `convert-to-av1.sh`: +Используйте скрипт `compress-videos.sh` для сжатия до Full HD: + +```bash +./compress-videos.sh +``` + +Он сожмет все видео в папке `videos/` + +### Конвертация в AV1 + +Используйте скрипт `convert-to-av1.sh` для сжатия в `AV1`: ```bash ./convert-to-av1.sh ``` -Учтите что формат видео `.av1` поддерживается не везде! \ No newline at end of file +Он переконвернирует все видео в папке `videos/` + +Этот вариант лучше сжимает видео без потери качества, но минус в том что формат может не везде поддерживаться \ No newline at end of file diff --git a/compress-videos.sh b/compress-videos.sh new file mode 100644 index 0000000..de3cf40 --- /dev/null +++ b/compress-videos.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +for video_file in videos/*.mp4; do + base_name=$(basename "$video_file" .mp4) + + ffmpeg -i "$video_file" \ + -vf "scale='min(1920,iw)':'min(1080,ih)':force_original_aspect_ratio=decrease" \ + -c:v libx264 -preset slow -crf 23 \ + -c:a copy \ + "videos/${base_name}.compressed.mp4" || exit 1 + + for json_file in videos/*.json; do + sed -i "s/$base_name.mp4/$base_name.compressed.mp4/g" "$json_file" + done + + rm videos/$base_name.mp4 +done \ No newline at end of file diff --git a/convert-to-av1.sh b/convert-to-av1.sh index 75bdc9d..dbcfa3d 100644 --- a/convert-to-av1.sh +++ b/convert-to-av1.sh @@ -3,7 +3,19 @@ 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" + codec_check=$(ffmpeg -i "$video_file" 2>&1 | grep -o 'Video: av1') + if [[ -n "$codec_check" ]]; then + echo "Skipping $video_file as it already AV1 encoded" + continue + fi + + echo "Converting videos/$base_name.mp4 to videos/$base_name.av1.mp4" + + ffmpeg -i "videos/$base_name.mp4" -c:v libsvtav1 -crf 23 -b:v 0 -cpu-used 4 -g 240 -strict -2 "videos/$base_name.av1.mp4" || exit 1 + + for json_file in videos/*.json; do + sed -i "s/$base_name.mp4/$base_name.av1.mp4/g" "$json_file" + done + + rm videos/$base_name.mp4 done \ No newline at end of file diff --git a/dl-video.sh b/dl-video.sh index 407e103..9d725b2 100644 --- a/dl-video.sh +++ b/dl-video.sh @@ -19,6 +19,14 @@ 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" \ +# -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" + +# mv "videos/${VIDEO_ID}_video_compressed.mp4" "$VIDEO_FILENAME" + 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")