MPVでリアとフロントダッシュカムのビデオプレイリストを再生できますか?

MPVでリアとフロントダッシュカムのビデオプレイリストを再生できますか?

ブラックボックスで前後の映像を同時に再生しようとしていますmpv

前後のビデオファイルはFおよびRディレクトリにあります。Fたとえば、ディレクトリ内のすべてのファイルをプレイリストに簡単に追加できます。

mpv F/*

一対の前面/背面ショットに対してPIPオーバーレイを実行することもできます。

mpv $front_video --external-file=$rear_video --lavfi-complex='[vid2] scale=640x360 [small]; [vid1] [small] overlay [vo]'

2つの組み合わせに問題があります。つまり、PIPオーバーレイのあるプレイリストが必要です。問題は、常に最初のビデオで後ろ姿を取得することです。

mpv \
    REC_200607-175943F.MOV --external-file=../R/REC_200607-175943R.MOV --lavfi-complex='[vid2] scale=640x360 [small]; [vid1] [small] overlay [vo]' \
    GSR_200607-180444F.MOV --external-file=../R/GSR_200607-180444R.MOV --lavfi-complex='[vid2] scale=640x360 [small]; [vid1] [small] overlay [vo]' \
    GSR_200607-180943F.MOV --external-file=../R/GSR_200607-180943R.MOV --lavfi-complex='[vid2] scale=640x360 [small]; [vid1] [small] overlay [vo]'

最初のカバレッジとすべてが正常です。 ここに画像の説明を入力してください。

2番目のオーバーレイ、最初のオーバーレイの再生を見る: ここに画像の説明を入力してください。

mpv現在、最初の動画が終了するとすぐに、次の動画のペアを実行して最初から最後まですべてを表示できるようにするスクリプトを使用していますが、前/次の動画にスキップ、位置確認、その他の機能内プレイリスト、再生速度、音量、コントラストなどの設定また、あるmpvインスタンスを終了すると次のインスタンスが実行されるため、再生中に停止するのは面倒です。

#!/bin/sh
for front in $(ls -tr); do
    rear=../R/${front/F./R.}
    mpv $front --external-file=$rear --lavfi-complex='[vid2] scale=640x360 [small]; [vid1] [small] overlay [vo]'
done

どんな提案がありますか?

答え1

本当にありがとうございます。私はビデオ比較ツールを作成し、Pythonを使って作業しています。必要な人のために同じbashコードをPythonで実装したものは次のとおりです。

使ったWindows 10とPython 2.7しかし、Linuxでは似ている必要があります。

# python 2.7, windows 10, test mpv

import os
import sys
import subprocess

RUNTIME_CWD = os.path.dirname(__file__)
MPV_EXE_PATH = [os.path.join(RUNTIME_CWD,"mpv","mpv.exe")]  # the python script is located one dir above the mpv directory


FRONT_playlist = ['C:\\Users\\PC\\Videos\\test\\test_front1.mp4', 'C:\\Users\\PC\\Videos\\test\\test_front2.mp4']
REAR_playlist = ['C:\\Users\\PC\\Videos\\test\\test_rear1.mp4', 'C:\\Users\\PC\\Videos\\test\\test_rear2.mp4']

videos=""

# supressed the terminal output using, --no-terminal

for REAR_playlist, FRONT_playlist in zip(REAR_playlist,FRONT_playlist):
    # picture in picture
    videos += " --{{ {0} --no-terminal --external-file={1} --lavfi-complex=[vid2]scale=640x360[small];[vid1][small]overlay[vo] --}}".format(REAR_playlist, FRONT_playlist)

    # top bottom
    # videos += " --{{ {0} --no-terminal --external-file={1} --lavfi-complex=[vid2]scale=1920x1080[big];[big][vid1]vstack[vo] --}}".format(REAR_playlist,FRONT_playlist)

    # side to side 
    # videos += " --{{ {0} --no-terminal --external-file={1} --lavfi-complex=[vid2]scale=1920x1080[big];[big][vid1]hstack[vo] --}}".format(REAR_playlist,FRONT_playlist)
    
subprocess.call([MPV_EXE_PATH[0]] + videos.split() + sys.argv[1:])

答え2

その一部はMPVドキュメントこれは、フィルタやプレイリストとは関係ありませんが、--{正確に必要なものを許可する使用方法とグループ化オプションについて説明します。--}

以下のプレイリストで適切なタスクスクリプトを実行してください。ファイルに保存して実行可能にし(chmod u+x file_name)、あなたのダッシュカムに私と同じ命名規則がある場合は、次のディレクトリFで実行してください。

#!/bin/sh

videos='' 

for front in $(ls -tr); do
    rear=../R/${front/F./R.}
    videos+=" --{ $front --external-file=$rear --lavfi-complex=[vid2]scale=640x360[small];[vid1][small]overlay[vo] --}"
done

exec mpv $videos "$@"
  • vid1, vid2, ... vidN- ビデオ入力
  • vo- 最終結果とも呼ばれるビデオ出力
  • [vid2]scale=640x360[small]- 「vid2」(最初の外部ビデオ)をインポートしてサイズを変更し、「小さい」として保存します。
  • [vid1][small]overlay[vo]- 「vid1」と「小」を重ねて「vo」として保存

ブラックボックスがファイルを保存する方法を見ると、すべてではなくてもほとんどのファイルを含める必要があります。オーバーレイフィルタは遅いので、代わりにまたはを使用してみることができますhstackvstackただし、両方のビデオは同じピクセルの高さである必要があります。つまり、通常はフロントビューと一致するようにリアビューを拡大する必要があります[vid2]scale=1920x1080[big];[big][vid1]hstack[vo])。 。

関連情報