本記事では、mp4動画から逆再生する動画ファイルを作成する雛形コードを載せました。使用するライブラリは4つで、OpenCV, Pillow, MoviePy, Pydubです。
それらのインストールはpipで次のようにします。
pip install opencv-python
pip install Pillow
pip install moviepy
pip install pydub
本コードで作成した逆再生動画は下記です。(文字の挿入はWindows10に標準搭載アプリの「フォト」を使用して作成しました)
下図は、本プログラム実行後のフォルダ内です。実行ファイルは「play_reverse.py」で、作成する逆再生動画の元動画ファイルは「メダカのうんこ綱引き.mp4」です。そして、「zzz_01~04」の4つのファイルを生成します。
■本プログラム
import cv2 from PIL import Image, ImageFont, ImageDraw import moviepy.editor as mp from pydub import AudioSegment # 動画を逆再生保存する関数 def movie_reverse(input_file, out_file): # 動画とそのフレームワーク情報を取得 video = cv2.VideoCapture(input_file) width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)) size = (width, height) num_of_frame = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) fps = int(video.get(cv2.CAP_PROP_FPS)) # 出力フォーマットの指定 fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') writer = cv2.VideoWriter(out_file, fourcc, fps, (width, height)) # フレーム1枚ずつ処理する for i in range(num_of_frame, 0, -1): video.set(cv2.CAP_PROP_POS_FRAMES, i) ret, frame = video.read() writer.write(frame) if i % 50 == 0: print(str(i) + "/" + str(num_of_frame)) # 後処理 writer.release() video.release() print("num_of_frame -> " + str(num_of_frame)) print("fps -> " + str(fps)) # 逆再生音声を作成して、 # 音声を動画に加える関数(編集した動画は一旦、音声がなくなるため) def extract_and_set_audio(input_video1, input_video2, out_file, out_audio, out_audio2): # オリジナル動画をメモリにクリップ clip_in = mp.VideoFileClip(input_video1).subclip() # オリジナル動画から音声ファイルを抽出して、MP3ファイルに出力する clip_in.audio.write_audiofile(out_audio) # (pydubで)音声ファイルの読み込み sound = AudioSegment.from_file(out_audio, 'mp3') # (pydubで)反転音声(逆再生)のオブジェクト作成 sound_reverse = sound.reverse() # (pydubで)反転音声をMP3ファイルに保存 sound_reverse.export(out_audio2, format='mp3') # (音声を付与したい)動画をメモリにクリップする clip_out = mp.VideoFileClip(input_video2).subclip() # 音声を付与して、ファイルに出力する clip_out.write_videofile(out_file, audio = out_audio2) if __name__ == '__main__': # 設定 input_video = 'メダカのうんこ綱引き.mp4' out_video1 = 'zzz_01_逆再生動画.mp4' out_audio = 'zzz_02_音声.mp3' out_audio2 = 'zzz_03_逆再生音声.mp3' out_video2 = 'zzz_04_逆再生動画_完.mp4' # オリジナル動画を元に、逆再生動画を作成する movie_reverse(input_video, out_video1) # 作成した逆再生動画には音声がないため、 # 逆再生音声を作成して、それを付与する input_video2 = out_video1 extract_and_set_audio(input_video, input_video2, out_video2, out_audio, out_audio2)
以上
<広告>
リンク