Browse Source

rename file and video tools add

master
parent
commit
fb53b03128
  1. 22
      Script/alias_main
  2. 0
      Script/download
  3. 0
      Script/hdd
  4. 0
      Script/image
  5. 126
      Script/img_and_wav2video
  6. 0
      Script/install
  7. 0
      Script/lang
  8. 0
      Script/openwrt
  9. 23
      Script/parse_arg_lib
  10. 0
      Script/pdf
  11. 0
      Script/ssh
  12. 0
      Script/utils
  13. 0
      Script/video
  14. 2
      video_tools/1_download.bash
  15. 6
      video_tools/2_encode_320.bash
  16. 6
      video_tools/3_encode_640.bash
  17. 1
      video_tools/auto_download_internet_video/dl-list
  18. 4
      video_tools/auto_download_internet_video/dl_video
  19. 25
      video_tools/auto_download_internet_video/run
  20. 130
      video_tools/img_and_wav2video
  21. 3
      video_tools/union_video_and_audio.bash

22
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"

0
Script/a_download → Script/download

0
Script/a_hdd → Script/hdd

0
Script/a_image → Script/image

126
Script/img_and_wav2video

@ -0,0 +1,126 @@
#!/bin/bash
# Общественное достояние, 2024, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+linux_script@narod.ru>
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 <image> -a <wav> [-o <mp4_file>] [-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}"
}

0
Script/a_install → Script/install

0
Script/a_lang → Script/lang

0
Script/a_openwrt → Script/openwrt

23
video_tools/parse_arg_lib → 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,8 +81,11 @@ function Params2Case {
fi
}
function MakeMainLoop {
all_params_var_name=$1
mainloop='
# Инициализация переменных
ProcessParams all_params Params2InitVar
ProcessParams all_params_array Params2InitVar
# $@ is all command line parameters passed to the script.
# -o is for short options like -v
@ -90,13 +93,13 @@ ProcessParams all_params Params2InitVar
# 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)
# "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 Params2large_list)
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 -- "$@")
@ -106,5 +109,7 @@ options=$(getopt --long "$large_params_list" -o "$small_params_list" -a -- "$@")
# 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'
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}"
}

0
Script/a_pdf → Script/pdf

0
Script/a_ssh → Script/ssh

0
Script/a_utils → Script/utils

0
Script/a_video → Script/video

2
video_tools/1_download.bash

@ -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

6
video_tools/2_encode_320.bash

@ -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"

6
video_tools/3_encode_640.bash

@ -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"

1
video_tools/auto_download_internet_video/dl-list

@ -1 +0,0 @@
# name url

4
video_tools/auto_download_internet_video/dl_video

@ -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

25
video_tools/auto_download_internet_video/run

@ -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

130
video_tools/img_and_wav2video

@ -1,130 +0,0 @@
#!/bin/bash
# Общественное достояние, 2024, Алексей Безбородов (Alexei Bezborodov) <AlexeiBv+linux_script@narod.ru>
# Объединение картинки и звука в видео
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 <image> -a <wav> [-o <mp4_file>] [-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}"

3
video_tools/union_video_and_audio.bash

@ -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
Loading…
Cancel
Save