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

如何同步播放多个视频并排播放?

我有3个视频,3个视频都有相同的时间,相同的帧数,它们只是在编码质量上有所不同。

现在我需要它们以同步的方式并排运行,以便进行评估。也就是说,当我按下 “播放 "键时,两个视频都应该开始。类似于停止、前进、后退。

有谁知道有什么播放器可以做到这一点?我的意思是指并排播放多于1个视频…

平台。Win7

答案 (10)

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

如果有人对此仍感兴趣,当前版本的VLC能够很好地做到这一点,而无需任何形式的脚本或附加组件。然而据我所知,你只能同步播放两个文件,而不是3。

1.要实现这个功能,只需打开VLC并选择媒体/>打开多个文件。 2. 在多文件窗口里面选择添加,添加第一个文件。 3. 之后点击 “显示更多选项 ,"复选框,然后点击窗口底部的 ”同步播放其他媒体 ,"复选框。 4. 选择浏览旁边的 “额外媒体 ,"来添加第二个文件。 5. 点击播放,两个媒体文件将在一个控制窗口中同时播放。

17
17
17
2013-10-02 10:43:52 +0000

Bino 是一款跨平台的媒体播放器,通常推荐用于立体文件播放。在其他功能中,它支持多个流的同步播放。

界面看起来可能有点原始或混乱,但你需要做的是

1.将两个视频文件拖入Bino 2. 选择“分流,左先”输入选项和“左/右”输出选项

瞧,你得到了同步播放。在这种情况下,所有的流都使用一套播放控制,所以你不必像@ta.speot.is建议的那样,"投资一些手指重量,训练自己快速点击"_。

作为奖励,它支持渲染anaglyph 3D。

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

Windows上的VLC (1.1.10或更高版本):

  • 工具→偏好设置
  • 显示设置→全部
  • 点击高级 (对于VLC 2.1.5,点击播放列表)
  • 取消勾选 “只允许一个运行的实例”
  • 取消勾选 “从文件管理器启动时只使用一个实例”

OS X上的VLC没有提供相同的选项集。然而,您可以使用 open -a VLC从终端运行多个实例。

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

如果你不介意使用命令行的话,你可以用 mpv 来实现。

3个视频并排(水平堆叠)

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个视频

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

注释

  • 在Windows中,使用;来分隔每个文件名(如3个视频的例子所示)。在Linux和macOS中使用--external-files。或者,使用两个:的实例来代替,如。--external-file.

  • 文件必须都是相同高度。如果不一样,则添加缩放、填充和/或裁剪滤镜。请参阅 mpv 文档 FFmpeg 过滤器 了解更多信息。

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

按Kiran说的做完后,打开你所有的视频,然后运行下面的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%
    }
}

这个脚本会把你的按键发送到所有正在运行的VLC媒体播放器中。如果你使用鼠标,它就不起作用了。

这些东西应该能用。

  • 前进:Ctrl + right / Alt + right / Shift + right
  • 后退:Ctrl + left / Alt + left / Shift + left
  • 播放/暂停。space
  • 加速。]
  • 加速:[
  • 减速。~^down::LoopControlSend(Windows, "^{down}")

你可以很容易地在下面添加其他按键:left, right, up, down

这并不能完美地同步视频,所以你可以使用以下4个键。left 仅控制活动窗口

  • right 很短的后跳
  • up 很短的前跳
  • down 中等的后跳
  • 0x6& 中等的前跳

如果你喜欢手动选择程序,请使用以下代码代替

;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

谷歌可能已经告诉你了,你可以买几个专有软件谁可以做到这一点,但以防万一: videocompare,tmpgenc,vidlord……

这个是免费的: http://forum.doom9.org/showthread.php?t=138430

(工作下载链接在帖子末尾)

未测试,因为我的wine设置现在完全搞砸了。

未测试,因为我的wine设置现在完全被搞乱了。它不做并排播放,而是堆叠播放(除非你有一个很好的lcd,否则你不会看到同样的东西,在屏幕的两个相反角落播放同样的视频)

如果你认为你真的需要并排播放,你可以使用visynth来做zimmer所说的。

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

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

你不需要做一个编码(反正会增加自己的编码伪影),只需要做一个项目,将两个视频一起播放的编码生成,然后跳过这个文件。

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

我也有同样的问题,但我至今没有在网上看到任何满意的解决方案(相信我,我已经做了彻底的搜索)。最后,我想出了我自己的解决方案,不需要任何额外的美元。虽然这是一个老问题,但我希望我的解决方法仍然有用。

首先,在VLC播放器中,进入工具->首选项。确保取消勾选 “Allow only one running instance "和 "Pause on the last frame of a video"。

然后,在文本文件中输入/编辑以下命令。打开windows命令提示符,通过复制和粘贴运行这些命令(或保存文本并将其作为批处理文件运行):

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%

这将打开三个VLC实例,每个实例都有三个视频中的一个,并且都以非常同步的方式播放,至少在你看来是这样。然而,这三个实例最初会相互重叠。你需要点击每个实例的标题栏,在不中断播放的情况下移动它们,以便你能看到它们在屏幕上并排播放。这是相当烦人的,但我认为这是一个非常小的不便。

我试过了,但不可能用热键控制所有实例的停止、前进、后退等。不过,’–repeat'选项会让视频循环播放,所以你可以等待它们重新开始。

对于非常长的视频,最好使用 ffmpeg 将并排的视频合并成一个视频。https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.html an http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html 这个命令只描述了如何合并两个视频,但我相信(即我没有测试过)你可以多次运行这个命令来合并多个视频文件。

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

我形象的说,你可以用AutoHotKey脚本在很短的时间内给三个玩家发送一个 “播放 "的快捷方式。

他们是否能够完全在同一时间开始游戏是另一回事。即使他们能够直接开始,我想也会有一些争夺硬盘的现象。如果这是一个重要的评价,可能要做一个内存盘。

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

如果这不是你经常做的事情,我会使用像Vegas这样的视频编辑软件来建立一个视频,所有的人都会显示。 Youtube视频示例如何做到这一点。

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

很多玩家会在视频中输出一帧图片。

你可以在视频中选择多个点来比较不同类型的图像(云、烟、树、草、运动都是很好的编码比较对象),并从你的每个视频中取相同的帧。

然后你可以在静态图像上进行比较,而不是试图发现运动的差异。如果您愿意,您可以在像素的基础上进行比较。

确保您不使用JPG作为输出,因为这是一种有损的格式,并会引入自己的伪影。