【動物会話】カラスとの会話に向けて動画＋カラス拡声やってみた♬

最後はフィールドでカラスと会話したいので、まずは動画にカラスの音声を乗っける作業をやってみた。しかも、カラス声が小さいので大きくしてみた。
参考は見つかりますが、結構みなさん苦労されているようで、ウワンの環境だと動きませんでした。
【参考】
①[pythonで音声処理](https://qiita.com/nyancook/items/786cffd0b07bad8b4444)
②[動画からの音声抽出と動画への音声結合](http://testpy.hatenablog.com/entry/2018/03/22/003000)
###とりあえずの目標
１．[犬・猫の音声認識](https://qiita.com/MuAuan/items/5bbe6caba2b3544f9283)
２．動物の音声認識
３．犬の種類・猫の種類の認識
４．犬・猫・カラスの声にそれぞれの声で反応を返す
５．犬・猫・カラスの話を翻訳して、人の声で返すと翻訳して返す
。。。
最終目標；「動物と日常会話ができるようになる」
###やったこと
・適当な動画の用意
・音声を拡声する
・AVI動画と合体する
###・適当な動画の用意
まず、カラスがいいかもだけど、とにかく動画を取って格納しました。
コードは参考のものを使いしました。
ただし、コーデックは'XVID'に変更しています。[OpenCVで遊んでみた♬](https://qiita.com/MuAuan/items/5d968d41e993848a4332)

【参考】
・[動画を扱う@OpenCV](http://lang.sist.chukyo-u.ac.jp/classes/OpenCV/py_tutorials/py_gui/py_video_display/py_video_display.html)

```py
import numpy as np
import cv2

cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID') #'XVID' #'MJPG'
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)
        # write the flipped frame
        out.write(frame)
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
```
###・音声を拡声する
Youtubeのカラス音声って録音すると小さいのでこのままでは使えないということで、拡声する必要があります。
ということで、参考①を参考に以下のようなコードを記載しました。
プログラムは上から一つずつ実行していく感じです。
最初の部分はとりあえずffmpegが使えるか程度のコードです。
これで、aviファイルをまんまaviファイルに出力できます。

```py
import os, sys
import subprocess

input_file='output.avi'
output_file='output1.avi'
bitrate=40
channel=1
cmd = "ffmpeg -y -i {} -ab {}k -ac {} {}".format(input_file, bitrate, channel, output_file)
resp = subprocess.check_output(cmd, shell=True)
```
次がある意味肝心なところです。音声を読込、base_soundとしてmp3で保存します。
ここで読込はwavファイルにも対応していました。
※もちろん出力もwavファイル対応しています

```py
import pydub
from pydub import AudioSegment
wavfile='karasu-miyama_out.wav'
base_sound = AudioSegment.from_file(wavfile, format="wav")  # 音声を読み込み input.mp3, format="mp3"
length_seconds = base_sound.duration_seconds  # 長さを確認
base_sound.export("karasu-miyama_out.mp3", format="mp3")  # 保存する
```
以下、音量の調整をします。
また、参考①では音量の長さや効果音追加、音声合成などを実施して、追加する場所まで指定しています。
※今後使いますが、今回は音量のみ拡大して張り付けます。
ということで、以下で張り付けます。

```py
from pydub.utils import db_to_float, ratio_to_db
#ratio = 0.8  # 0.8倍の音量にしたい
#quiet_sound = base_sound + ratio_to_db(ratio)

delta = ratio_to_db(50)  # 音量を0.8倍にしたい
sound_loud = base_sound + delta  # 音量を調節 sound_base + delta
result_ratio = sound_loud.rms / base_sound.rms  #sound_base.rms
print(result_ratio)  # 0.7998836532867947が返ってきた
sound_loud.export("karasu-miyama_out1.mp3", format="mp3")  # 保存する
```
###・AVI動画と合体する
この部分は、参考②の以下のコードで実行できました。
ここで参考②に記載がありますが、mp4でないとコーデックで怒られます。
※aviではできませんでした。また音声はwavファイルではできませんでした。

```py
import moviepy.editor as mp
clip_output = mp.VideoFileClip(output_file).subclip()
clip_output.write_videofile(output_file.replace('.avi', '.mp4'), audio='karasu-miyama_out1.mp3')
```
###結果
とりあえず、[Youtubeに上げておきます](https://youtu.be/483NzsILFMQ
)。
【カラスに変更するまでの期間限定】

###まとめ
・動画にカラスの音声を拡声して張り付けた

カラスを人を受け入れるのであればこれでいいけど、そんなことは無いので、
とりあえず近々
・カラスの絵に変更して、カラスの動作と調整したいと思う