diff --git a/Script/pdf2video b/Script/pdf2video index 60a453d..ecff9c5 100755 --- a/Script/pdf2video +++ b/Script/pdf2video @@ -5,9 +5,9 @@ emotion='neutral' #'Default is neutral. Also supported are good (friendly) and e speaker='ermil' # (Optional): Speaker voice. Default is zahar. Supported female voices are jane, oksana, alyss, omazh and male voices are zahar and ermil. #["oksana","jane","omazh","zahar","ermil","silaerkan","erkanyavas","alyss", "nick","alena","filipp"] speed='1.0' -use_half="no" # yes or no -ffmpeg_pre_options="-loop 1" -ffmpeg_options="-c:v libx264 -tune stillimage -c:a copy -pix_fmt yuv420p -s 1920*1080 -shortest" +use_half="yes" # yes or no +ffmpeg_pre_options="-loop 1 -r 2" # "-loop 1" +ffmpeg_options="-c:v libx264 -tune stillimage -preset ultrafast -crf 20 -c:a copy -shortest -pix_fmt yuv420p -s 1920*1080" #---------------------------------------------------- @@ -31,11 +31,33 @@ for ((page=1;page<=${page_count};page++)); do page_image_file="${page_image_file}.png" - ~/txt2mp3_by_yatts "$page_text_file" + if [ "$use_half"="yes" ]; then - page_mp3_file="${page_text_file}_yatts.mp3" + source_text=$(cat "${page_text_file}") + + space_char=" " + split_size=$(( ${#source_text} / 2 )) + file_index=0 + for ((i=1;i<=${#source_text};i++)); do + cur_char=${source_text:$i-1:1} + cur_text="${cur_text}${cur_char}" + if [ "$cur_char" = "$space_char" ] && [ ${#cur_text} -ge $split_size ] || [ $i = ${#source_text} ]; then + let file_index+=1 + + echo "$cur_text" > "${page_text_file}_half${file_index}" + + cur_text="" + fi + done + + file_mp3_half1="${page_text_file}_half1" + file_mp3_half2="${page_text_file}_half2" + + ~/txt2mp3_by_yatts "${file_mp3_half1}" + ~/txt2mp3_by_yatts "${file_mp3_half2}" - if [ "$use_half"="yes"]; then + page_mp3_file_half1="${file_mp3_half1}_yatts.mp3" + page_mp3_file_half2="${file_mp3_half2}_yatts.mp3" width=$(identify -format "%w" "$page_image_file")> /dev/null height=$(identify -format "%h" "$page_image_file")> /dev/null @@ -49,35 +71,38 @@ for ((page=1;page<=${page_count};page++)); do convert "$page_image_file" -crop ${width}x${height_half}+0+0 "$page_image_file_half1" convert "$page_image_file" -crop ${width}x${height_half}+0+$height_half "$page_image_file_half2" - audio_length=$(mp3info -p "%S" sample.mp3) - audio_length_half=$(($audio_length/2)) - - page_mp3_file_half1="${page_mp3_file}_half1.mp3" - page_mp3_file_half2="${page_mp3_file}_half2.mp3" - - ffmpeg -i "$page_mp3_file" -acodec copy -ss "0" -to "$audio_length_half" "$page_mp3_file_half1" - ffmpeg -i "$page_mp3_file" -acodec copy -ss "$audio_length_half" -to "$audio_length" "$page_mp3_file_half2" - page_mp4_file_half1="${input_pdf_file_name}_${page}_half1.mp4" ffmpeg $ffmpeg_pre_options -i "$page_image_file_half1" -i "$page_mp3_file_half1" $ffmpeg_options "$page_mp4_file_half1" + SAVE_IFS=$IFS IFS="" video_file_names_array+=($page_mp4_file_half1) + IFS=$SAVE_IFS page_mp4_file_half2="${input_pdf_file_name}_${page}_half2.mp4" ffmpeg $ffmpeg_pre_options -i "$page_image_file_half2" -i "$page_mp3_file_half2" $ffmpeg_options "$page_mp4_file_half2" + SAVE_IFS=$IFS IFS="" video_file_names_array+=($page_mp4_file_half2) + IFS=$SAVE_IFS - rm "$page_mp3_file_half1" - rm "$page_mp3_file_half2" rm "$page_image_file_half1" rm "$page_image_file_half2" + + rm "$file_mp3_half1" + rm "$file_mp3_half2" + rm "$page_mp3_file_half1" + rm "$page_mp3_file_half2" + else + ~/txt2mp3_by_yatts "$page_text_file" + + page_mp3_file="${page_text_file}_yatts.mp3" + page_mp4_file="${input_pdf_file_name}_${page}.mp4" ffmpeg $ffmpeg_pre_options -i "$page_image_file" -i "$page_mp3_file" $ffmpeg_options "$page_mp4_file" @@ -85,9 +110,10 @@ for ((page=1;page<=${page_count};page++)); do IFS="" video_file_names_array+=($page_mp4_file) + rm "$page_mp3_file" + fi - rm "$page_mp3_file" rm "$page_image_file" rm "$page_text_file"