2010-05-10 11:12:24 +0000 2010-05-10 11:12:24 +0000
40
40

Wie kann man mehrere Videos nebeneinander synchronisiert abspielen?

Ich habe 3 Videos, alle 3 haben die gleiche Zeit, die gleiche Anzahl an Frames und sie unterscheiden sich nur in der Kodierungsqualität.

Nun muss ich sie zu Auswertungszwecken synchron nebeneinander laufen lassen. Das heißt, wenn ich “Play” drücke, sollen BEIDE Videos starten. Analog für Stop, vorwärts, rückwärts.

Kennt jemand einen Player, der das kann? Damit meine ich das Abspielen von mehr als 1 Video nebeneinander…

Plattform: Win7

Antworten (10)

32
32
32
2016-01-22 16:10:17 +0000

Falls jemand noch Interesse daran hat, die aktuelle Version von VLC kann dies sehr gut ohne jede Art von Skripting oder Add-on. Soweit ich weiß, kann man aber nur zwei Dateien synchron abspielen, nicht 3.

  1. Um dies zu erreichen, öffnen Sie einfach VLC und wählen Sie Media>Mehrere Dateien öffnen.
  2. Innerhalb des Fensters für mehrere Dateien wählen Sie Hinzufügen, um die erste Datei hinzuzufügen.
  3. Klicken Sie danach auf das Kontrollkästchen “ Weitere Optionen anzeigen ”, gefolgt von dem Kontrollkästchen “ Ein anderes Medium synchron abspielen ” am unteren Rand des Fensters.
  4. Wählen Sie Durchsuchen neben “ Zusätzliche Medien ”, um die zweite Datei hinzuzufügen.
  5. Klicken Sie auf “Play”, und die beiden Mediendateien werden gleichzeitig in einem einzigen Steuerungsfenster abgespielt.
17
17
17
2013-10-02 10:43:52 +0000

Bino ist ein plattformübergreifender Media Player, der allgemein für die Wiedergabe von stereoskopischen Dateien empfohlen wird. Neben anderen Funktionen unterstützt er die synchronisierte Wiedergabe mehrerer Streams.

Die Benutzeroberfläche mag auf den ersten Blick etwas primitiv oder verwirrend erscheinen, aber alles, was Sie tun müssen, ist

  1. Ziehen Sie Ihre beiden Videodateien in Bino
  2. Wählen Sie “Separate streams, left first” input option und “Left/right” output option

Voilà, Sie haben ein synchronisiertes Playback. Die Art, bei der ein einziger Satz von Wiedergabesteuerungen für alle Streams verwendet wird, so dass Sie nicht “Investieren Sie in einige Fingergewichte und trainieren Sie, sehr schnell zu klicken” wie @ta.speot.is vorschlägt.

Als Bonus unterstützt es das Rendern von Anaglyphen-3D.

13
13
13
2011-07-21 08:07:09 +0000

VLC unter Windows (1.1.10 oder später):

  • Tools → Einstellungen
  • Einstellungen anzeigen → Alle
  • Klicken Sie auf Erweitert (Klicken Sie auf Wiedergabeliste für VLC 2.1.5)
  • Deaktivieren Sie das Häkchen bei “Nur eine laufende Instanz zulassen”
  • Deaktivieren Sie das Häkchen bei “Nur eine Instanz verwenden, wenn vom Dateimanager gestartet”

VLC unter OS X bietet nicht die gleichen Optionen. Sie können jedoch mehrere Instanzen aus dem Terminal mit open -a VLC starten.

6
6
6
2018-05-24 18:47:55 +0000

Sie können dies mit mpv tun, wenn es Ihnen nichts ausmacht, die Befehlszeile zu verwenden:

3 Videos nebeneinander (horizontal gestapelt)

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 Videos

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

Hinweise

  • Unter Windows verwenden Sie ;, um jeden Dateinamen in --external-files zu trennen (wie im Beispiel 3 Videos gezeigt). Unter Linux und macOS verwenden Sie :. Alternativ können Sie stattdessen zwei Instanzen von --external-file verwenden, z. B: --external-file=input2.mkv --external-file=input3.mkv.

  • Die Dateien müssen alle die gleiche Höhe haben. Wenn dies nicht der Fall ist, fügen Sie die Filter Skalieren, Auffüllen und/oder Zuschneiden hinzu. Weitere Informationen finden Sie in der mpv-Dokumentation und FFmpeg-Filter .

4
4
4
2014-10-18 15:33:24 +0000

Nachdem Sie das getan haben, was Kiran gesagt hat, öffnen Sie alle Ihre Videos und führen Sie das folgende AutoHotKey-Skript

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%
    }
}

Dieses Skript sendet Ihre Tastatureingaben an alle laufenden Instanzen des VLC Media Players. Es funktioniert nicht, wenn Sie eine Maus verwenden.

Diese Dinge sollten funktionieren:

  • vorwärts: Ctrl + right / Alt + right / Shift + right
  • rückwärts: Ctrl + left / Alt + left / Shift + left
  • Wiedergabe/Pause: space
  • Geschwindigkeit erhöhen: ]
  • Geschwindigkeit runter: [

Sie können ganz einfach andere Tastenkombinationen unterhalb der Zeile einfügen: ~^down::LoopControlSend(Windows, "^{down}")

Dies synchronisiert die Videos nicht perfekt, daher können Sie die folgenden 4 Tasten verwenden: left, right, up, down um nur das aktive Fenster zu steuern.

  • left sehr kurzer Rückwärtssprung
  • right sehr kurzer Vorwärtssprung
  • up mittlerer Rückwärtssprung
  • down mittlerer Vorwärtssprung

Wenn Sie es vorziehen, die Programme manuell auszuwählen, verwenden Sie stattdessen den folgenden Code

;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%
    }
}
3
3
3
2010-05-10 22:03:42 +0000

google hat es Ihnen wahrscheinlich schon gesagt, Sie könnten ein paar proprietäre Software kaufen, die das können, aber nur für den Fall : videocompare, tmpgenc, vidlord…

Das hier ist kostenlos : http://forum.doom9.org/showthread.php?t=138430

(funktionierende Download-Links am Ende des Threads)

Ungetestet, weil mein Wein-Setup im Moment komplett im Arsch ist. Es kann nicht nebeneinander, sondern gestapelt wiedergegeben werden (wenn man keinen sehr guten LCD hat, sieht man sowieso nicht dasselbe, wenn man das gleiche Video in zwei gegenüberliegenden Ecken des Bildschirms abspielt)

Wenn Sie denken, dass Sie wirklich nebeneinander brauchen, können Sie avisynth verwenden, um das zu tun, was Zimmer gesagt hat.

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

(Referenz forum.doom9.org/showthread.php?t=139769)

Sie müssen keine Kodierung durchführen (die sowieso ihre eigenen Kodierungsartefakte hinzufügen würde), erstellen Sie einfach ein Projekt, das eine Kodierung der beiden Vids erzeugt, die zusammen abgespielt werden, und springen Sie durch die Datei.

3
3
3
2015-10-02 23:50:44 +0000

Ich habe das gleiche Problem, aber ich habe keine zufriedenstellende Lösungen online so weit gesehen (und glauben Sie mir, ich hatte eine gründliche Suche getan). Schließlich komme ich mit meiner eigenen Lösung, die keine zusätzlichen $ erfordern. Obwohl dies eine alte Frage ist, hoffe ich, dass mein Workaround immer noch nützlich sein wird.

Zuerst gehen Sie im VLC-Player zu Werkzeuge->Einstellungen. Stellen Sie sicher, dass Sie das Häkchen bei “Nur eine laufende Instanz zulassen” und “Beim letzten Bild eines Videos anhalten” entfernen.

Geben Sie dann die folgenden Befehle in eine Textdatei ein/bearbeiten Sie sie. Öffnen Sie eine Windows-Eingabeaufforderung und führen Sie die Befehle durch Kopieren und Einfügen aus (oder speichern Sie den Text und führen Sie ihn als Stapeldatei aus):

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%

Dies wird drei VLC-Instanzen öffnen, jede mit einem der drei Videos und alle spielen sehr synchron, zumindest für Ihr Auge. Allerdings werden sich die drei Instanzen anfangs überlappen. Sie müssen auf die Titelleiste jeder Instanz klicken, um sie zu verschieben, ohne die Wiedergabe zu unterbrechen, damit Sie sie nebeneinander auf Ihrem Bildschirm sehen können. Das ist ziemlich lästig, aber ich halte es für eine sehr kleine Unannehmlichkeit.

Ich habe es versucht, aber es ist nicht möglich, alle Instanzen mit Hotkeys für Stopp, Vorwärts, Rückwärts usw. zu steuern. Die Option ‘–repeat’ setzt die Videos jedoch in eine Schleife, so dass man einfach warten kann, bis sie von vorne beginnen.

Bei sehr langen Videos ist es möglicherweise am besten, die Videos in einer Nebeneinanderkomposition zu einem Video zusammenzufügen, z. B. mit ffmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html an http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html Dieser Befehl beschreibt nur, wie man zwei Videos zusammenfügt, aber ich glaube (d.h. ich habe es nicht getestet), dass Sie den Befehl mehrmals ausführen können, um mehrere Videodateien einzubinden.

1
1
1
2010-05-10 11:16:39 +0000

Ich stelle mir vor, dass Sie ein AutoHotKey-Skript verwenden können, um in kürzester Zeit eine “Play”-Verknüpfung an alle drei Spieler zu senden.

Ob sie in der Lage sind, genau zur gleichen Zeit mit dem Spielen zu beginnen, ist eine andere Sache. Selbst wenn sie in der Lage sind, sofort zu starten, kann ich mir vorstellen, dass es einen Kampf um die Festplatte geben wird. Vielleicht sollten Sie eine RAM-Disk erstellen, wenn dies eine wichtige Auswertung ist.

-1
-1
-1
2010-05-10 14:02:32 +0000

Wenn Sie dies nicht sehr oft tun, würde ich eine Videobearbeitungssoftware wie Vegas verwenden, um ein Video zu erstellen, in dem alle gezeigt werden. Youtube-Videobeispiel, wie man das macht

-1
-1
-1
2010-05-10 11:22:26 +0000

Viele Player werden in der Lage sein, ein Bild eines einzelnen Frames im Video auszugeben.

Sie könnten mehrere Punkte in Ihren Videos auswählen, um verschiedene Bildtypen zu vergleichen (Wolken, Rauch, Bäume, Gras, Bewegung sind gut für Encoding-Vergleiche) und die gleichen Frames aus jedem Ihrer Videos nehmen.

Sie können dann Vergleiche an einem statischen Bild durchführen, anstatt zu versuchen, Unterschiede in der Bewegung zu erkennen. Sie können auch Pixel für Pixel vergleichen, wenn Sie möchten.

Stellen Sie sicher, dass Sie nicht JPG als Ausgabeformat verwenden, da dies ein verlustbehaftetes Format ist und seine eigenen Artefakte einbringt.