Raspberry Pi 400でスイッチのプレイ動画を保存する(まとめ)

最終更新日:2023年3月4日

最近ハマっている(はず)のスプラ3のウデマエ上達のため、地道な反復練習も必要だが、振り返りのためのプレイ動画も必要なのでは。
また、手元で暇そうにしているラズパイを活用できないかという企画。

こちらが別ページで記載した動画保存、音声保存を呼び出す処理に関するページとなります。

目次

  1. 全体構想

  2. サンプルソース

  3. 実験結果

1.全体構想

Raspberry Pi 400に対するHDMI入力の情報を保存するようにします。
別ページで書いた動画保存(VideoRecorder.py)、音声保存(SoundRecorder.py)の2処理をメインプログラムからCallして、動画保存を行います。
mp4とwavでの出力となるため、後段で結合あるいはエンコード処理が必要となります。


2.サンプルソース

現時点のサンプルソースを記載します
ソースは無保証です。少し見るとわかりますが、かなり雑です
Enterを1度押すと録画開始、もう一度押すと終わります

#capture.py
"""Pass input directly to output.
#
# 処理内容
#   1.入力映像、音声をキャプチャする
#   2.入力映像をmp4ファイルとWAVファイルへ保存する
#
# 使い方
#    args = [-vh] [-ws] [-vo mp4ファイル名] [-wo Wavファイル名]
#
#
"""

import argparse
import VideoRecorder
import SoundRecorder

def int_or_str(text):
    """Helper function for argument parsing."""
    try:
        return int(text)
    except ValueError:
        return text


"""
 初期化処理
"""
parser = argparse.ArgumentParser(add_help=False)
args, remaining = parser.parse_known_args()
parser = argparse.ArgumentParser(
    description=__doc__,
    formatter_class=argparse.RawDescriptionHelpFormatter,
    parents=[parser])
parser.add_argument(
    '-i', '--input-device', type=int_or_str,
    help='input device (numeric ID or substring)')
parser.add_argument(
    '-o', '--output-device', type=int_or_str,
    help='output device (numeric ID or substring)')
parser.add_argument(
    '-c', '--channels', type=int, default=2,
    help='number of channels')
parser.add_argument('-wd', '--wave-dtype', help='audio data type')
parser.add_argument('-wr', '--wave-samplerate', type=float, help='sampling rate')
parser.add_argument('-wb', '--wave-blocksize', type=int, help='block size')
parser.add_argument('-wl', '--wave-latency', type=float, help='latency in seconds')
parser.add_argument('-wv', '--wave-volume', type=float, default=0.2, help='wave volume ratio')
parser.add_argument('-ws', '--wave-silentmode', action='store_true', help='silent mode')
parser.add_argument('-wo', '--wave-outputfile', help='output WAV file')
parser.add_argument('-vf', '--video-framerate', type=float, help='Video frame rate')
parser.add_argument('-vb', '--video-buffersize', type=int, help='Video buffersize')
parser.add_argument('-vc', '--video-convert', type=int, help='Video Convert')
parser.add_argument('-vh', '--video-hidden', action='store_true', help='hidden mode')
parser.add_argument('-vo', '--video-outputfile', help='output Video file')
args = parser.parse_args(remaining)


if __name__ == "__main__":

    oVR = VideoRecorder.VideoRecorder(args)
    oVR.start()

    oSR = SoundRecorder.SoundRecorder(args)
    oSR.start()

    #状態確認待ち  
    input()
    
    #録画開始
    print("Recording Start")
    oVR.recordstart()
    oSR.recordstart()

    #終了待ち   
    input()

    print("Recording End")
    oVR.end()
    oSR.end()
    

3.実験結果

キャプチャしたサンプルです。(全ページ共通)


この記事が気に入ったらサポートをしてみませんか?