Jak odtwarzać wiele filmów zsynchronizowanych?


37

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

Teraz potrzebuję ich, aby biegały obok siebie w sposób zsynchronizowany w celu oceny. To znaczy, kiedy naciskam „zagraj” ZARÓWNO! filmy powinny się rozpocząć. Analogicznie do zatrzymania, do przodu, do tyłu.

Czy ktoś zna gracza, który potrafi to zrobić? Rozumiem przez to, że odtwarzam więcej niż jeden film obok siebie ...

Platforma: Win7


8
Zainwestuj w odważniki palców i wytęż się, aby klikać bardzo szybko.
ta.speot

Nie rozumiesz: potrzebuję odtwarzacza, który może wyświetlić więcej niż 1 film.
Grumpy ol 'Bear

4
Myślę, że może żartował ...
Joe Taylor

możesz zaplanować zadanie otwierania ich wszystkich jednocześnie.
Uğur Gümüşhan

1
„Mam 3 filmy” -> „po naciśnięciu„ odtwarzaj ”OBA! Filmy powinny się rozpocząć” -> Myślę, że masz na myśli, że wszystkie 3 powinny się rozpocząć?
jiggunjer,

Odpowiedzi:


10

VLC w systemie Windows (1.1.10 lub nowszy):

  • Narzędzia → Preferencje
  • Pokaż ustawienia → Wszystkie
  • Kliknij Zaawansowane (kliknij Playlist dla VLC 2.1.5)
  • Odznacz „Zezwalaj tylko na jedną działającą instancję”
  • Odznacz „Jedna instancja po uruchomieniu z pliku”

VLC w systemie OS X nie zapewnia tego samego zestawu opcji. Możesz jednak uruchomić wiele wystąpień z terminala za pomocą open -a VLC.


To open -n -a vlcdla Maca.
Paul Tomblin

10
To nie odpowiada na pytanie (Windows 7, nie OS X). Mógłby zacząć 3 filmy z plikiem wsadowym, ale nie byłoby sposobu, aby zatrzymać je wszystkie itp.
jiggunjer

30

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

  1. Aby to zrobić, po prostu otwórz VLC i wybierz Media> Otwórz wiele plików .
  2. W oknie wielu plików wybierz opcję dodaj, aby dodać pierwszy plik.
  3. Następnie kliknij pole wyboru „ Pokaż więcej opcji ”, a następnie pole wyboru „ Synchronizuj inne multimedia synchronicznie ” u dołu okna.
  4. Wybierz Przeglądaj obok „ Dodatkowe media ”, aby dodać drugi plik.
  5. Hit hit, a dwa pliki multimedialne będą odtwarzane jednocześnie z jednym oknem kontrolnym.

Działa doskonale na OSX :)
Navin

2
działa to tylko w przypadku 2 filmów, a nie 3
Wakan Tanka,

2
Jeśli chcesz 3 filmy, przed krokiem 5: w oknie Open Media, przejdź do pola Opcje edycji u dołu okna. Pamiętaj, że Twój drugi plik wideo znajduje się w polu jak :input-slave=file:///C:/Users/me/Documents/someVideo.mov:file-caching=300. Po nazwie pliku umieść #następną nazwę pliku w tym samym formacie, np :input-slave=file:///C:/Users/me/Documents/someVideo.mov#file:///C:/Users/me/Documents/yetAnother.mov :file-caching=300. Następnie, gdy klikniesz Odtwórz, odtworzy wszystkie trzy pliki zsynchronizowane. Patrz odnośnik: wiki.videolan.org/VLC_command-line_help
Rory

2
Nie działał dla wersji 3.0.5, ale działał dla wersji 2.2.4.
badjr

2
Wydaje się, że w 3.0.7 działa to w następujący sposób - po kliknięciu Odtwarzaj rozpocznie się odtwarzanie głównego wideo, kliknij prawym przyciskiem Wideo -> Ścieżka wideo -> Ścieżka 2. Otwiera to osobne okno z drugim filmem. Oba są kontrolowane przez elementy sterujące w oryginalnym oknie.
Terry Brown

17

Bino to wieloplatformowy odtwarzacz multimedialny, powszechnie zalecany do stereoskopowego odtwarzania plików. Między innymi obsługuje synchroniczne odtwarzanie wielu strumieni.

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

  1. Przeciągnij dwa pliki wideo do Bino
  2. Wybierz „oddzielnych strumieni, pozostawione pierwszy” opcji wejściowych i „prawy / lewy” opcję wyjścia

Voilà, masz zsynchronizowane odtwarzanie. Tego rodzaju, w którym dla wszystkich strumieni używany jest jeden zestaw elementów sterujących odtwarzaniem, dzięki czemu nie trzeba „inwestować w odważniki palców i trenować, aby klikać bardzo szybko”, jak sugeruje @ ta.speot.is.

Jako bonus obsługuje renderowanie anaglifu 3D.


2
OP poprosił o posiadanie trzech filmów obok siebie, a nie dwóch. O ile widzę, Bino obsługuje tylko dwa filmy. (Dodatkowo dla mnie opcja „Oddzielne strumienie, lewa pierwsza” jest wyszarzona)
Simon Forsberg

2
Pliki muszą mieć ten sam rozmiar i kod, inaczej opcja będzie wyszarzona.
Ash

4

Po zrobieniu 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ć:

  • Naprzód: Ctrl + right / Alt + right / Shift + right
  • do tyłu: Ctrl + left / Alt + left / Shift + left
  • odtwarzanie / pauza: space
  • przyśpieszyć: ]
  • Zwolnij: [

Możesz łatwo dodać inne naciśnięcia 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, downdo 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, zamiast tego użyj 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%
    }
}

Święta krowa AHK jest niesamowita. A co powiesz na to ... powiedzmy, że mam 14 instancji VLC uruchomionych oacross dwa broswers .... czy istnieje skrypt, który może kafelkować wszystkie filmy w obu przeglądarkach (więc w zasadzie spójrz na # wideo na ekran, rozdzielczość ekranu i ułożyć je w inteligentny sposób)?
tbone

4

Możesz to zrobić za pomocą mpv, jeśli nie masz nic przeciwko użyciu wiersza polecenia:

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

wprowadź opis zdjęcia tutaj

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

Notatki

  • W systemie Windows użyj, ;aby oddzielić każdą nazwę pliku --external-files(jak pokazano w przykładzie z 3 filmami ). W systemie Linux i macOS :. Można też użyć w dwóch miejscach --external-file, a nie na przykład jako: --external-file=input2.mkv --external-file=input3.mkv.

  • Pliki muszą mieć tę samą wysokość. Jeśli nie są, dodaj filtry skali, pola i / lub filtry przycinania. Aby uzyskać więcej informacji, zobacz dokumentację MPV i filtry FFmpeg .


3

Google pewnie już ci powiedział, że możesz kupić kilka zastrzeżonych programów, które mogą to zrobić, ale na wszelki wypadek: videocompare, tmpgenc, vidlord ...

Ten jest bezpłatny: http://forum.doom9.org/showthread.php?t=138430

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

Nie przetestowano, ponieważ moja konfiguracja wina jest teraz kompletnie zepsuta. Nie robi to obok siebie, ale układa się w stos (chyba że masz bardzo dobry ekran LCD, nie zobaczysz tego samego, odtwarzając ten sam vid w dwóch przeciwnych rogach ekranu)

Jeśli uważasz, że naprawdę potrzebujesz obok siebie, możesz użyć avisynth, aby zrobić to, co powiedział Zimmer.

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

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

Nie musisz kodować (który i tak dodawałby własne artefakty kodowania), po prostu stwórz projekt, który wygeneruje kodowanie dwóch odtwarzanych razem wideo i pominie plik.


3

Mam ten sam problem, ale do tej pory nie widziałem zadowalających rozwiązań online (i uwierzcie, że dokładnie przeszukałem). 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.

Najpierw w odtwarzaczu VLC przejdź do Narzędzia-> Preferencje. Usuń zaznaczenie opcji „Zezwalaj tylko na jedną uruchomioną instancję” i „Wstrzymaj na ostatniej klatce filmu”.

Następnie wpisz / edytuj następujące polecenia w pliku tekstowym. Otwórz wiersz polecenia systemu Windows i uruchom polecenia, kopiuj i wklej (lub zapisz tekst i uruchom go 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%

Otworzą się trzy instancje VLC, każda z jednym z trzech filmów i wszystkie odtwarzane w bardzo zsynchronizowany sposób, przynajmniej dla twojego oka. Jednak trzy wystąpienia będą się początkowo nakładać na siebie. Będziesz musiał kliknąć pasek tytułu każdej instancji, aby przenieść je bez przerywania odtwarzania, abyś mógł zobaczyć, jak grają obok siebie na ekranie. Jest to dość denerwujące, ale uważam to za bardzo niewielką niedogodność.

Próbowałem, ale nie można kontrolować wszystkich instancji za pomocą klawiszy skrótu do zatrzymywania, przewijania do przodu, do tyłu itp. Jednak opcja „--repeat” spowoduje umieszczenie filmów w pętli, dzięki czemu można po prostu zaczekać, aż zaczną od nowa .

W przypadku bardzo długich filmów najlepiej może łączyć je w skład obok siebie w jeden film, używając np. Ffmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html i http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html To polecenie opisuje tylko sposób łączenia dwóch filmów, ale wierzę (tj. nie testowałem go), możesz uruchomić polecenie wiele razy, aby zawierać wiele plików wideo.


1

Wyobrażam sobie, że możesz użyć skryptu AutoHotKey, aby wysłać skrót „Play” do wszystkich trzech graczy w bardzo krótkim czasie.

To, czy mogą zacząć grać dokładnie w tym samym czasie, to inna sprawa. Nawet jeśli są w stanie zacząć od razu, myślę, że będzie trochę walki o dysk twardy. Może chcesz utworzyć dysk RAM, jeśli jest to ważna ocena.


Nie rozumiesz: potrzebuję odtwarzacza, który może wyświetlić więcej niż 1 film.
Grumpy ol 'Bear

Dowolny odtwarzacz multimediów, w którym można otworzyć więcej niż jedną instancję, np. VLC
ta.speot

3
Nie bardzo taspeotis. Ponieważ muszę ręcznie uruchomić każdą aplikację, co z kolei przekłada się na NIE synchroniczną.
Grumpy ol 'Bear

-1

Wielu graczy będzie w stanie wygenerować obraz pojedynczej klatki w filmie.

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

Następnie można dokonać porównań na obrazie statycznym zamiast próbować dostrzec różnice w ruchu. Jeśli chcesz, możesz porównywać piksel po pikselu.

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


2
Nie rozumiesz: potrzebuję odtwarzacza, który może wyświetlić więcej niż 1 film.
Grumpy ol 'Bear

1
@NoCanDo: Rozumiem, że jest to tylko alternatywna opcja porównania wyników kodowania wideo, jeśli nie znajdziesz odpowiedniej odpowiedzi.
Shevek

-1

Jeśli nie jest to coś, co robisz bardzo często, użyłbym oprogramowania do edycji wideo, takiego jak Vegas, aby zbudować jeden film z wszystkimi wyświetlanymi.

Przykład wideo na Youtube, jak to zrobić.


2
To bardzo niewygodny sposób. Do tej pory lepsze niż nic.
Grumpy ol 'Bear

Podaj zasadnicze części odpowiedzi z linku (linków) referencyjnych, ponieważ odpowiedź może stać się nieważna w przypadku zmiany połączonych stron.
DavidPostill
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.