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

Jak synchronizować odtwarzanie wielu filmów obok siebie?

Mam 3 filmy, wszystkie 3 mają ten sam czas, tę samą ilość klatek i różnią się tylko jakością kodowania.

Teraz potrzebuję je uruchomić obok siebie w zsynchronizowany sposób do celów ewaluacji. To znaczy, że kiedy nacisnę “play”, powinny się uruchomić OBA filmy. Analogicznie dla stop, przód, tył.

Czy ktoś zna jakiś odtwarzacz zdolny to zrobić? Mam na myśli odtwarzanie więcej niż 1 filmu obok siebie…

Platforma: Win7

Odpowiedzi (10)

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

Jeśli ktoś jest nadal zainteresowany tym, obecna wersja VLC jest w stanie zrobić to bardzo dobrze bez żadnego rodzaju skryptów lub dodatków. Z tego co wiem można jednak odtwarzać tylko dwa pliki synchronicznie, nie 3.

  1. Aby to osiągnąć po prostu otwórz VLC i wybierz Media>Otwórz wiele plików.
  2. Wewnątrz okna z wieloma plikami wybierz dodaj aby dodać pierwszy plik.
  3. Następnie kliknij na “ Pokaż więcej opcji ,” a następnie “ Odtwórz inne media synchronicznie ,” w dolnej części okna.
  4. Wybierz przeglądaj obok, “ Extra media ,” aby dodać drugi plik.
  5. Naciśnij play, a dwa pliki multimedialne będą odtwarzane jednocześnie w jednym oknie sterowania.
17
17
17
2013-10-02 10:43:52 +0000

Bino ](http://bino3d.org/) to wieloplatformowy odtwarzacz multimedialny powszechnie polecany do odtwarzania plików stereoskopowych. Wśród innych funkcji, obsługuje zsynchronizowane odtwarzanie wielu strumieni.

Na początku interfejs może wydawać się nieco prymitywny lub mylący, ale wszystko, co musisz zrobić, to

  1. Przeciągnij dwa pliki wideo do Bino
  2. Wybierz “Separate streams, left first” input option i “Left/right” output option

Voila, masz zsynchronizowane odtwarzanie. Rodzaj, w którym jeden zestaw elementów sterujących odtwarzaniem jest używany dla wszystkich strumieni, więc nie trzeba “Zainwestuj w kilka ciężarków do palców i trenuj siebie, aby kliknąć bardzo szybko” jak @ta.speot.is sugeruje.

Jako bonus, obsługuje renderowanie anaglifów 3D.

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

VLC na Windows (1.1.10 lub nowszy):

  • Narzędzia → Preferencje
  • Pokaż ustawienia → Wszystkie
  • Kliknij Zaawansowane (kliknij Lista odtwarzania dla VLC 2.1.5)
  • Odznacz “Zezwalaj na tylko jedną działającą instancję”
  • Odznacz “Użyj tylko jednej instancji, gdy uruchamiana z menedżera plików”

VLC na OS X nie udostępnia tego samego zestawu opcji. Można jednak uruchomić wiele instancji z Terminala za pomocą open -a VLC.

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

Możesz to zrobić za pomocą mpv jeśli nie masz nic przeciwko używaniu wiersza poleceń:

3 filmy obok siebie (ułożone poziomo)

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 filmy

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

Uwagi

  • W Windows użyj ;, aby oddzielić każdą nazwę pliku w --external-files (jak pokazano w przykładzie 3 filmy). W Linuksie i macOS użyj :. Alternatywnie, użyj dwóch instancji --external-file zamiast tego, np: --external-file=input2.mkv --external-file=input3.mkv.

  • Wszystkie pliki muszą być tej samej wysokości. Jeśli nie są, to dodaj filtry scale, pad, i/lub crop. Zobacz dokumentację mpv i FFmpeg Filters po więcej informacji.

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

Po wykonaniu tego, co powiedział Kiran, otwórz wszystkie swoje filmy i uruchom następujący skrypt 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%
    }
}

Ten skrypt wysyła naciśnięcia klawiszy do wszystkich uruchomionych instancji odtwarzacza multimedialnego VLC. Nie działa, jeśli używasz myszy.

Te rzeczy powinny działać:

  • do przodu: Ctrl + right / Alt + right / Shift + right
  • do tyłu: Ctrl + left / Alt + left / Shift + left
  • play/pause: space
  • przyspieszenie: ]
  • speed down: [

Możesz łatwo dodać w innych naciśnięciach klawiszy poniżej linii: ~^down::LoopControlSend(Windows, "^{down}")

To nie synchronizuje filmów idealnie, więc możesz użyć następujących 4 klawiszy: left, right, up, down do sterowania tylko aktywnym oknem.

  • left bardzo krótki skok do tyłu
  • right bardzo krótki skok do przodu
  • up średni skok do tyłu
  • down średni skok do przodu

Jeśli wolisz wybierać programy ręcznie, użyj zamiast tego następującego kodu

;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 pewnie już ci powiedziało, że możesz kupić kilka programów, które to zrobią, ale na wszelki wypadek: videocompare, tmpgenc, vidlord…

Ten jest darmowy : http://forum.doom9.org/showthread.php?t=138430

(działające linki do pobrania na końcu wątku)

Nieprzetestowany, ponieważ moja konfiguracja wine jest teraz kompletnie spieprzona. Nie robi side by side, ale stacked playback (chyba, że masz bardzo dobry lcd to i tak nie będziesz widział tego samego odtwarzając ten sam film w dwóch przeciwległych rogach ekranu)

Jeśli uważasz, że naprawdę potrzebujesz side by side możesz użyć avisynth do zrobienia tego co zimmer powiedział.

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

(odnośnik forum.doom9.org/showthread.php?t=139769)

Nie musisz robić kodowania (które i tak doda własne artefakty kodowania), po prostu stwórz projekt, który wyprodukuje kod dwóch filmów odtwarzanych razem i przeskoczy przez plik.

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

Mam ten sam problem, ale nie widziałem żadnych zadowalających rozwiązań online do tej pory (i wierzcie mi, że zrobiłem dokładne poszukiwania). W końcu wymyśliłem własne rozwiązanie, które nie wymaga żadnych dodatkowych $. Chociaż jest to stare pytanie, mam nadzieję, że moje obejście będzie nadal przydatne.

Po pierwsze, w odtwarzaczu VLC, przejdź do Narzędzia->Preferencje. Upewnij się, że odznaczyłeś “Pozwól na tylko jedną działającą instancję” i “Pauza na ostatniej klatce wideo”.

Następnie wpisz/wyedytuj następujące komendy w pliku tekstowym. Otwórz windowsowy wiersz poleceń i uruchom te polecenia metodą kopiuj-wklej (lub zapisz tekst i uruchom jako plik wsadowy):

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%

Otworzy to trzy instancje VLC, każda z jednym z trzech filmów i wszystkie będą odtwarzane w bardzo zsynchronizowany sposób, przynajmniej dla twojego oka. Jednakże, te trzy instancje będą się początkowo nakładać na siebie. Będziesz musiał kliknąć na pasku tytułu każdej z instancji, aby przesunąć je bez przerywania odtwarzania, tak aby można było zobaczyć je grające obok siebie na ekranie. Jest to dość irytujące, ale uważam to za bardzo małą niedogodność.

Próbowałem, ale nie jest możliwe sterowanie wszystkimi instancjami za pomocą klawiszy skrótu do zatrzymania, przewijania do przodu, do tyłu itd. Jednak opcja ‘–repeat’ spowoduje zapętlenie filmów, więc możesz po prostu poczekać, aż zaczną się od nowa.

W przypadku bardzo długich filmów, najlepszym rozwiązaniem może być połączenie filmów w kompozycji side-by-side w jeden film przy użyciu np. ffmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html an http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html Ta komenda opisuje tylko sposób łączenia dwóch filmów, ale wydaje mi się (tzn. nie testowałem tego), że możesz uruchomić tę komendę wiele razy, aby włączyć wiele plików wideo.

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

Wydaje mi się, że możesz użyć skryptu AutoHotKey, aby wysłać skrót “Play” do wszystkich trzech graczy w bardzo krótkim czasie.

To, czy będą oni w stanie rozpocząć grę dokładnie w tym samym czasie, to już inna sprawa. Nawet jeśli są w stanie zacząć od razu, wyobrażam sobie, że będzie trochę walki o dysk twardy. Może chcesz zrobić dysk RAM, jeśli jest to ważna ocena.

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

Jeśli nie jest to coś, co robisz bardzo często, użyłbym programu do edycji wideo, takiego jak vegas, aby zbudować jeden film z pokazaniem ich wszystkich. Przykład wideo z Youtube jak to zrobić

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

Wiele odtwarzaczy będzie w stanie wyprowadzić obraz z pojedynczej klatki w filmie.

Mógłbyś wybrać wiele punktów w swoich filmach, aby porównać różne typy obrazów (chmury, dym, drzewa, trawa, ruch są dobre do porównań kodowania) i wziąć te same klatki z każdego z twoich filmów.

Możesz wtedy dokonać porównań na statycznym obrazie, zamiast próbować dostrzec różnice w ruchu. Możesz porównywać piksel po pikselu, jeśli chcesz.

Upewnij się jednak, że nie używasz JPG jako wyjścia, ponieważ jest to format stratny i wprowadzi swoje własne artefakty.