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

Come riprodurre più video sincronizzati fianco a fianco?

Ho 3 video, tutti e 3 hanno lo stesso tempo, la stessa quantità di fotogrammi, e differiscono solo in termini di qualità di codifica.

Ora ho bisogno che girino fianco a fianco in modo sincronizzato a scopo di valutazione. Cioè quando premo “play” ENTRAMBI i video dovrebbero partire. Analogamente per stop, avanti, indietro.

Qualcuno conosce qualche player in grado di farlo? Con questo intendo riprodurre più di 1 video fianco a fianco…

Piattaforma: Win7

Risposte (10)

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

Se qualcuno è ancora interessato a questo la versione attuale di VLC è in grado di farlo molto bene senza alcun tipo di scripting o add-on. Per quanto ne so però si possono riprodurre solo due file in modo sincrono, non 3.

  1. Per fare questo basta aprire VLC e selezionare Media>Apri file multipli.
  2. All'interno della finestra dei file multipli selezionate add per aggiungere il primo file.
  3. Dopo questo cliccate sulla casella di controllo “Mostra altre opzioni”, seguita dalla casella di controllo “Play another media synchronously”, nella parte inferiore della finestra.
  4. Selezionate browse accanto a, “ Extra media ,” per aggiungere il secondo file.
  5. Premi play e i due file multimediali saranno riprodotti simultaneamente con una sola finestra di controllo.
17
17
17
2013-10-02 10:43:52 +0000

(http://bino3d.org/) è un lettore multimediale multipiattaforma comunemente raccomandato per la riproduzione di file stereoscopici. Tra le altre caratteristiche, supporta la riproduzione sincronizzata di più flussi.

L'interfaccia può sembrare un po’ primitiva o confusa all'inizio, ma tutto quello che devi fare è

  1. Trascina i tuoi due file video in Bino
  2. Selezionare “Separate streams, left first” opzione di input e “Left/right” opzione di output

Voilà, avete la riproduzione sincronizzata. Il tipo in cui un singolo set di controlli di riproduzione è usato per tutti i flussi in modo da non dover “Investire in alcuni pesi per le dita e allenarti a cliccare molto velocemente” come suggerisce @ta.speot.is.

Come bonus, supporta il rendering del 3D anaglifo.

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

VLC su Windows (1.1.10 o successivo):

  • Tools → Preferences
  • Show Settings → All
  • Clicca su Advanced (Clicca su Playlist per VLC 2.1.5)
  • Deseleziona “Allow only one running instance”
  • Deseleziona “Use only one instance when started from file manager”

VLC su OS X non fornisce lo stesso set di opzioni. Puoi comunque eseguire più istanze dal terminale con open -a VLC.

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

Puoi farlo con mpv se non ti dispiace usare la riga di comando:

3 video affiancati (impilati orizzontalmente)

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 video

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

Note

  • In Windows usa ; per separare ogni nome di file in --external-files (come mostrato nell'esempio 3 video). In Linux e macOS usa :. In alternativa, usa invece due istanze di --external-file come ad esempio: --external-file=input2.mkv --external-file=input3.mkv.

  • I file devono avere tutti la stessa altezza. Se non lo sono, allora aggiungi i filtri scale, pad e/o crop. Vedi la documentazione mpv e FFmpeg Filters per maggiori informazioni.

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

Dopo aver fatto quello che ha detto Kiran, apri tutti i tuoi video ed esegui il seguente script 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%
    }
}

Questo script invia i tuoi tasti a tutte le istanze in esecuzione di VLC media player. Non funziona se usate un mouse.

Queste cose dovrebbero funzionare:

  • avanti: Ctrl + right / Alt + right / Shift + right
  • indietro: Ctrl + left / Alt + left / Shift + left
  • play/pausa: space
  • accelerare: ]
  • velocità giù: [

Puoi facilmente aggiungere altre sequenze di tasti sotto la linea: ~^down::LoopControlSend(Windows, "^{down}")

Questo non sincronizza perfettamente i video, quindi puoi usare i seguenti 4 tasti: left, right, up, down per controllare solo la finestra attiva.

  • left salto all'indietro molto breve
  • right salto in avanti molto breve
  • up salto medio all'indietro
  • down salto medio in avanti

Se preferite scegliere i programmi manualmente, usate invece il seguente codice

;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 probabilmente te l'ha già detto, potresti comprare un paio di software proprietari che potrebbero farlo, ma nel caso: videocompare, tmpgenc, vidlord…

Questo è gratuito: http://forum.doom9.org/showthread.php?t=138430

(link di download funzionanti alla fine del thread)

Non testato perché la mia configurazione di wine è completamente fottuta in questo momento. Non fa il side by side ma la riproduzione impilata (a meno che tu non abbia un lcd molto buono non vedrai comunque la stessa cosa riproducendo lo stesso video in due angoli opposti dello schermo)

Se pensi di aver davvero bisogno del side by side puoi usare avisynth per fare quello che ha detto zimmer.

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

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

Non hai bisogno di fare una codifica (che comunque aggiungerebbe i suoi artefatti di codifica), basta fare un progetto che produca una codifica dei due video che suonano insieme e saltare attraverso il file.

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

Ho lo stesso problema ma non ho visto nessuna soluzione soddisfacente online finora (e credetemi ho fatto una ricerca approfondita). Alla fine ho trovato la mia soluzione che non richiede alcun dollaro extra. Anche se questa è una vecchia domanda, spero che il mio workaround sia ancora utile.

Per prima cosa, in VLC player, vai su Strumenti->Preferenze. Assicurati di deselezionare ‘Consenti solo un'istanza in esecuzione’ e ‘Metti in pausa sull'ultimo fotogramma di un video’.

Poi, digitate/modificate i seguenti comandi in un file di testo. Aprite un prompt dei comandi di Windows ed eseguite i comandi con un copia-incolla (o salvate il testo ed eseguitelo come file batch):

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%

Questo aprirà tre istanze di VLC, ognuna con uno dei tre video e tutti riprodotti in modo molto sincronizzato, almeno ad occhio. Tuttavia, le tre istanze saranno inizialmente sovrapposte l'una all'altra. Avrai bisogno di cliccare sulla barra del titolo di ciascuna istanza per spostarle senza interrompere la riproduzione, in modo da poterle vedere giocare fianco a fianco sul tuo schermo. Questo è piuttosto fastidioso ma lo considero un piccolo inconveniente.

Ho provato ma non è possibile controllare tutte le istanze con i tasti di scelta rapida per stop, avanti, indietro ecc. Tuttavia, l'opzione ‘–repeat’ metterà i video in un ciclo, quindi puoi semplicemente aspettare che ricomincino.

Per video molto lunghi, potrebbe essere meglio unire i video in una composizione side-by-side in un unico video usando per esempio ffmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html an http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html Questo comando descrive solo come unire due video, ma credo (cioè non l'ho testato) che puoi eseguire il comando più volte per incorporare più file video.

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

Immagino che si possa usare uno script AutoHotKey per inviare una scorciatoia “Play” a tutti e tre i giocatori in un tempo molto breve.

Che siano in grado di iniziare a giocare esattamente nello stesso momento è una questione diversa. Anche se sono in grado di iniziare subito, immagino che ci sarà qualche lotta per il disco rigido. Potresti voler fare un disco RAM se questa è una valutazione importante.

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

Se questo non è qualcosa che fai molto spesso, userei un software di editing video come Vegas per costruire un video con tutti loro che mostrano. Youtube video esempio di come farlo.

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

Molti lettori saranno in grado di emettere un'immagine di un singolo fotogramma nel video.

Potresti scegliere più punti nei tuoi video per confrontare diversi tipi di immagini (nuvole, fumo, alberi, erba, movimento sono buoni per i confronti di codifica) e prendere gli stessi fotogrammi da ciascuno dei tuoi video.

Puoi quindi fare confronti su un'immagine statica piuttosto che cercare di individuare le differenze nel movimento. Puoi confrontare su una base pixel per pixel se vuoi.

Assicurati però di non usare JPG come output, perché questo è un formato con perdita e introdurrà i suoi artefatti.