「紙芝居動画」の作成

グーグル翻訳の音声をダウンロードし、静止画像に乗せてmp4動画を作成します。うち、 set_image.sh は 動画用画像ファイルをHTMLから作成する - あるStray Engineer の日記 で作成したスクリプトです。一方、 make_sound.sh  は音声ファイルを作成するスクリプトで Googleの読み上げ機能を利用して音声ファイルを作る - あるStray Engineer の日記 が参考になります。

ひとつ注意点ですが、変数 ${ch},${py},${ja} は export で上位のスクリプトから引き渡すようにして下さい。そうすると、一つの静止画に音声が乗ったmp4ファイルが一つ自動的に作成されます。

#!/bin/bash
sdoc=\
"make_mp4_uniq.sh              \n"\
" mp4動画ファイルを作成します\n\n"\
" [option]                           \n"\
"  audio=音声ファイル\n"\
"  output=動画ファイル(.mp4)\n"\
"\n\n\n"
export sdoc
audio=`getparstr $# "$*" "audio"`
output=`getparstr $# "$*" "output"`

#ch="凉面"
#py="Liáng miàn"
#ja="冷たいそば"

# 必要な引数の確認
for var in output ch py ja
do
 if [ -z "${!var}" ]
  then
   usage
   printf "関数 %s の変数 ${var} に値がありません\n" `basename $0`
   exit
 fi
done

export ch py ja audio
prog/set_image.sh
prog/make_sound.sh

ffmpeg \
    -y -loop 1 \
    -i image.png -i sound.wav \
    -vcodec libx264 \
    -pix_fmt yuv420p \
    -shortest \
    ${output}
rm image.png sound.wav

これを所望の回数ループさせることによって動画群を作成し、最後に結合を行います。

input=`
for id in ${id_s[@]}
do
 printf " -i uniq/output%d.mp4 " ${id}
done`
echo ${input} ${#id_s[*]}

sleep 20
ffmpeg -y ${input} -filter_complex "concat=n=${#id_s[*]}:v=1:a=1" ${mp4file}

 

変数 ${input} には動画群のファイル名が列挙されています。一方、${#id_s[*]} は動画群のファイル数を示します。