Como reproduzir vários vídeos lado-a-lado sincronizados?

32

Eu tenho três vídeos, todos os três têm o mesmo tempo, a mesma quantidade de quadros e eles diferem apenas em termos de qualidade de codificação.

Agora, preciso que eles sejam exibidos lado a lado de maneira sincronizada para fins de avaliação. Significado quando eu pressionar "play" tanto! 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 tocar mais de um vídeo lado-a-lado ...

Plataforma: Win7

    
por Grumpy ol' Bear 10.05.2010 / 13:12

10 respostas

11

VLC no Windows (1.1.10 ou posterior):

  • Ferramentas → Preferências
  • Mostrar configurações → Todos
  • Clique em Avançado (Clique em Playlist para o VLC 2.1.5)
  • Desmarque a opção "Permitir apenas uma instância em execução"
  • Desmarque "Uma instância quando iniciada a partir do arquivo"

O VLC no OS X não fornece o mesmo conjunto de opções. Você pode, no entanto, executar várias instâncias do Terminal com open -a VLC .

    
por 21.07.2011 / 10:07
25

Se alguém ainda estiver interessado nisso, a versão atual do VLC é capaz de fazer isso muito bem sem qualquer tipo de script ou complemento. Até onde sei, você só pode reproduzir dois arquivos de forma síncrona, não 3.

  1. Para realizar isso, basta abrir o VLC e selecionar Mídia > Abrir vários arquivos .
  2. Dentro das janelas de vários arquivos, selecione Adicionar para adicionar o primeiro arquivo.
  3. Depois disso, clique na caixa de seleção " Mostrar mais opções ," caixa de seleção seguida pela, " Reproduzir outra mídia em sincronia ," na parte inferior da janela.
  4. Selecione procurar ao lado de " Mídia extra " para adicionar o segundo arquivo.
  5. Clique em reproduzir e os dois arquivos de mídia serão reproduzidos simultaneamente com uma única janela de controle.
por 22.01.2016 / 17:10
15

O Bino é um media player multiplataforma comumente recomendado para reprodução de arquivos estereoscópicos. Entre outros recursos, ele suporta a reprodução sincronizada de vários fluxos.

A interface pode parecer um pouco primitiva ou confusa no começo, mas tudo que você precisa fazer é

  1. Arraste seus dois arquivos de vídeo para o Bino
  2. Selecione a opção de entrada "Transmissões separadas, primeiro à esquerda" e opção de saída "Esquerda / direita"

Voilà, você conseguiu a reprodução sincronizada. O tipo onde um único conjunto de controles de reprodução é usado para todos os streams, então você não teria que "Investir em alguns pesos de dedo e treinar-se para clicar muito rapidamente" como @ ta.speot.is sugere .

Como bônus, ele suporta renderização em anaglyph 3D.

    
por 02.10.2013 / 12:43
4

Depois de fazer o que o 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 suas combinações de teclas para todas as instâncias em execução do media player VLC. Não funciona se você usar um mouse.

Essas coisas devem funcionar:

  • encaminhar: Ctrl + right / Alt + right / Shift + right
  • para trás: Ctrl + left / Alt + left / Shift + left
  • reproduzir / pausar: space
  • acelerar: ]
  • velocidade abaixo: [

Você pode adicionar facilmente outros pressionamentos de tecla abaixo da linha: ~^down::LoopControlSend(Windows, "^{down}")

Isso não sincroniza os vídeos perfeitamente, portanto, você pode usar as 4 chaves a seguir: left, right, up, down para controlar apenas a janela ativa .

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

Se você preferir escolher os programas manualmente, use 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%
    }
}
    
por 18.10.2014 / 17:33
3

o google provavelmente já lhe disse, você poderia comprar um software proprietário que poderia fazer isso, mas apenas no caso: videocompare, tmpgenc, vidlord ...

Este é gratuito: link

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

Não testado, porque a configuração do meu vinho está completamente parafusada agora. Ele não faz uma reprodução lado a lado, mas empilhada (a menos que você tenha um LCD muito bom, você não verá a mesma coisa tocando o mesmo vídeo em dois cantos opostos da tela)

Se você acha que precisa mesmo de 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)

(referência forum.doom9.org/showthread.php?t=139769)

Você não precisa fazer uma codificação (que adicionaria seus próprios artefatos de codificação de qualquer maneira), basta fazer um projeto que produza uma codificação dos dois vídeos tocando juntos e pule o arquivo.

    
por 11.05.2010 / 00:03
3

Eu tenho o mesmo problema, mas até agora não vi nenhuma solução satisfatória online (e acredite em mim, eu fiz uma pesquisa completa). Por fim, chego a minha própria solução que não requer nenhum extra de $. Embora essa seja uma pergunta antiga, espero que minha solução alternativa ainda seja útil.

Primeiro, no player VLC, vá para Ferramentas- > Preferências. Certifique-se de desmarcada "Permitir apenas uma instância em execução" e "Pausar no último quadro de um vídeo".

Em seguida, digite / edite os seguintes comandos em um arquivo de texto. Abra um prompt de comando do Windows e execute os comandos copiando e colando (ou salve o texto e execute-o como um arquivo em lotes):

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%

Isso abrirá três instâncias de VLC, cada uma com um dos três vídeos e todos tocando de maneira muito sincronizada, pelo menos para o seu olho. No entanto, as três instâncias se sobrepõem inicialmente. Você precisará clicar na barra de título de cada uma das instâncias para movê-las sem interromper a reprodução para que possa vê-las tocando lado a lado na tela. Isto é bastante irritante, mas considero um inconveniente muito pequeno.

Eu 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 '--repeat' colocará os vídeos em um loop, então você pode apenas esperar por eles para começar de novo.

Para vídeos muito longos, pode ser melhor mesclar os vídeos em uma composição lado-a-lado em um vídeo usando, por exemplo, ffmpeg: link e link Este comando descreve apenas como mesclar dois vídeos, mas acredito que (eu não testei) você pode executar o comando várias vezes para incorporar vários arquivos de vídeo.

    
por 03.10.2015 / 01:50
2

Você pode fazer isso com mpv se não se importar em 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 arquivo em --external-files (como mostrado no exemplo de 3 vídeos ). No Linux e no macOS, use : . Como alternativa, use duas instâncias de --external-file , como: --external-file=input2.mkv --external-file=input3.mkv .

  • Os arquivos devem ter a mesma altura. Se não estiverem, adicione os filtros de escala, bloco e / ou cultura. Veja a documentação do mpv e Filtros do FFmpeg para mais informações.

por 24.05.2018 / 20:47
1

Eu imagino que você pode usar um script AutoHotKey para enviar um atalho "Play" para os três jogadores em um curto período de tempo.

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

    
por 10.05.2010 / 13:16
-1

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

Você pode escolher vários pontos em seus vídeos para comparar diferentes tipos de imagem (nuvens, fumaça, árvores, grama, movimento são bons para codificar comparações) e tirar os mesmos quadros de cada um de seus vídeos.

Você pode fazer comparações em uma imagem estática em vez de tentar detectar diferenças no movimento. Você pode comparar pixel a pixel se quiser.

Certifique-se de não usar o JPG como saída, pois esse é um formato com perdas e apresentará seus próprios artefatos.

    
por 10.05.2010 / 13:22
-1

Se isso não é algo que você faz com muita frequência, eu usaria um software de edição de vídeo como o vegas para criar um vídeo com todos eles mostrando.

Exemplo de vídeo do YouTube sobre como fazer isso

    
por 10.05.2010 / 16:02