J'ai 3 vidéos, toutes les 3 ont le même temps, le même nombre d'images, et elles ne diffèrent que par la qualité de l'encodage.
Maintenant, j'ai besoin qu'ils fonctionnent côte à côte de manière synchronisée à des fins d'évaluation. Cela signifie quand j'appuie sur "play" BOTH! les vidéos devraient commencer. Analogiquement pour stopper, avancer, reculer.
Quelqu'un sait-il un joueur capable de faire ça? J'entends par là jouer plus d'une vidéo côte à côte ...
Plate-forme: Win7
VLC sous Windows (1.1.10 ou ultérieur):
VLC sur OS X ne fournit pas le même ensemble d'options. Vous pouvez cependant exécuter plusieurs instances à partir du terminal avec open -a VLC
.
Si quelqu'un est toujours intéressé par cela, la version actuelle de VLC est capable de le faire très bien sans script ou add-on. Pour autant que je sache, vous ne pouvez lire que deux fichiers simultanément, pas 3.
Bino est un lecteur multimédia multiplate-forme généralement recommandé pour la lecture de fichiers stéréoscopiques. Entre autres fonctionnalités, il prend en charge la lecture synchronisée de plusieurs flux.
L’interface peut sembler un peu primitive ou déroutante au début, mais tout ce que vous avez à faire est
Voilà, vous avez la lecture synchronisée. Le type dans lequel un seul jeu de commandes de lecture est utilisé pour tous les flux, de sorte que vous n’ayez pas à "Investir dans des haltères et vous entraîner à cliquer très rapidement" comme @ta .speot.is suggère.
En prime, il prend en charge le rendu 3D d'anaglyphe.
Après avoir suivi les instructions de Kiran, ouvrez toutes vos vidéos et exécutez le script AutoHotKey suivant.
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%
}
}
Ce script envoie vos frappes sur toutes les instances de VLC Media Player en cours d’exécution. Cela ne fonctionne pas si vous utilisez une souris.
Ces choses devraient fonctionner:
Ctrl + right / Alt + right / Shift + right
Ctrl + left / Alt + left / Shift + left
space
]
[
Vous pouvez facilement ajouter d'autres touches au-dessous de la ligne: ~^down::LoopControlSend(Windows, "^{down}")
Cela ne synchronise pas parfaitement les vidéos, vous pouvez donc utiliser les 4 touches suivantes: left, right, up, down
pour contrôler la fenêtre active uniquement .
left
saut très court en arrièreright
saut très court en avantup
saut en arrière moyendown
saut moyen en avantSi vous préférez choisir les programmes manuellement, utilisez plutôt le code suivant
;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%
}
}
Vous pouvez le faire avec mpv si cela ne vous dérange pas d'utiliser la ligne de commande:
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"
mpv --lavfi-complex="[vid1][vid2]hstack[vo];[aid1][aid2]amix[ao]" input1.mkv --external-file=input2.mkv
Sous Windows, utilisez ;
pour séparer chaque nom de fichier en --external-files
(comme indiqué dans l'exemple 3 videos ). Sous Linux et macOS, utilisez :
. Vous pouvez également utiliser deux instances de --external-file
, telles que: --external-file=input2.mkv --external-file=input3.mkv
.
Les fichiers doivent tous avoir la même hauteur. Si ce n'est pas le cas, ajoutez les filtres d'échelle, de tampon et/ou de rognage. Voir la documentation mpv et Filtres FFmpeg pour plus d'informations.
google vous a probablement déjà dit, vous pourriez acheter un logiciel propriétaire qui pourrait le faire, mais juste au cas où: vidéocompare, tmpgenc, vidlord ...
Celui-ci est gratuit: http://forum.Doom9.org/showthread.php?t=138430
(liens de téléchargement de travail à la fin du fil)
Non testé car mon vin est complètement foutu en ce moment. Il ne fait pas la lecture côte à côte mais empilée (à moins que vous n'ayez un très bon écran LCD, vous ne verrez pas la même chose en lisant la même vidéo dans les deux coins opposés de l'écran).
Si vous pensez avoir vraiment besoin d’être côte à côte, vous pouvez utiliser avisynth pour faire ce que dit Zimmer.
clip1 = DirectShowSource("C:\MyEncode1.foo", audio=false)
clip2 = DirectShowSource("C:\MyEncode2.foo", audio=false)
StackVertical(clip1,clip2)
(référence forum.Doom9.org/showthread.php?t=139769)
Vous n'avez pas besoin de faire un encodage (qui ajouterait de toute façon ses propres artefacts d'encodage), mais de créer un projet qui produirait un encodage des deux disques joués en même temps et ignorant le fichier.
J'ai le même problème mais je n'ai pas encore vu de solution satisfaisante en ligne (et croyez-moi, j'ai effectué une recherche approfondie). Enfin, je propose ma propre solution, qui ne nécessite pas de frais supplémentaires. Bien que cette question soit ancienne, j'espère que ma solution de contournement sera toujours utile.
Tout d’abord, dans VLC Player, allez dans Outils-> Préférences. Assurez-vous de décocher "Autoriser une seule instance en cours d'exécution" et "Suspendre sur la dernière image d'une vidéo".
Ensuite, tapez/modifiez les commandes suivantes dans un fichier texte. Ouvrez une invite de commande Windows et exécutez les commandes par copier-coller (ou enregistrez le texte et exécutez-le en tant que fichier de traitement par lots):
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%
Cela ouvrira trois instances de VLC, chacune avec l'une des trois vidéos et jouant toutes de manière très synchronisée, au moins à vos yeux. Cependant, les trois instances se chevaucheront initialement. Vous devrez cliquer sur la barre de titre de chaque instance pour les déplacer sans interrompre la lecture afin de pouvoir les voir jouer côte à côte sur votre écran. C’est plutôt agaçant, mais j’estime qu’il s’agit d’un très petit inconvénient.
J'ai essayé, mais il n'est pas possible de contrôler toutes les instances avec des raccourcis clavier pour arrêter, avancer, reculer, etc. Cependant, l'option '--repeat' mettra les vidéos en boucle, vous pouvez donc attendre qu'elles recommencent. .
Pour de très longues vidéos, il peut être préférable de fusionner les vidéos d’une composition côte à côte en une seule vidéo, en utilisant par exemple une vidéo. ffmpeg: https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html et http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html Cette commande décrit uniquement comment fusionner deux vidéos, mais je crois (c’est-à-dire que je n’ai pas testé vous pouvez exécuter la commande plusieurs fois pour incorporer plusieurs fichiers vidéo.
Je pense que vous pouvez utiliser un script AutoHotKey pour envoyer un raccourci "Lecture" aux trois joueurs en très peu de temps.
Qu'ils soient capables de commencer à jouer exactement au même moment est une autre affaire. Même s’ils sont capables de commencer tout de suite, j’imagine qu’il faudra se battre pour le disque dur. Vous voudrez peut-être créer un disque RAM s'il s'agit d'une évaluation importante.