From fb53b03128ea335de72f0462a2813e5fb5de48d8 Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Wed, 26 Feb 2025 10:01:48 +0300 Subject: [PATCH] rename file and video tools add --- Script/alias_main | 22 ++-- Script/{a_download => download} | 0 Script/{a_hdd => hdd} | 0 Script/{a_image => image} | 0 Script/img_and_wav2video | 126 +++++++++++++++++++++ Script/{a_install => install} | 0 Script/{a_lang => lang} | 0 Script/{a_openwrt => openwrt} | 0 {video_tools => Script}/parse_arg_lib | 61 +++++----- Script/{a_pdf => pdf} | 0 Script/{a_ssh => ssh} | 0 Script/{a_utils => utils} | 0 Script/{a_video => video} | 0 video_tools/1_download.bash | 2 - video_tools/2_encode_320.bash | 6 - video_tools/3_encode_640.bash | 6 - video_tools/auto_download_internet_video/dl-list | 1 - video_tools/auto_download_internet_video/dl_video | 4 - video_tools/auto_download_internet_video/run | 25 ----- video_tools/img_and_wav2video | 130 ---------------------- video_tools/union_video_and_audio.bash | 3 - 21 files changed, 171 insertions(+), 215 deletions(-) rename Script/{a_download => download} (100%) rename Script/{a_hdd => hdd} (100%) rename Script/{a_image => image} (100%) create mode 100755 Script/img_and_wav2video rename Script/{a_install => install} (100%) rename Script/{a_lang => lang} (100%) rename Script/{a_openwrt => openwrt} (100%) rename {video_tools => Script}/parse_arg_lib (61%) rename Script/{a_pdf => pdf} (100%) rename Script/{a_ssh => ssh} (100%) rename Script/{a_utils => utils} (100%) rename Script/{a_video => video} (100%) delete mode 100755 video_tools/1_download.bash delete mode 100755 video_tools/2_encode_320.bash delete mode 100755 video_tools/3_encode_640.bash delete mode 100644 video_tools/auto_download_internet_video/dl-list delete mode 100755 video_tools/auto_download_internet_video/dl_video delete mode 100755 video_tools/auto_download_internet_video/run delete mode 100755 video_tools/img_and_wav2video delete mode 100755 video_tools/union_video_and_audio.bash diff --git a/Script/alias_main b/Script/alias_main index fa5e6f3..ba8a314 100755 --- a/Script/alias_main +++ b/Script/alias_main @@ -18,16 +18,18 @@ ask_continue() } -source "${alias_dir}/a_install" -source "${alias_dir}/a_pdf" -source "${alias_dir}/a_hdd" -source "${alias_dir}/a_openwrt" -source "${alias_dir}/a_utils" -source "${alias_dir}/a_video" -source "${alias_dir}/a_image" -source "${alias_dir}/a_ssh" -source "${alias_dir}/a_download" -source "${alias_dir}/a_lang" +source "${alias_dir}/install" +source "${alias_dir}/pdf" +source "${alias_dir}/hdd" +source "${alias_dir}/openwrt" +source "${alias_dir}/utils" +source "${alias_dir}/video" +source "${alias_dir}/image" +source "${alias_dir}/ssh" +source "${alias_dir}/download" +source "${alias_dir}/lang" +source "${alias_dir}/parse_arg_lib" +source "${alias_dir}/img_and_wav2video" diff --git a/Script/a_download b/Script/download similarity index 100% rename from Script/a_download rename to Script/download diff --git a/Script/a_hdd b/Script/hdd similarity index 100% rename from Script/a_hdd rename to Script/hdd diff --git a/Script/a_image b/Script/image similarity index 100% rename from Script/a_image rename to Script/image diff --git a/Script/img_and_wav2video b/Script/img_and_wav2video new file mode 100755 index 0000000..c8be900 --- /dev/null +++ b/Script/img_and_wav2video @@ -0,0 +1,126 @@ +#!/bin/bash +# Общественное достояние, 2024, Алексей Безбородов (Alexei Bezborodov) + +img_and_wav2video() +{ + # Объединение картинки и звука в видео + + version=1.0 + + # Формат: + # "Однобуквенная команда|Расширенная команда|Справка|Параметр|Значение по умолчанию|Команда на исполнение" + # Параметр: Пусто - нет параметров, : - есть параметр, :: - параметр не обязателен + + common_params=( + "h|help|Посмотреть помощь.|||ShowHelp; return 1;" + "v|version|Посмотреть версию программы.|||echo \$version; return 1;" + "V|verbose|Подробный вывод.|||verbose=true" + ) + + sound_params=( + "a|audio|Входной файл с аудиодорожкой.|:||" + "b|audio_options||:|'-c:a aac -b:a 128k'|" + ) + + video_params=( + "i|image|Входной файл с изображением.|:||" + "o|output|Выходной видео файл.|:|''|" + "W|video_width|Размер видео в пикселях по ширине. По умолчанию '!DEFAULT!'.|:|1920|" + "H|video_height|Размер видео в пикселях по высоте. По умолчанию '!DEFAULT!'.|:|1080|" + "p|ffmpeg_pre_options|Опции ffmpeg в самом начале. По умолчанию '!DEFAULT!'.|:|'-loop 1 -r 1'|" + "P|ffmpeg_options|Опции ffmpeg. По умолчанию '!DEFAULT!'.|:|'-c:v libx264 -tune stillimage -preset ultrafast -crf 20 -shortest -pix_fmt yuv420p'|" + ) + + all_params=("${common_params[@]}" "${sound_params[@]}" "${video_params[@]}") + + function ShowHelp() { + return " +Использование: img_and_wav2video -i -a [-o ] [-hV] +Объединение картинки и звука в видео + +Общие параметры +$(ProcessParams common_params Params2Help) + +Параметры звука +$(ProcessParams sound_params Params2Help) + +Параметры видео +$(ProcessParams video_params Params2Help) + +Примеры: + +img_and_wav2video -i image.jpg -a audio.wav -o out.mp4 +# Расширенный вывод +img_and_wav2video -i image.jpg -a audio.wav -o out.mp4 -V +" + } + + mainloop=$(MakeMainLoop "all_params") + echo "$mainloop" + eval "$mainloop" + + # ------------------------------------------- + + # Главный цикл обработки входных параметров + eval "$main_loop" + + image_file="$image" + audio_file="$audio" + out_file="$output" + + unuse_param="$*" + if [ "${image_file}" = "" ] || [ "${audio_file}" = "" ] || [ "${unuse_param}" != "" ]; then + [ "${unuse_param}" != "" ] && echo "Параметры не расшифрованы \"$unuse_param\"" + ShowHelp + return 1 + fi + + [ "$out_file" = "" ] && { out_file="${image_file}.mp4"; + [ $verbose ] && echo "Выходное имя файла \"$out_file\""; } + + MakeVideo "${image_file}" "${audio_file}" "${out_file}" +} +mkalias_with_prefix 'img_and_wav2video' + +#---------------------------------------------------- + +function PlayTime { + local audio_file=$1 + + out=$(soxi -D "${audio_file}") + int=$(echo "$out/1" | bc) + echo "$int" +} + +function MakeVideo { + local image_file=$1 + local audio_file=$2 + local mp4_file=$3 + + local resized_image_file=$(mktemp -t "MakeVideo_resized_page_image_XXXXXXXXXXX.png" +) + + local cmd="ffmpeg -y -i \"${image_file}\" -filter_complex \"[0]scale=${video_width}:${video_height}:force_original_aspect_ratio=decrease,pad=${video_width}:${video_height}:(ow-iw)/2:(oh-ih)/2[scale];[scale]split=2[bg][fg];[bg]drawbox=c=white@1:replace=1:t=fill[bg];[bg][fg]overlay=format=auto\" \"${resized_image_file}\"" + [ $verbose ] && echo "cmd $cmd" + eval "$cmd" + [ $verbose ] && echo "ffmpeg $?" + + local play_time=$(PlayTime "${audio_file}") + [ $verbose ] && echo "play_time ${play_time}" + play_time_plus1=$(( $play_time + 1 )) + + water_mark='' + float_image='' +# video_filter="-filter_complex \"${water_mark}\" -map \"1:a\"" + video_filter="-map 0 -map \"1:a\"" + + cmd="ffmpeg -y ${ffmpeg_pre_options} -i \"${resized_image_file}\" ${float_image} -i \"${audio_file}\" ${video_filter} ${ffmpeg_options} ${audio_options} -t \"${play_time}\" \"${mp4_file}\"" + [ $verbose ] && echo "cmd $cmd" + eval "$cmd" + [ $verbose ] && echo "ffmpeg $?" + + rm "${resized_image_file}" +} + + + diff --git a/Script/a_install b/Script/install similarity index 100% rename from Script/a_install rename to Script/install diff --git a/Script/a_lang b/Script/lang similarity index 100% rename from Script/a_lang rename to Script/lang diff --git a/Script/a_openwrt b/Script/openwrt similarity index 100% rename from Script/a_openwrt rename to Script/openwrt diff --git a/video_tools/parse_arg_lib b/Script/parse_arg_lib similarity index 61% rename from video_tools/parse_arg_lib rename to Script/parse_arg_lib index 05f3c12..a904ce4 100755 --- a/video_tools/parse_arg_lib +++ b/Script/parse_arg_lib @@ -72,7 +72,7 @@ function Params2Case { eval "$param_var" if [ "$custom_arg1" = "-${small_cmd}" ] || [ "$custom_arg1" = "-${large_cmd}" ] || [ "$custom_arg1" = "--${large_cmd}" ]; then - clear_custom_cmd="${custom_cmd//[$'\t\r\n ']/}" + clear_custom_cmd="${custom_cmd//[$\'\t\r\n \']/}" if [ "${clear_custom_cmd}" != "" ]; then eval "${custom_cmd}" else @@ -81,30 +81,35 @@ function Params2Case { fi } -# Инициализация переменных -ProcessParams all_params Params2InitVar - -# $@ is all command line parameters passed to the script. -# -o is for short options like -v -# -l is for long options with double dash like --version -# the comma separates different long options -# -a is for long options with single dash like -version -# Example -# 'h' is a no-value option. -# 'v:' implies that option -v has value and is a mandatory option. ':' means has a value. -# 't::' implies that option -t has value but is optional. '::' means optional. -small_params_list=$(ProcessParams all_params Params2small_list) -small_params_list="${small_params_list:1}" - -large_params_list=$(ProcessParams all_params Params2large_list) -large_params_list="${large_params_list:1}" - -options=$(getopt --long "$large_params_list" -o "$small_params_list" -a -- "$@") - -# set --: -# If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters -# are set to the arguments, even if some of them begin with a ‘-’. -eval set -- "$options" - -main_loop='while true; do cur_arg="$1"; [ "$cur_arg" = "--" ] && { shift; break; }; ProcessParams all_params Params2Case "$cur_arg" "$2"; shift; done' - +function MakeMainLoop { + all_params_var_name=$1 + mainloop=' + # Инициализация переменных + ProcessParams all_params_array Params2InitVar + + # $@ is all command line parameters passed to the script. + # -o is for short options like -v + # -l is for long options with double dash like --version + # the comma separates different long options + # -a is for long options with single dash like -version + # Example + # "h" is a no-value option. + # "v:" implies that option -v has value and is a mandatory option. ":" means has a value. + # "t::" implies that option -t has value but is optional. "::" means optional. + small_params_list=$(ProcessParams all_params_array Params2small_list) + small_params_list="${small_params_list:1}" + + large_params_list=$(ProcessParams all_params_array Params2large_list) + large_params_list="${large_params_list:1}" + + options=$(getopt --long "$large_params_list" -o "$small_params_list" -a -- "$@") + + # set --: + # If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters + # are set to the arguments, even if some of them begin with a ‘-’. + eval set -- "$options" + + while true; do cur_arg="$1"; [ "$cur_arg" = "--" ] && { shift; break; }; ProcessParams all_params_array Params2Case "$cur_arg" "$2"; shift; done + ' + retun "${mainloop//all_params_array/$all_params_var_name}" +} diff --git a/Script/a_pdf b/Script/pdf similarity index 100% rename from Script/a_pdf rename to Script/pdf diff --git a/Script/a_ssh b/Script/ssh similarity index 100% rename from Script/a_ssh rename to Script/ssh diff --git a/Script/a_utils b/Script/utils similarity index 100% rename from Script/a_utils rename to Script/utils diff --git a/Script/a_video b/Script/video similarity index 100% rename from Script/a_video rename to Script/video diff --git a/video_tools/1_download.bash b/video_tools/1_download.bash deleted file mode 100755 index c51e1e3..0000000 --- a/video_tools/1_download.bash +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -youtube-dl -f "worstvideo+worstaudio/hls-193/hls-194/hls-196/hls-192/hls-195/hls-208/mpd-1/worst" -i -o "%(upload_date)s-%(title)s-%(id)s.%(ext)s" $1 diff --git a/video_tools/2_encode_320.bash b/video_tools/2_encode_320.bash deleted file mode 100755 index 91379d7..0000000 --- a/video_tools/2_encode_320.bash +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# youtube-dl -f "worst" -o "%(upload_date)s-%(title)s-%(id)s.%(ext)s" $1 -#ffmpeg -i $1 -vcodec libx264 -vb 100K -s 320x240 -acodec libmp3lame -ab 16K $1.mkv -#ffmpeg -i $1 -vcodec libxvid -vb 100K -s 320x240 -acodec libmp3lame -ab 16K $1.mkv -#ffmpeg -i $1 -vcodec copy -acodec libopus -ab 20k -strict -2 $1_new.mp4 -ffmpeg -i "$1" -vcodec libx264 -vb 100K -s 320x240 -acodec libopus -ab 20k -strict -2 "$1_320.mp4" diff --git a/video_tools/3_encode_640.bash b/video_tools/3_encode_640.bash deleted file mode 100755 index f5538d2..0000000 --- a/video_tools/3_encode_640.bash +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# youtube-dl -f "worst" -o "%(upload_date)s-%(title)s-%(id)s.%(ext)s" $1 -#ffmpeg -i $1 -vcodec libx264 -vb 100K -s 320x240 -acodec libmp3lame -ab 16K $1.mkv -#ffmpeg -i $1 -vcodec libxvid -vb 100K -s 320x240 -acodec libmp3lame -ab 16K $1.mkv -#ffmpeg -i $1 -vcodec copy -acodec libopus -ab 20k -strict -2 $1_new.mp4 -ffmpeg -i "$1" -vcodec libx264 -vb 500K -s 640x480 -acodec libopus -ab 20k -strict -2 "$1_640.mp4" diff --git a/video_tools/auto_download_internet_video/dl-list b/video_tools/auto_download_internet_video/dl-list deleted file mode 100644 index ea96cb6..0000000 --- a/video_tools/auto_download_internet_video/dl-list +++ /dev/null @@ -1 +0,0 @@ -# name url diff --git a/video_tools/auto_download_internet_video/dl_video b/video_tools/auto_download_internet_video/dl_video deleted file mode 100755 index 98aed59..0000000 --- a/video_tools/auto_download_internet_video/dl_video +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -/usr/local/bin/youtube-dl --playlist-end 3 --max-downloads 3 -f "worst" -i -o "%(upload_date)s-%(title)s-%(id)s.%(ext)s" $1 -# worstvideo+worstaudio -xwik -r 1M diff --git a/video_tools/auto_download_internet_video/run b/video_tools/auto_download_internet_video/run deleted file mode 100755 index 966502b..0000000 --- a/video_tools/auto_download_internet_video/run +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -curdir=$(pwd) - -cd "$curdir" - -cat dl-list | while read LINE; -do - echo "read line: $LINE" - array=(${LINE// / }) - folder=${array[0]} - url=${array[1]} - echo "$(date +%yy%mm%dd-%Hh%Mm%Ss): Folder $folder, Url $url" >> "$curdir/1sys_log.txt" - - cd "$curdir" - - mkdir "$folder" - cd "$folder" - - find . -mtime +30 -type f -delete >> "$curdir/1sys_log.txt" - - $curdir/dl_video $url >> "$curdir/1log.txt" -done - - diff --git a/video_tools/img_and_wav2video b/video_tools/img_and_wav2video deleted file mode 100755 index 633ce68..0000000 --- a/video_tools/img_and_wav2video +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/bash -# Общественное достояние, 2024, Алексей Безбородов (Alexei Bezborodov) - -# Объединение картинки и звука в видео - -version=1.0 - -# Формат: -# "Однобуквенная команда|Расширенная команда|Справка|Параметр|Значение по умолчанию|Команда на исполнение" -# Параметр: Пусто - нет параметров, : - есть параметр, :: - параметр не обязателен - -common_params=( - "h|help|Посмотреть помощь.|||ShowHelp; exit;" - "v|version|Посмотреть версию программы.|||echo \$version; exit;" - "V|verbose|Подробный вывод.|||verbose=true" - ) - -sound_params=( - "a|audio|Входной файл с аудиодорожкой.|:||" - "b|audio_options||:|'-c:a aac -b:a 128k'|" - ) - -video_params=( - "i|image|Входной файл с изображением.|:||" - "o|output|Выходной видео файл.|:|''|" - "W|video_width|Размер видео в пикселях по ширине. По умолчанию '!DEFAULT!'.|:|1920|" - "H|video_height|Размер видео в пикселях по высоте. По умолчанию '!DEFAULT!'.|:|1080|" - "p|ffmpeg_pre_options|Опции ffmpeg в самом начале. По умолчанию '!DEFAULT!'.|:|'-loop 1 -r 1'|" - "P|ffmpeg_options|Опции ffmpeg. По умолчанию '!DEFAULT!'.|:|'-c:v libx264 -tune stillimage -preset ultrafast -crf 20 -shortest -pix_fmt yuv420p'|" - ) - -all_params=("${common_params[@]}" "${sound_params[@]}" "${video_params[@]}") - -# Загружаем библиотеку -function GetExec { - local exec_file_name="$1" - - exec="./$exec_file_name" - [ ! -f "$exec" ] && exec="~/$exec_file_name" - - echo "$exec" -} - -eval "source $(GetExec "parse_arg_lib")" - -function ShowHelp() { -cat << EOF -Использование: img_and_wav2video -i -a [-o ] [-hV] -Озвучивание русского текста из файла pdf и сохранение в видео - -Общие параметры -$(ProcessParams common_params Params2Help) - -Параметры звука -$(ProcessParams sound_params Params2Help) - -Параметры видео -$(ProcessParams video_params Params2Help) - -Примеры: - -img_and_wav2video -i image.jpg -a audio.wav -o out.mp4 -# Расширенный вывод -img_and_wav2video -i image.jpg -a audio.wav -o out.mp4 -V - -EOF -} - -# ------------------------------------------- - -# Главный цикл обработки входных параметров -eval "$main_loop" - -image_file="$image" -audio_file="$audio" -out_file="$output" - -unuse_param="$*" -if [ "${image_file}" = "" ] || [ "${audio_file}" = "" ] || [ "${unuse_param}" != "" ]; then - [ "${unuse_param}" != "" ] && echo "Параметры не расшифрованы \"$unuse_param\"" - ShowHelp - exit -fi - -[ "$out_file" = "" ] && { out_file="${image_file}.mp4"; -[ $verbose ] && echo "Выходное имя файла \"$out_file\""; } - -#---------------------------------------------------- - -function PlayTime { - local audio_file=$1 - - out=$(soxi -D "${audio_file}") - int=$(echo "$out/1" | bc) - echo "$int" -} - -function MakeVideo { - local image_file=$1 - local audio_file=$2 - local mp4_file=$3 - - local resized_image_file=$(mktemp -t "MakeVideo_resized_page_image_XXXXXXXXXXX.png" -) - - local cmd="ffmpeg -y -i \"${image_file}\" -filter_complex \"[0]scale=${video_width}:${video_height}:force_original_aspect_ratio=decrease,pad=${video_width}:${video_height}:(ow-iw)/2:(oh-ih)/2[scale];[scale]split=2[bg][fg];[bg]drawbox=c=white@1:replace=1:t=fill[bg];[bg][fg]overlay=format=auto\" \"${resized_image_file}\"" - [ $verbose ] && echo "cmd $cmd" - eval "$cmd" - [ $verbose ] && echo "ffmpeg $?" - - local play_time=$(PlayTime "${audio_file}") - [ $verbose ] && echo "play_time ${play_time}" - play_time_plus1=$(( $play_time + 1 )) - - water_mark='' - float_image='' -# video_filter="-filter_complex \"${water_mark}\" -map \"1:a\"" - video_filter="-map 0 -map \"1:a\"" - - cmd="ffmpeg -y ${ffmpeg_pre_options} -i \"${resized_image_file}\" ${float_image} -i \"${audio_file}\" ${video_filter} ${ffmpeg_options} ${audio_options} -t \"${play_time}\" \"${mp4_file}\"" - [ $verbose ] && echo "cmd $cmd" - eval "$cmd" - [ $verbose ] && echo "ffmpeg $?" - - rm "${resized_image_file}" -} - -MakeVideo "${image_file}" "${audio_file}" "${out_file}" - - diff --git a/video_tools/union_video_and_audio.bash b/video_tools/union_video_and_audio.bash deleted file mode 100755 index 2af812a..0000000 --- a/video_tools/union_video_and_audio.bash +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -ffmpeg -i $1 -i $2 -c:a aac -b:a 128k -vcodec copy -map 0:v -map 1:a o.mp4 -