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

Como reproduzir múltiplos vídeos sincronizados lado a lado?

Tenho 3 vídeos, todos os 3 têm o mesmo tempo, a mesma quantidade de frames, e só diferem em termos de qualidade de codificação.

Agora preciso que corram lado a lado, de forma sincronizada, para fins de avaliação. O que significa que quando carrego em “play” BOTH! os vídeos devem começar. Analogicamente para parar, avançar, retroceder.

Alguém conhece algum jogador capaz de fazer isso? Com isso quero dizer jogar mais de 1 vídeo lado a lado.

Plataforma: Win7

Respostas (10)

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

Se alguém ainda estiver interessado nisto, a versão actual da VLC é capaz de o fazer muito bem sem qualquer tipo de scripting ou add-on. Tanto quanto sei, no entanto, só se pode reproduzir dois ficheiros em sincronia, não 3.

  1. Para o conseguir basta abrir VLC e seleccionar Media>Abrir Ficheiros Múltiplos*.
  2. Dentro das janelas de múltiplos ficheiros seleccione adicionar para adicionar o primeiro ficheiro.
  3. Depois disto, clicar na caixa de verificação “ Mostrar mais opções ,” seguida da caixa de verificação “ Tocar outro media de forma sincronizada ,” na parte inferior da janela.
  4. Seleccione procurar ao lado de, “ Extra media* ,” para adicionar o segundo ficheiro.
  5. Carregue em reproduzir e os dois ficheiros de media serão reproduzidos simultaneamente com uma única janela de controlo.
17
17
17
2013-10-02 10:43:52 +0000

O Bino ](http://bino3d.org/) é um reprodutor de mídia multiplataforma geralmente recomendado para a reprodução de ficheiros estereoscópicos. Entre outras características, suporta a reprodução sincronizada de múltiplos streams.

A interface pode parecer um pouco primitiva ou confusa no início, mas tudo o que precisa de fazer é

  1. Arraste os seus dois ficheiros de vídeo para o Bino
  2. Seleccione “Separate streams, left first” opção de entrada e “Left/right” opção de saída

Voilà, tem reprodução sincronizada. Do tipo em que um único conjunto de controlos de reprodução é utilizado para todos os streams para que não tenha de “investir em alguns pesos de dedos e treinar-se para clicar muito rapidamente” como @ta.speot.is sugere.

Como bónus, suporta a renderização de anaglifos 3D.

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

VLC no Windows (1.1.10 ou posterior):

  • Ferramentas → Preferences
  • Show Settings → All
  • Click Advanced (Click Playlist for VLC 2.1.5)
  • Uncheck “Allow only one running instance”
  • Uncheck “Use only one instance when started from file manager”

VLC no OS X não fornece o mesmo conjunto de opções. No entanto, pode executar múltiplas instâncias a partir do Terminal com open -a VLC.

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

Pode fazer isto com mpv se não se importar de usar a linha de comando:

3 vídeos lado a lado (empilhados horizontalmente)

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 vídeos

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

Notas

  • No Windows use ; para separar cada nome de ficheiro em --external-files (como mostrado no exemplo 3 vídeos). Em Linux e macOS usar :. Em alternativa, utilizar duas instâncias de --external-file em vez de --external-file=input2.mkv --external-file=input3.mkv como por exemplo: 0x6&.

& - Os ficheiros devem ser todos da mesma altura. Se não forem, adicionar a balança, almofada, e/ou filtros de cultura. Ver a documentação mpv e FFmpeg Filters para mais informações.

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

Depois de fazer o que Kiran disse, abra todos os seus vídeos e execute o seguinte 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%
    }
}

Este script envia as suas teclas a todas as instâncias de execução do leitor de media VLC. Não funciona se utilizar um rato.

Estas coisas devem funcionar:

  • para a frente: Ctrl + right / Alt + right / Shift + right
  • para trás: Ctrl + left / Alt + left / Shift + left
  • reproduzir/pausar: space & - acelerar: ] & - velocidade para baixo: [

& Pode facilmente adicionar outras teclas abaixo da linha: ~^down::LoopControlSend(Windows, "^{down}")

Isto não sincroniza os vídeos na perfeição, pelo que pode usar as 4 teclas seguintes: left, right, up, down para controlar a janela activa apenas*.

  • left salto muito curto para trás
  • right salto muito curto para a frente
  • up salto médio para trás
  • down salto médio para a frente

Se preferir escolher os programas manualmente, utilize o seguinte código

;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 provavelmente já lhe disse, poderia comprar um casal de software proprietário que pudesse fazer isso, mas só no caso de : videocompare, tmpgenc, vidlord…

Este é grátis : http://forum.doom9.org/showthread.php?t=138430

(links de download de trabalho no fim do tópico)

Não testado porque a minha configuração de vinho está completamente aparafusada neste momento. Não faz lado a lado, mas sim playback empilhado (a menos que tenha um lcd muito bom, não verá a mesma coisa ao reproduzir o mesmo vídeo em dois cantos opostos do ecrã)

Se pensa que precisa realmente de um lado a lado, pode usar o avisynth para fazer o que o zimmer disse.

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

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

Não precisa de fazer um código (que de qualquer forma acrescentaria os seus próprios artefactos codificadores), basta fazer um projecto que produza um código dos dois vids a tocar juntos e saltar através do ficheiro.

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

Tenho o mesmo problema, mas até agora não vi nenhuma solução satisfatória em linha (e acreditem que tinha feito uma pesquisa exaustiva). Por fim, encontro a minha própria solução que não requer nenhum dólar extra. Embora esta seja uma questão antiga, espero que o meu trabalho ainda seja útil.

Primeiro, no leitor VLC, vá a Ferramentas->Preferências. Certifique-se de que desmarcou ‘Permitir apenas uma instância em execução’ e ‘Pausa no último frame de um vídeo’.

Depois, digite/edite os seguintes comandos num ficheiro de texto. Abrir uma janela de comandos, e executar os comandos por copiar e colar (ou guardar o texto e executá-lo como um ficheiro de lote):

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%

Isto abrirá três instâncias VLC, cada uma com um dos três vídeos e todas jogando de uma forma muito sincronizada, pelo menos a seu olho. No entanto, as três instâncias serão inicialmente sobrepostas. Terá de clicar na barra de título de cada uma das instâncias para as mover sem interromper a reprodução de modo a poder vê-las a tocar lado a lado no seu ecrã. Isto é bastante irritante, mas considero-o um inconveniente muito pequeno.

Tentei, mas não é possível controlar todas as instâncias com teclas de atalho para parar, avançar, retroceder, etc. No entanto, a opção ‘–repetição’ irá colocar os vídeos em laço, pelo que pode simplesmente esperar que comecem de novo.

Para vídeos muito longos, pode ser melhor fundir os vídeos numa composição lado a lado num só vídeo, utilizando, por exemplo, ffmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html an http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html Este comando descreve apenas como fundir dois vídeos, mas acredito (isto é, não o testei) que se pode executar o comando várias vezes para incorporar vários ficheiros de vídeo.

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

Eu imagino que pode usar um guião AutoHotKey para enviar um atalho “Play” para os três jogadores num espaço de tempo muito curto.

Se são capazes de começar a jogar exactamente ao mesmo tempo é uma questão diferente. Mesmo que sejam capazes de começar imediatamente, imagino que haverá alguma luta pelo disco rígido. Talvez queiram fazer um disco RAM se esta for uma avaliação importante.

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

Se isto não for algo que se faça com muita frequência, eu utilizaria um software de edição de vídeo como o vegas para construir um vídeo com todos eles a mostrar. Exemplo de vídeo no Youtube de como fazer isso

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

Muitos jogadores serão capazes de produzir uma imagem de um único quadro no vídeo.

Poderá escolher vários pontos nos seus vídeos para comparar diferentes tipos de imagem (nuvens, fumo, árvores, relva, movimento são bons para codificar comparações) e tirar os mesmos frames de cada um dos seus vídeos.

Poderá então fazer comparações numa imagem estática em vez de tentar detectar diferenças no movimento. Pode comparar numa base pixel a pixel se quiser.

Certifique-se de que não usa JPG como saída, pois este é um formato com perdas e irá introduzir os seus próprios artefactos.