21 changed files with 171 additions and 215 deletions
@ -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}" |
||||
} |
||||
|
||||
|
||||
|
@ -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 |
@ -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" |
@ -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,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 |
@ -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 |
||||
|
||||
|
@ -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}" |
||||
|
||||
|
Loading…
Reference in new issue