前回の記事はアニメで英語のリスニングをする方法を書きました。
[ネタバレ注意]アニメで始める英語リスニング
リスニングをしていると難しくて聞き取れないセリフって必ず出てきますよね。セリフが長かったり、話すスピードが早かったり。
そんなセリフを何回も何回も聞きたい。それも手軽に。
というわけで、そんなコードを書いてみました。
シチュエーション
まず英語の音源ですが、英語の音声ファイル(mp3とか)とか動画ファイル(mp4とか)が Mac に入っている状態を想定します。そして、コマンドラインからコマンドを叩くと、ファイルの特定の箇所のセリフが再生されるようにします。Mac じゃなくて Windows でも同じように動くと思うんで、そこは適当に読み替えてください。
とりあえず説明に使える音源を用意してみる
ネットでダウンロードできる英語音源をググっていたら、こんなサイトを見つけました。
なんか怪しいですね。権利とかの問題はちゃんとしてるんでしょうか?
わからないけど、とりあえず一番上の実用英会話フレーズ1000 聞き流し(日・英語音声付き)から mp4 ファイルをダウンロードします。
mplayer
次にコマンドラインで音や動画を再生してくれる mplayer を Mac にインストールします。
$ brew install mplayer
mplayer はオプションに開始時間と再生秒数を指定することで、特定の箇所の音を再生できます。
$ mplayer -novideo -ss 00:00:10 -endpos 5 english.mp4
-ss
が開始時間で、 -endpos
が再生秒数です。 -novideo
はファイルが動画だった場合に音だけ再生してくれるオプションです。
好きな箇所を再生するようにコードを書く
いちいち長いオプションを書いて実行するのは面倒くさいので、簡単に再生するようなコードを書きます。
# -*- coding: utf-8 -*-
import os
import sys
soundFile = "english.mp4"
soundList = [
["00:00:04", "8"], # 私もそう思った
["00:00:14", "10"], # あなたはどのように休みを過ごしましたか?
["00:00:25.5", "9.5"], # 彼女はますます美しくなりました。
]
def playMplayer(file, seekTile, playTime):
# -ss 開始時間を HH:MM:SS で指定
# -endpos 再生時間を秒で指定
os.execvp("mplayer", ["mplayer", "-novideo", "-ss", seekTile, "-endpos", playTime, file])
# Ctrl+C でターミナルの表示が崩れるので os.execvp に変更した
#cmd = "mplayer -novideo -ss {} -endpos {} {}".format(
# seekTile, playTime, file)
#subprocess.call(cmd, shell=True)
def play(no):
sound = soundList[no]
playMplayer(soundFile, sound[0], sound[1])
def main():
no = int(sys.argv[1])
play(no)
if __name__ == "__main__":
main()
ダウンロードしたファイルを english.mp4
に変えて、同じディクレクトリにこのコードを置いて実行すると、こんな感じで音がなります。
$ python3 play.py 0
↓音が鳴る
私もそう思った。
That's the way I look at it, too.
$ python3 play.py 2
↓音が鳴る
彼女はますます美しくなりました。
She became more and more beautiful.
おわりに
わりと面倒くさいですね