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

36

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

Agora preciso que eles sejam executados lado a lado de maneira sincronizada para fins de avaliação. Ou seja, quando eu pressiono "play" AMBOS! os vídeos devem começar. Analogicamente para parar, avançar e retroceder.

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

Plataforma: Win7

Urso mal-humorado
fonte
8
Invista em alguns pesos dos dedos e treine-se para clicar muito rapidamente.
ta.speot.is
Você está perdendo o ponto: preciso de um player capaz de exibir mais de 1 vídeo.
Grumpy ol 'Bear
4
Acho que talvez ele estivesse brincando ...
Joe Taylor
você pode agendar uma tarefa para abri-las todas de uma vez.
Uğur Gümüşhan
1
"Eu tenho 3 vídeos" -> "quando eu pressiono" reproduzir "AMBOS! Os vídeos devem começar" -> Eu acho que você quer dizer que todos os 3 devem começar?
Jggunjer

Respostas:

10

VLC no Windows (1.1.10 ou posterior):

  • Ferramentas → Preferências
  • Mostrar configurações → Tudo
  • Clique em Avançado (clique em Lista de reprodução para VLC 2.1.5)
  • Desmarque a opção "Permitir apenas uma instância em execução"
  • Desmarque a opção "Uma instância quando iniciada no arquivo"

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

Kiran
fonte
Isso é open -n -a vlcpara Mac.
Paul Tomblin
9
Isso não responde à pergunta (Windows 7, não OS X). Ele poderia talvez começar 3 vídeos com um arquivo de lote, mas não haveria nenhuma maneira de parar todos eles etc.
jiggunjer
30

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

  1. Para fazer 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 ", seguida pela caixa de seleção " Reproduzir outra mídia de forma síncrona " na parte inferior da janela.
  4. Selecione procurar próximo a " Mídia extra " para adicionar o segundo arquivo.
  5. Clique em play e os dois arquivos de mídia serão reproduzidos simultaneamente com uma única janela de controle.
Tim L
fonte
Funciona perfeitamente em OSX :)
Navin
2
isso funciona apenas para 2 vídeos, não 3
Wakan Tanka 8/16
2
Se você quiser 3 vídeos, antes da etapa 5: na janela Abrir Mídia, vá para o campo Opções de Edição, na parte inferior da janela. Observe que seu segundo arquivo de vídeo está na caixa como :input-slave=file:///C:/Users/me/Documents/someVideo.mov:file-caching=300. Após o nome do arquivo, coloque um #próximo nome de arquivo no mesmo formato, por exemplo :input-slave=file:///C:/Users/me/Documents/someVideo.mov#file:///C:/Users/me/Documents/yetAnother.mov :file-caching=300. Quando você clicar em Reproduzir, os três arquivos serão sincronizados. Consulte a referência: wiki.videolan.org/VLC_command-line_help
Rory
2
Não funcionou para a versão 3.0.5, mas funcionou para a versão 2.2.4.
badjr
2
Para o 3.0.7, isso parece funcionar da seguinte maneira - depois que você clicar em Reproduzir, o vídeo principal começará a ser reproduzido, clique com o botão direito do mouse em Vídeo -> Faixa de Vídeo -> Faixa 2. Isso abre uma janela separada com o segundo vídeo. Ambos são controlados pelos controles na janela original.
Terry Brown
17

O Bino é um media player de plataforma cruzada 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 o que você precisa fazer é

  1. Arraste seus dois arquivos de vídeo para o Bino
  2. Selecione "fluxos separados, deixaram primeira" opção de entrada e "esquerda / direita" opção de saída

Voilà, você tem reprodução sincronizada. O tipo em que um único conjunto de controles de reprodução é usado para todos os fluxos, para que você não precise "Investir em alguns pesos dos dedos e treinar-se para clicar muito rapidamente", como sugere @ ta.speot.is.

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

ov
fonte
2
O OP pediu três vídeos lado a lado, não dois. Tanto quanto posso ver, o Bino suporta apenas dois vídeos. (Além disso, para mim, a opção "Separar fluxos, deixada em primeiro lugar" fica acinzentada)
Simon Forsberg
2
Os arquivos precisam ter o mesmo tamanho e código ou a opção será acinzentada.
Ash
4

Depois de fazer o que Kiran disse, abra todos os seus vídeos e execute o seguinte script do 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 teclas digitadas para todas as instâncias em execução do VLC media player. Não funciona se você usar um mouse.

Essas coisas devem funcionar:

  • frente: Ctrl + right / Alt + right / Shift + right
  • para trás: Ctrl + left / Alt + left / Shift + left
  • a pausa: space
  • acelerar: ]
  • diminua a velocidade: [

Você pode adicionar facilmente outras teclas abaixo da linha: ~^down::LoopControlSend(Windows, "^{down}")

Isso não sincroniza os vídeos perfeitamente, então você pode usar as quatro teclas a seguir: left, right, up, downpara controlar apenas a janela ativa .

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

Se você preferir escolher os programas manualmente, use o código a seguir

;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%
    }
}
user52874
fonte
A vaca sagrada AHK é incrível. Que tal isso ... digamos que eu tenho 14 instâncias do VLC executando entre dois broswers .... existe um script que pode agrupar todos os vídeos nos dois navegadores (então, basicamente, veja # vídeos por tela, resolução de tela e lado a lado de alguma maneira inteligente)?
tbone
4

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)

insira a descrição da imagem aqui

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 --external-files(como mostrado no exemplo de 3 vídeos ). No Linux e macOS, use :. Alternativamente, usar dois casos de --external-file, em vez, tal 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, almofada e / ou corte. Consulte a documentação do mpv e os filtros do FFmpeg para obter mais informações.

llogan
fonte
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: http://forum.doom9.org/showthread.php?t=138430

(links para download em funcionamento no final do tópico)

Não testado porque minha instalação de vinhos está completamente ferrada agora. Não funciona lado a lado, mas sim a reprodução empilhada (a menos que você tenha um LCD muito bom, não verá a mesma coisa tocando o mesmo vídeo em dois cantos opostos da tela)

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

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

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

user36755
fonte
3

Tenho o mesmo problema, mas ainda não vi nenhuma solução satisfatória online (e acredite, fiz uma pesquisa completa). Finalmente, eu venho com minha própria solução que não exige nenhum valor extra. Embora essa seja uma pergunta antiga, espero que minha solução alternativa ainda seja útil.

Primeiro, no VLC player, vá em Ferramentas-> Preferências. Desmarque a opção '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 copie e cole (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 do VLC, cada uma com um dos três vídeos e todas reproduzidas de maneira muito sincronizada, pelo menos nos seus olhos. 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 poder vê-las tocando lado a lado na tela. Isso é 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 esperar que eles comecem novamente .

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: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html e http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html Este comando descreve apenas como mesclar dois vídeos, mas acredito que (por exemplo, não testei) você pode executar o comando várias vezes para incorpore vários arquivos de vídeo.

wtong
fonte
1

Imagino que você pode usar um script AutoHotKey para enviar um atalho "Play" para os três jogadores em um período muito curto.

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

ta.speot.is
fonte
Você está perdendo o ponto: preciso de um player capaz de exibir mais de 1 vídeo.
Grumpy ol 'Bear
Qualquer media player onde você pode abrir mais de uma instância, por exemplo VLC
ta.speot.is
3
Não é realmente taspeotis. Porque eu tenho que iniciar manualmente cada aplicativo que, por sua vez, se traduz em NÃO síncrono.
Grumpy ol 'Bear
-1

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

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

Você pode então fazer comparações em uma imagem estática, em vez de tentar detectar diferenças no movimento. Você pode comparar pixel por pixel, se desejar.

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

Shevek
fonte
2
Você está perdendo o ponto: preciso de um player capaz de exibir mais de 1 vídeo.
Grumpy ol 'Bear
1
@NoCanDo: Entendo que esta é apenas uma opção alternativa para você comparar os resultados da codificação de vídeo, caso não encontre uma resposta adequada.
Shevek
-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 sendo exibidos.

Exemplo de vídeo do YouTube de como fazer isso.

zimmer62
fonte
2
Essa é uma maneira muito inconveniente de fazer isso. Ainda melhor do que nada até agora.
Grumpy ol 'Bear
Cite as partes essenciais da resposta nos links de referência, pois a resposta pode se tornar inválida se as páginas vinculadas forem alteradas.
DavidPostill