¿Cómo reproducir varios videos sincronizados uno al lado del otro?

37

Tengo 3 videos, los 3 tienen el mismo tiempo, la misma cantidad de cuadros, y solo difieren en términos de calidad de codificación.

Ahora necesito que se ejecuten lado a lado de forma sincronizada para fines de evaluación. Es decir, cuando presiono "play" AMBOS! los videos deberían comenzar. Analógicamente para parar, adelante, atrás.

¿Alguien sabe de algún jugador capaz de hacer eso? Con eso me refiero a reproducir más de 1 video lado a lado ...

Plataforma: Win7

Oso gruñón
fuente
8
Invierte en algunos pesos de los dedos y entrénate para hacer clic muy rápido.
ta.speot.is
Te estás perdiendo el punto: necesito un reproductor capaz de mostrar más de 1 video.
Oso gruñón
44
Creo que tal vez estaba bromeando ...
Joe Taylor
puede programar una tarea para abrirlos todos a la vez.
Uğur Gümüşhan
1
"Tengo 3 videos" -> "cuando presiono" reproducir "¡AMBOS videos deberían comenzar" -> Creo que quieres decir que los 3 deberían comenzar?
jiggunjer

Respuestas:

10

VLC en Windows (1.1.10 o posterior):

  • Herramientas → Preferencias
  • Mostrar configuración → Todo
  • Haga clic en Avanzado (Haga clic en Lista de reproducción para VLC 2.1.5)
  • Desmarque "Permitir solo una instancia en ejecución"
  • Desmarque "Una instancia cuando se inicia desde el archivo"

VLC en OS X no proporciona el mismo conjunto de opciones. Sin embargo, puede ejecutar varias instancias desde la Terminal con open -a VLC.

Kiran
fuente
Eso es open -n -a vlcpara Mac.
Paul Tomblin
10
Esto no responde la pregunta (Windows 7, no OS X). Él tal vez podría empezar 3 vídeos con un archivo por lotes, pero no habría manera de ellos en suspenso todas etc.
jiggunjer
30

Si alguien todavía está interesado en esto, la versión actual de VLC puede hacerlo muy bien sin ningún tipo de script o complemento. Sin embargo, hasta donde sé, solo puedes reproducir dos archivos de forma sincronizada, no 3.

  1. Para lograr esto, simplemente abra VLC y seleccione Medios> Abrir varios archivos .
  2. Dentro de las ventanas de archivos múltiples, seleccione Agregar para agregar el primer archivo.
  3. Después de hacer clic en la casilla de verificación " Mostrar más opciones ", seguida de la casilla de verificación " Reproducir otro medio sincrónicamente " en la parte inferior de la ventana.
  4. Seleccione examinar junto a " Medios adicionales " para agregar el segundo archivo.
  5. Pulse reproducir y los dos archivos multimedia se reproducirán simultáneamente con una sola ventana de control.
Tim L
fuente
Funciona perfectamente en OSX :)
Navin
2
esto funciona solo para 2 videos no 3
Wakan Tanka
2
Si desea 3 videos, antes del paso 5: en la ventana Abrir medios, vaya al campo Opciones de edición en la parte inferior de la ventana. Tenga en cuenta que su segundo archivo de video está en el cuadro como :input-slave=file:///C:/Users/me/Documents/someVideo.mov:file-caching=300. Después del nombre de archivo, coloque un y #luego el siguiente nombre de archivo en el mismo formato, por ejemplo :input-slave=file:///C:/Users/me/Documents/someVideo.mov#file:///C:/Users/me/Documents/yetAnother.mov :file-caching=300. Luego, cuando haga clic en Reproducir, reproducirá los tres archivos sincronizados. Ver referencia: wiki.videolan.org/VLC_command-line_help
Rory
2
No funcionó para la versión 3.0.5, pero funcionó para la versión 2.2.4.
badjr
2
Para 3.0.7, esto parece funcionar de la siguiente manera: después de hacer clic en Reproducir, el video principal comienza a reproducirse, haga clic con el botón derecho en Video -> Video Track -> Track 2. Esto abre una ventana separada con el segundo video. Ambos están controlados por los controles en la ventana original.
Terry Brown
17

Bino es un reproductor multimedia multiplataforma comúnmente recomendado para la reproducción de archivos estereoscópicos. Entre otras características, admite la reproducción sincronizada de múltiples transmisiones.

La interfaz puede parecer un poco primitiva o confusa al principio, pero todo lo que necesita hacer es

  1. Arrastra tus dos archivos de video a Bino
  2. Seleccionar "corrientes separadas, a la izquierda" primera opción de entrada y de "izquierda / derecha" opción de salida

Voilà, tienes reproducción sincronizada. Del tipo en el que se usa un solo conjunto de controles de reproducción para todas las transmisiones, de modo que no tendría que "invertir en algunos pesos de los dedos y entrenarse para hacer clic muy rápido", como sugiere @ ta.speot.is.

Como beneficio adicional, admite renderizar anaglifos en 3D.

ov
fuente
2
El OP solicitó tener tres videos uno al lado del otro, no dos. Hasta donde puedo ver, Bino solo admite dos videos. (Además, para mí, la opción "Secuencias separadas, izquierda primero" está atenuada)
Simon Forsberg
2
Los archivos deben ser del mismo tamaño y código o la opción estará atenuada.
Ash
4

Después de hacer lo que Kiran dijo, abra todos sus videos y ejecute el siguiente script de 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 envía sus pulsaciones de teclas a todas las instancias en ejecución del reproductor multimedia VLC. No funciona si usas un mouse.

Estas cosas deberían funcionar:

  • adelante: Ctrl + right / Alt + right / Shift + right
  • hacia atrás: Ctrl + left / Alt + left / Shift + left
  • reproducir pausar: space
  • acelerar: ]
  • reduce la velocidad: [

Puede agregar fácilmente otras pulsaciones de teclas debajo de la línea: ~^down::LoopControlSend(Windows, "^{down}")

Esto no sincroniza los videos perfectamente, por lo que puede usar las siguientes 4 teclas: left, right, up, downpara controlar solo la ventana activa .

  • left salto muy corto hacia atrás
  • right salto muy corto hacia adelante
  • up salto medio hacia atrás
  • down salto hacia adelante medio

Si prefiere elegir los programas manualmente, use el siguiente 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%
    }
}
usuario52874
fuente
Santa vaca AHK es increíble. ¿Qué tal esto? Digamos que tengo 14 instancias de VLC que se ejecutan a través de dos broswers ... ¿hay un script que pueda agrupar todos los videos en ambos navegadores (así que, básicamente, mire # videos por pantalla, resolución de pantalla y azulejarlos de alguna manera inteligente)?
tbone
4

Puede hacer esto con mpv si no le importa usar la línea de comandos:

3 videos uno al lado del otro (apilados horizontalmente)

ingrese la descripción de la imagen aquí

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 videos

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

Notas

  • En Windows, use ;para separar cada nombre de archivo --external-files(como se muestra en el ejemplo de 3 videos ). En Linux y uso de macOS :. Alternativamente, utilizar dos instancias del --external-filelugar tales como: --external-file=input2.mkv --external-file=input3.mkv.

  • Los archivos deben tener la misma altura. Si no lo están, agregue la escala, la almohadilla y / o los filtros de recorte. Consulte la documentación de mpv y los filtros FFmpeg para obtener más información.

lema
fuente
3

Google probablemente ya te lo dijo, podrías comprar un par de software propietario que podría hacer eso, pero por si acaso: videocompare, tmpgenc, vidlord ...

Este es gratis: http://forum.doom9.org/showthread.php?t=138430

(enlaces de descarga de trabajo al final del hilo)

No probado porque mi configuración de vino está completamente jodida en este momento. No funciona lado a lado, pero la reproducción apilada (a menos que tenga una pantalla LCD muy buena, no verá lo mismo al reproducir el mismo video en dos esquinas opuestas de la pantalla de todos modos)

Si crees que realmente necesitas lado a lado, puedes usar avisynth para hacer lo que dijo zimmer.

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

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

No necesita hacer una codificación (que de todos modos agregaría sus propios artefactos de codificación), solo haga un proyecto que produzca una codificación de los dos videos que se reproducen juntos y omita el archivo.

usuario36755
fuente
3

Tengo el mismo problema, pero hasta ahora no he visto ninguna solución satisfactoria en línea (y créanme que había hecho una búsqueda exhaustiva). Finalmente llego a mi propia solución que no requiere ningún $ extra. Aunque esta es una vieja pregunta, espero que mi solución aún sea útil.

Primero, en el reproductor VLC, vaya a Herramientas-> Preferencias. Asegúrese de desmarcar 'Permitir solo una instancia en ejecución' y 'Pausa en el último fotograma de un video'.

Luego, escriba / edite los siguientes comandos en un archivo de texto. Abra un símbolo del sistema de Windows y ejecute los comandos copiando y pegando (o guarde el texto y ejecútelo como un archivo por 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%

Esto abrirá tres instancias de VLC, cada una con uno de los tres videos y todas se reproducirán de manera muy sincronizada, al menos a la vista. Sin embargo, las tres instancias se superpondrán entre sí inicialmente. Deberá hacer clic en la barra de título de cada una de las instancias para moverlas sin interrumpir la reproducción, de modo que pueda verlas reproduciéndose una al lado de la otra en su pantalla. Esto es bastante molesto, pero lo considero un inconveniente muy pequeño.

Lo he intentado pero no es posible controlar todas las instancias con teclas de acceso rápido para detener, avanzar, retroceder, etc. Sin embargo, la opción '--repetir' pondrá los videos en un bucle, por lo que puede esperar a que comiencen de nuevo .

Para videos muy largos, puede ser mejor fusionar los videos en una composición de lado a lado en un video usando, por ejemplo, ffmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html y http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html Este comando solo describe cómo combinar dos videos, pero creo que (es decir, no lo he probado) puede ejecutar el comando varias veces para incorporar múltiples archivos de video.

wtong
fuente
1

Me imagino que puede usar una secuencia de comandos AutoHotKey para enviar un acceso directo "Reproducir" a los tres jugadores en muy poco tiempo.

Si pueden comenzar a jugar exactamente al mismo tiempo es una cuestión diferente. Incluso si pueden comenzar de inmediato, imagino que habrá algunas peleas por el disco duro. Puede querer hacer un disco RAM si esta es una evaluación importante.

ta.speot.is
fuente
Te estás perdiendo el punto: necesito un reproductor capaz de mostrar más de 1 video.
Oso gruñón
Cualquier reproductor multimedia en el que pueda abrir más de una instancia, por ejemplo, VLC
ta.speot.is es
3
Realmente no taspeotis. Porque tengo que iniciar manualmente cada aplicación, que a su vez se traduce en NO sincrónico.
Oso gruñón
-1

Muchos jugadores podrán mostrar una imagen de un solo cuadro en el video.

Puede elegir múltiples puntos en sus videos para comparar diferentes tipos de imágenes (nubes, humo, árboles, pasto, movimiento son buenos para codificar las comparaciones) y tomar los mismos cuadros de cada uno de sus videos.

Luego puede hacer comparaciones en una imagen estática en lugar de tratar de detectar diferencias de movimiento. Puede comparar píxel por píxel si lo desea.

Asegúrese de no usar JPG como salida, ya que este es un formato con pérdida e introducirá sus propios artefactos.

Shevek
fuente
2
Te estás perdiendo el punto: necesito un reproductor capaz de mostrar más de 1 video.
Oso gruñón
1
@NoCanDo: Entiendo que esta es solo una opción alternativa para comparar los resultados de codificación de video si no encuentra una respuesta adecuada.
Shevek
-1

Si esto no es algo que haces muy a menudo, usaría un software de edición de video como vegas para construir un video con todos ellos mostrados.

Ejemplo de video de YouTube de cómo hacer eso.

zimmer62
fuente
2
Esa es una forma muy inconveniente de hacer eso. Aún mejor que nada hasta ahora.
Oso gruñón
Cite las partes esenciales de la respuesta de los enlaces de referencia, ya que la respuesta puede volverse inválida si las páginas enlazadas cambian.
DavidPostill