複数のビデオを同期して並べて再生する方法は?


37

3つのビデオがあり、3つすべてが同じ時間、同じ量のフレームを持ち、エンコード品質の点でのみ異なります。

ここで、評価のために同期して並行して実行する必要があります。両方とも「再生」を押したときの意味!ビデオが始まるはずです。停止、前進、後退についても同様です。

誰でもそれができるプレイヤーを知っていますか?つまり、複数のビデオを並べて再生するということです...

プラットフォーム:Win7


8
いくつかの指の重みに投資し、非常にすばやくクリックするように訓練します。
ta.speot.is

ポイントがありません:複数のビデオを表示できるプレーヤーが必要です。
不機嫌なオール

4
私は彼が...冗談を言っていたかもしれないと思う
ジョー・テイラー

タスクを一度にすべて開くようにスケジュールできます。
UğurGümüşhan

1
「3つのビデオがあります」->「「再生」を押すと、両方が開始されるはずです」-> 3つすべてが開始されるはずだと思いますか?
ジグガンジャー

回答:


10

Windows上のVLC(1.1.10以降):

  • ツール→設定
  • 設定を表示→すべて
  • [ 詳細設定]をクリックします(VLC 2.1.5のプレイリストをクリックします)
  • 「実行中のインスタンスを1つだけ許可する」のチェックを外します
  • 「ファイルから起動したときに1つのインスタンス」のチェックを外します

OS X上のVLCは、同じオプションセットを提供しません。ただし、ターミナルから複数のインスタンスを実行できますopen -a VLC


これopen -n -a vlcはMac用です。
ポールトムブリン

10
これは質問に答えません(OS XではなくWindows 7)。彼は多分、バッチファイルで3つのビデオを開始できますが、それらすべてを一時停止する方法などありません。
jiggunjer15年

30

まだこれに興味がある人は、VLCの現在のバージョンでは、スクリプトやアドオンを使用しなくても、これを非常にうまく行うことができます。ただし、私が知る限り、同期できるのは3つではなく2つのファイルのみです。

  1. これを行うには、VLCを開き、[ メディア]、[ 複数ファイルを開く]の順に選択します
  2. 複数のファイルウィンドウ内で、[追加]を選択して最初のファイルを追加します。
  3. この後、ウィンドウの下部にある[ その他のオプションを表示する] チェックボックスをクリックしてから、[ 別のメディアを同期して再生する]チェックボックスをクリックします。
  4. 2番目のファイルを追加するには、「追加メディア」の横にある参照を選択します。
  5. 再生ボタンを押すと、2つのメディアファイルが1つのコントロールウィンドウで同時に再生されます。

OSXで完全に動作します:)
Navin

2
これは2曲のビデオではない3でのみ動作します
和漢短歌

2
3つのビデオが必要な場合は、手順5の前に、[メディアを開く]ウィンドウで、ウィンドウの下部にある[オプションの編集]フィールドに移動します。2番目のビデオファイルはのようなボックスにあることに注意してください:input-slave=file:///C:/Users/me/Documents/someVideo.mov:file-caching=300。ファイル名の#後に、次のファイル名を同じ形式で入力し:input-slave=file:///C:/Users/me/Documents/someVideo.mov#file:///C:/Users/me/Documents/yetAnother.mov :file-caching=300ます。次に、[再生]をクリックすると、3つのファイルすべてが同期して再生されます。リファレンスを参照:wiki.videolan.org/VLC_command-line_help
Rory

2
バージョン3.0.5では機能しませんでしたが、バージョン2.2.4では機能しました。
badjr

2
3.0.7では、これは次のように機能するようです。[再生]をクリックすると、メインビデオの再生が開始され、[ビデオ]-> [ビデオトラック]-> [トラック2]を右クリックします。どちらも元のウィンドウのコントロールによって制御されます。
テリーブラウン

17

Binoは、立体視ファイルの再生に一般的に推奨されるクロスプラットフォームメディアプレーヤーです。他の機能の中でも特に、複数のストリームの同期再生をサポートしています。

インターフェイスは最初は少し原始的または混乱しているように見えるかもしれませんが、あなたがする必要があるのは

  1. 2つのビデオファイルをBinoにドラッグします
  2. 選択して「別のストリームを、最初に左の」入力オプションおよび「左/右」出力オプションを

ほら、同期再生ができました。@ ta.speot.isが示唆しているように、すべてのストリームに単一の再生コントロールセットが使用されるため、「指の重みに投資して、非常にすばやくクリックするようにトレーニングする必要はありません。

ボーナスとして、アナグリフ3Dのレンダリングをサポートします。


2
OPは、2本ではなく3本のビデオを並べることを求めました。私が見る限り、Binoは2つのビデオのみをサポートしています。(さらに、私にとって「個別のストリーム、左から」オプションはグレー表示されています)
サイモンフォースバーグ

2
ファイルは同じサイズとコードである必要があります。そうでない場合、オプションはグレー表示されます。
アッシュ

4

キランが言ったことをした後、すべてのビデオを開き、次のAutoHotKeyスクリプトを実行します

ScriptVersion = 1.1
#Singleinstance,force

GoSub, MainProgram
return

mainprogram:
    SetTitleMatchMode, 2
    WinGet, id, list, - VLC media player,, Program Manager
    Windows = 
    Loop, %id%
    {
        StringTrimRight, this_id, id%a_index%, 0
        Windows := this_id . "," . Windows
    }
    StringTrimRight, Windows, Windows, 1

    #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
    SendMode Input ; Recommended for new scripts due to its superior speed and reliability.

    ~]::LoopControlSend(Windows, "]")
    ~[::LoopControlSend(Windows, "[")
    ~j::LoopControlSend(Windows, "j")
    ~k::LoopControlSend(Windows, "k")
    ~space::LoopControlSend(Windows, "{space}")

    ~+left::LoopControlSend(Windows, "+{left}")
    ~!left::LoopControlSend(Windows, "!{left}")
    ~^left::LoopControlSend(Windows, "^{left}")
    ~+right::LoopControlSend(Windows, "+{right}")
    ~!right::LoopControlSend(Windows, "!{right}")
    ~^right::LoopControlSend(Windows, "^{right}")
    ~^up::LoopControlSend(Windows, "^{up}")
    ~^down::LoopControlSend(Windows, "^{down}")

    ; for active windows only. use this to adjust speed when out of sync
    ~left::ActiveWindowSend(Windows, "+{left}")
    ~right::ActiveWindowSend(Windows, "+{right}")
    ~up::ActiveWindowSend(Windows, "^{left}")
    ~down::ActiveWindowSend(Windows, "^{right}")
return

LoopControlSend(Windows, x)
{
    WinGet, active_id, ID, A

    is_valid_window = 0
    Loop,Parse,Windows,CSV
    {
        if active_id = %A_LoopField%
        {
            is_valid_window = 1
            break
        }
    }

    if is_valid_window
    {
        Loop,Parse,Windows,CSV
        {
            if active_id <> %A_LoopField%
            {
                ControlSend, , %x%, Ahk_Id %A_LoopField%
            }
        }
    }
}

ActiveWindowSend(Windows, x)
{
    WinGet, active_id, ID, A

    is_valid_window = 0
    Loop,Parse,Windows,CSV
    {
        if active_id = %A_LoopField%
        {
            is_valid_window = 1
            break
        }
    }

    if is_valid_window
    {
        SendInput, %x%
    }
}

このスクリプトは、VLCメディアプレーヤーの実行中のすべてのインスタンスにキーストロークを送信します。マウスを使用すると機能しません。

これらのことは機能するはずです:

  • フォワード: Ctrl + right / Alt + right / Shift + right
  • 後方: Ctrl + left / Alt + left / Shift + left
  • 再生/一時停止: space
  • スピードアップ: ]
  • 遅くする: [

行の下に他のキーストロークを簡単に追加できます。 ~^down::LoopControlSend(Windows, "^{down}")

これはビデオを完全に同期しないため、次の4つのキーを使用できます。アクティブウィンドウのみleft, right, up, downを制御する場合

  • left 非常に短い後方ジャンプ
  • right 非常に短い順方向ジャンプ
  • up 中後方ジャンプ
  • down ミディアムフォワードジャンプ

プログラムを手動で選択する場合は、代わりに次のコードを使用します

;Modified from MultipleSend by jgpaiva

ScriptVersion = 1.1
#Singleinstance,force

GoSub, MainProgram
return

Guiescape:
GuiClose:
    gui,destroy
    exitapp  

mainprogram:
    ;start by populating the listview.
    Gui, 1:default
    Gui, Add, Text, ,Select the windows to send the text.`nSelect several by pressing ctrl while selecting.`nAfter you've finished the selection`, press Submit.
    Gui, Add, ListView,w400 h500 vMyListView, Name of the Window | Window Class |Window ID
    WinGet, id, list,,, Program Manager
    Loop, %id%
    {
        StringTrimRight, this_id, id%a_index%, 0
        WinGetClass, this_class, ahk_id %this_id%
        WinGetTitle, this_title, ahk_id %this_id%
        If This_Title =
            continue
        if % LV_Add("",This_Title,This_Class,This_ID) = 0
            msgbox, bug
    } 
    Gui, Add, Button, default,Submit
    Gui,  Show
return

ButtonSubmit:
    NextRow := -1
    Windows =
    Loop,% LV_GetCount("Selected")
    {
    NextRow:=LV_GetNext(NextRow)
    LV_GetText(Text, NextRow,3)
    Windows := Text . "," . Windows
    }
    StringTrimRight, Windows, Windows, 1
    Gui,1:Destroy

    #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
    SendMode Input ; Recommended for new scripts due to its superior speed and reliability.

    ~]::LoopControlSend(Windows, "]")
    ~[::LoopControlSend(Windows, "[")
    ~j::LoopControlSend(Windows, "j")
    ~k::LoopControlSend(Windows, "k")
    ~space::LoopControlSend(Windows, "{space}")

    ~+left::LoopControlSend(Windows, "+{left}")
    ~!left::LoopControlSend(Windows, "!{left}")
    ~^left::LoopControlSend(Windows, "^{left}")
    ~+right::LoopControlSend(Windows, "+{right}")
    ~!right::LoopControlSend(Windows, "!{right}")
    ~^right::LoopControlSend(Windows, "^{right}")

    ~^up::LoopControlSend(Windows, "^{up}")
    ~^down::LoopControlSend(Windows, "^{down}")

    ; for active windows only. use this to adjust speed when out of sync
    ~left::ActiveWindowSend(Windows, "+{left}")
    ~right::ActiveWindowSend(Windows, "+{right}")
    ~up::ActiveWindowSend(Windows, "^{left}")
    ~down::ActiveWindowSend(Windows, "^{right}")
return

LoopControlSend(Windows, x)
{
    WinGet, active_id, ID, A

    is_valid_window = 0
    Loop,Parse,Windows,CSV
    {
        if active_id = %A_LoopField%
        {
            is_valid_window = 1
            break
        }
    }

    if is_valid_window
    {
        Loop,Parse,Windows,CSV
        {
            if active_id <> %A_LoopField%
            {
                ControlSend, , %x%, Ahk_Id %A_LoopField%
            }
        }
    }
}

ActiveWindowSend(Windows, x)
{
    WinGet, active_id, ID, A

    is_valid_window = 0
    Loop,Parse,Windows,CSV
    {
        if active_id = %A_LoopField%
        {
            is_valid_window = 1
            break
        }
    }

    if is_valid_window
    {
        SendInput, %x%
    }
}

神聖な牛AHKは素晴らしいです。これについてはどうでしょうか... 2つのブラウザ間で14個のVLCインスタンスが実行されているとしましょう....両方のブラウザ間ですべてのビデオを並べることができるスクリプトがあります(したがって、画面ごとに#ビデオ、画面解像度、インテリジェントな方法でタイルを張ります)?
tbone

4

コマンドラインの使用を気にしない場合は、mpvでこれを行うことができます。

3本のビデオを並べて(水平に積み重ねて)

ここに画像の説明を入力してください

mpv --lavfi-complex="[vid1][vid2][vid3]hstack=inputs=3[vo];[aid1][aid2][aid3]amix=inputs=3[ao]" input1.mkv --external-files="input2.mkv;input3.mkv"

2ビデオ

mpv --lavfi-complex="[vid1][vid2]hstack[vo];[aid1][aid2]amix[ao]" input1.mkv --external-file=input2.mkv

ノート

  • Windowsでは;、各ファイル名の区切りに使用します--external-files3つのビデオの例に示すように)。LinuxおよびmacOSでは:。または、次のような2つのインスタンスを--external-file代わりに使用します--external-file=input2.mkv --external-file=input3.mkv

  • ファイルはすべて同じ高さでなければなりません。そうでない場合は、スケール、パッド、および/または切り取りフィルターを追加します。詳細については、mpvのドキュメントFFmpegフィルターを参照してください。


3

グーグルはすでにあなたに言った、あなたはそれを行うことができますいくつかのプロプライエタリなソフトウェアを購入することができますが、念のために:videocompare、tmpgenc、vidlord ...

これは無料です:http : //forum.doom9.org/showthread.php?t=138430

(スレッドの最後にあるダウンロードリンクの作業)

現在、私のワインのセットアップは完全にネジ止めされているため、テストされていません。並べて再生するのではなく、スタック再生します(非常に優れた液晶ディスプレイを使用している場合を除き、画面の反対側の2つのコーナーで同じビデオを再生しても同じものは表示されません)

本当に隣り合わせで本当に必要だと思うなら、avisynthを使ってzimmerが言ったことをすることができます。

clip1 = DirectShowSource("C:\MyEncode1.foo", audio=false)
clip2 = DirectShowSource("C:\MyEncode2.foo", audio=false)
StackVertical(clip1,clip2)

(forum.doom9.org/showthread.php?t=139769を参照)

エンコードを行う必要はありません(とにかく独自のエンコードアーティファクトを追加します)、一緒に再生する2つのvidのエンコードを生成するプロジェクトを作成し、ファイルをスキップします。


3

私は同じ問題を抱えていますが、今のところ満足のいく解決策をオンラインで見たことはありません(そして、私は徹底的な検索を行ったと信じています)。最後に、余分な$を必要としない独自のソリューションを考え出しました。これは古い質問ですが、私の回避策がまだ役に立つことを願っています。

まず、VLCプレーヤーで、[ツール]-> [設定]に移動します。「実行中のインスタンスを1つだけ許可する」と「ビデオの最後のフレームで一時停止する」のチェックを外してください。

次に、テキストファイルに次のコマンドを入力/編集します。Windowsコマンドプロンプトを開き、コピーアンドペーストでコマンドを実行します(またはテキストを保存してバッチファイルとして実行します)。

set VLCplayer="C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
set VLCoptions=--repeat
set VIDEOdir="D:\path to your video directory"
set Video1="calibration1.mj2"
set Video2="calibration2.mj2"
set Video3="calibration3.mj2"

REM check the commands for misplaced spaces or missing '/' or '"' before running
ECHO cd %VIDEOdir%
ECHO %VLCplayer% %VLCoptions% %Video1%
ECHO %VLCplayer% %VLCoptions% %Video2%
ECHO %VLCplayer% %VLCoptions% %Video3%

cd %VIDEOdir%
%VLCplayer% %VLCoptions% %Video1%
%VLCplayer% %VLCoptions% %Video2%
%VLCplayer% %VLCoptions% %Video3%

これにより3つのVLCインスタンスが開き、それぞれに3つのビデオのいずれかが含まれ、すべてが少なくともあなたの目には非常に同期した方法で再生されます。ただし、最初は3つのインスタンスが互いにオーバーラップします。各インスタンスのタイトルバーをクリックして、再生を中断せずに移動して、画面上で並べて再生されるのを確認する必要があります。これはかなり面倒ですが、私はそれが非常に小さな不便だと思います。

私は試しましたが、停止、進む、戻るなどのホットキーですべてのインスタンスを制御することはできません。ただし、オプション「--repeat」はビデオをループに入れますので、最初からやり直すのを待つことができます。

非常に長いビデオの場合、ffmpegを使用して、サイドバイサイドコンポジションのビデオを1つのビデオにマージするのが最適な場合があります。https//ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.htmlおよび http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html このコマンドは、2つのビデオをマージする方法のみを説明しますが、コマンドを複数回実行して、複数のビデオファイルを組み込みます。


1

AutoHotKeyスクリプトを使用して、非常に短い時間で3人のプレーヤーすべてに「Play」ショートカットを送信できると思います。

彼らがまったく同時にプレイを開始できるかどうかは別の問題です。彼らがすぐに始められたとしても、ハードドライブのためにいくつかの戦いがあると思います。これが重要な評価である場合、RAMディスクを作成することができます。


ポイントがありません:複数のビデオを表示できるプレーヤーが必要です。
不機嫌なオール

複数のインスタンスを開くことができるメディアプレーヤー、たとえばVLC
ta.speot.is

3
本当にタスペオティスではありません。私は各アプリケーションを手動で起動する必要がありますが、これは順番に同期しないことになります。
不機嫌なオール

-1

多くのプレーヤーは、ビデオの単一フレームの画像を出力できます。

ビデオ内の複数のポイントを選択して、さまざまな種類の画像(雲、煙、木、草、動きがエンコード比較に適しています)を比較し、各ビデオから同じフレームを取得できます。

その後、動きの違いを見つけようとするのではなく、静止画像で比較を行うことができます。必要に応じて、ピクセル単位で比較できます。

ただし、出力としてJPGを使用しないでください。これは非可逆形式であり、独自のアーティファクトが導入されるためです。


2
ポイントがありません:複数のビデオを表示できるプレーヤーが必要です。
不機嫌なオール

1
@NoCanDo:これは、適切な答えが見つからない場合にビデオエンコード結果を比較するための代替オプションにすぎないことを理解しています。
シェベック

-1

これがあまり頻繁に行わない場合は、vegasなどのビデオ編集ソフトウェアを使用して、すべてのビデオが表示される1つのビデオを作成します。

YouTubeのビデオの例でその方法を説明しています。


2
それは非常に不便な方法です。これまでのところ何もないよりはましです。
不機嫌なオール

リンクされたページが変更されると回答が無効になる可能性があるため、回答の重要な部分を参照リンクから引用してください。
DavidPostill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.