Package: aoirint-matvtool
matvtoolpy / MultiAudioTrackVideoToolPyA command line tool to handle a multi audio track video file.マルチオーディオトラック動画ファイルを取り扱うためのコマンドラインツールインストール基本的にFFmpegのラッパーです。別途FFmpegのインストールが必要です。
FFmpeg 4.2（Ubuntu 20.04の標準バージョン）および4.4（Ubuntu 22.04の標準バージョン）をサポートしています。https://ffmpeg.org/download.htmlmatvtool本体は、以下からダウンロード・インストールできます。
Pythonパッケージとして導入する場合、Python 3.11をサポートしています。バイナリ（Windows, Linux, macOS）GitHub Release:https://github.com/aoirint/matvtoolpy/releasesPythonパッケージ:pip3 install aoirint_matvtoolPyPI:https://pypi.org/project/aoirint-matvtool/DockerイメージDocker Hub:https://hub.docker.com/r/aoirint/matvtoolpyCPU:docker run --rm -v "$PWD:/work" aoirint/matvtoolpy:ubuntu-latest --helpNVIDIA GPU:docker run --rm --gpus all -v "$PWD:/work" aoirint/matvtoolpy:nvidia-latest --help用途OBS Studioの録画機能やGeForce Experienceの録画機能などで作成した、マルチオーディオトラック動画ファイルを、
マルチオーディオトラックの状態を保ったまま簡易に編集し、後に高度な動画編集ソフトで使う素材として使いやすい形に整えるためのツール。用例slice: クリップの作成再エンコードしないため、高速ですが時間精度が低いです。
長時間の録画をおおまかに分割する用途を想定しています。
フレーム単位でクリップしたい場合、後段の動画編集ソフトで改めて加工してください。matvtoolslice-ss00:05:00-to00:10:00-iinput.mkvoutput.mkvcrop_scale: 切り取り・拡大縮小-vcodec/--video_codecオプションで出力映像コーデックを指定できます（未指定時は既定のエンコーダを使用）。# 左上1600x900を切り取って、1920x1080に拡大matvtoolcrop_scale-iinput.mkv--cropw=1600:h=900:x=0:y=0--scale1920:1080output.mkv# 右下1600x900を切り取って、1920x1080に拡大matvtoolcrop_scale-iinput.mkv--cropw=1600:h=900:x=iw-ow:y=ih-oh--scale1920:1080output.mkv# 左上1600x900を切り取って、1920x1080に拡大、libx264でエンコードmatvtoolcrop_scale-iinput.mkv--cropw=1600:h=900:x=0:y=0--scale1920:1080-vcodeclibx264output.mkv# 左上1600x900を切り取って、1920x1080に拡大、nvenc_h264でエンコードmatvtoolcrop_scale-iinput.mkv--cropw=1600:h=900:x=0:y=0--scale1920:1080-vcodecnvenc_h264output.mkv# 左上1600x900を切り取って、1920x1080に拡大、nvenc_hevcでエンコードmatvtoolcrop_scale-iinput.mkv--cropw=1600:h=900:x=0:y=0--scale1920:1080-vcodecnvenc_hevcoutput.mkvfind_image: 画像の出現時間・出現フレームを検索動画のスナップショットやクロップ画像を使用して、出現時間・出現フレームを検索します。
特定シーンの頭出しやチャプターを作成する用途を想定しています。
確実・正確に検出できるとは限りません。
出力は、VSCodeのマルチカーソル機能やseqコマンドなどを使って手動処理することを想定しています（試合1～試合10までの連番文字列生成：seq -f "試合%g" 1 10）。sliceと同様のオプションで検索範囲の時間を指定できます。--fpsオプションで比較処理におけるフレームの読み飛ばしができます（コーデックにおけるフレーム間予測の関係で、全フレームのデコードは発生すると思われるため、デコード処理時間が支配的な場合はあまり意味がないと思われます）。
出力は、内部処理における時間・フレームと、入力動画における時間・フレームが併記されます。-icrop/--input_video_cropオプション、-refcrop/--reference_image_cropオプションで、入力動画や参照画像の一部を使用した検索ができます。値はcrop_scaleの--cropオプションと同様です。
特定のアイコンが含まれることがわかっているが、フレーム中の他の部分が大きく違うケースの検索に有用です。-it/--output_intervalオプションで、連続出現時の出力を抑制できます。手動処理を減らすためのオプションです。
例えば、-it 10を指定すると、前回出現してから10秒間のフレームで再び出現を検出しても、ログ出力しません（YouTubeのチャプター機能では、最小チャプター間隔は10秒）。-p,--progress_typeオプションで、処理の進捗状況の出力方法を変更できます。
値は、tqdm標準エラー出力・インタラクティブシェル用（デフォルト）、plain標準エラー出力・逐次出力、none出力なし、が利用できます。処理に時間のかかる長い動画を入力するときは、teeコマンドなどで出力を永続化したり、tmuxコマンドなどでバックグラウンド処理したりすると便利です。うまく出力が表示されないときは、一時的に環境変数PYTHONUNBUFFERED=1を設定すると改善するかもしれません。# reference.pngに一致するフレームを検索matvtoolfind_image-iinput.mkv-refreference.png# 10 FPSでreference.pngに一致するフレームを検索（フレームの読み飛ばしによる高速化を意図）matvtoolfind_image-iinput.mkv-refreference.png--fps10# 左上1600x900を使用してreference.pngに一致するフレームを検索matvtoolfind_image-iinput.mkv-icropw=1600:h=900:x=0:y=0-refreference.png-refcropw=1600:h=900:x=0:y=0# 最小10秒間隔で同上、10 FPS、出力永続化PYTHONUNBUFFERED=1matvtoolfind_image-iinput.mkv-icropw=1600:h=900:x=0:y=0-refreference.png-refcropw=1600:h=900:x=0:y=0--fps10-it10|teechapters.txtaudio: オーディオトラック一覧の確認matvtoolaudio-iinput.mkvselect_audio: オーディオトラックを選択して新規動画ファイルとして出力matvtoolselect_audio-iinput.mkv--audio_index23--output.mkv開発Python 3.11を使って開発しています。依存関係依存関係の管理にPoetryを使っています。# Pythonパッケージを追加poetryaddpydantic
poetryadd--groupdevpytest