如何同步播放多个视频?


37

我有3个视频,所有3个视频具有相同的时间,相同的帧数,并且它们的编码质量不同。

现在,我需要它们以同步方式并排运行以进行评估。意思是当我同时按下“播放”键时!视频应该开始。类似地,停止,前进,后退。

任何人都知道有能力做到这一点的人吗?我的意思是并排播放多个视频...

平台:Win7


8
投资一些手指的重量,训练自己快速点击。
ta.speot。是

您错过了要点:我需要一个能够显示多个视频的播放器。
脾气暴躁的小熊

4
我想也许他是在开玩笑...
Joe Taylor

您可以安排任务一次将其全部打开。
维吾尔族Gümüşhan

1
“我有3个视频”->“当我按“播放”时,两个视频都应该开始播放”->我想你是说所有3个视频都应该开始播放?
jiggunjer 2015年

Answers:


10

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

  • 工具→首选项
  • 显示设置→全部
  • 单击高级(对于VLC 2.1.5,单击播放列表
  • 取消选中“仅允许一个正在运行的实例”
  • 取消选中“从文件启动时的一个实例”

OS X上的VLC不提供相同的选项集。但是,您可以使用在终端上运行多个实例open -a VLC


那是open -n -a vlc为Mac。
Paul Tomblin,2015年

10
这不能回答问题(Windows 7,而不是OS X)。他也许可以开始3个视频与一个批处理文件,但就没有办法暂停所有这些等等
jiggunjer

30

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

  1. 为此,只需打开VLC并选择Media> Open Multiple Files
  2. 在多个文件窗口中,选择添加以添加第一个文件。
  3. 在此之后,单击窗口底部的“ 显示更多选项 ”复选框,然后单击“ 同步播放另一种媒体 ”复选框。
  4. 选择“ 额外媒体 ” 旁边的浏览以添加第二个文件。
  5. 点击播放,两个媒体文件将在一个控制窗口中同时播放。

可以在OSX上完美运行:)
Navin

2
这仅适用于2个视频,不适用于3个视频
Wakan Tanka

2
如果需要3个视频,请在步骤5之前:在“打开媒体”窗口上,转到窗口底部的“编辑选项”字段。请注意,您的第二个视频文件位于框中:input-slave=file:///C:/Users/me/Documents/someVideo.mov:file-caching=300。在文件名之后,输入,#然后以相同格式(例如)输入下一个文件名:input-slave=file:///C:/Users/me/Documents/someVideo.mov#file:///C:/Users/me/Documents/yetAnother.mov :file-caching=300。然后,当您单击“播放”时,它将同步播放所有三个文件。请参阅参考资料:wiki.videolan.org/VLC_command-line_help
罗里(Rory)

2
不适用于版本3.0.5,但适用于版本2.2.4。
badjr

2
对于3.0.7,它的工作方式如下-单击“播放”开始播放主视频后,右键单击“视频”->“视频轨道”->“轨道2”。这将打开一个包含第二个vid的单独窗口。它们都由原始窗口中的控件控制。
特里·布朗

17

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

界面一开始可能看起来有些原始或混乱,但是您要做的就是

  1. 将您的两个视频文件拖到Bino中
  2. 选择“单独的流,左先”输入选项和“左/右”输出选项

Voilà,您获得了同步播放。@ ta.speot.is建议,所有流都使用一组播放控件,这样您就不必“投资一些手指的重量并训练自己非常快速地单击”

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


2
OP要求并排播放三个视频,而不是两个。据我所知,Bino仅支持两个视频。(另外,对我来说,“分开的流,左起第一”选项是灰色的)
Simon Forsberg

2
文件大小和代码必须相同,否则该选项将显示为灰色。
Ash Ash's

4

完成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}")

这无法完美同步视频,因此您可以使用以下4个键:left, right, up, down控制活动窗口

  • left 向后跳很短
  • right 非常短的前跳
  • up 中后跳
  • down 中级前跳

如果您希望手动选择程序,请改用以下代码

;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%
    }
}

圣牛AHK是惊人的。怎么样。...让我说我有14个VLC实例在两个浏览器中运行....是否有一个脚本可以在两个浏览器之间平铺所有视频(因此,基本上,每个屏幕查看#个视频,屏幕分辨率和以某种智能方式将其平铺)?
tbone

4

如果您不介意使用命令行,则可以使用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中,请使用;分隔每个文件名--external-files(如3个视频示例所示)。在Linux和macOS中使用:。或者,使用--external-file代替的两个实例,例如:--external-file=input2.mkv --external-file=input3.mkv

  • 文件的高度必须相同。如果没有,则添加刻度,填充和/或修剪过滤器。有关更多信息,请参见mpv文档FFmpeg过滤器


3

google可能已经告诉过您,您可以购买几个可以做到这一点的专有软件,但以防万一:videocompare,tmpgenc,vidlord ...

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

(该线程末尾的有效下载链接)

未经测试,因为我的葡萄酒设置已经完全拧紧。它不会并排播放,而是堆叠播放(除非您拥有非常好的LCD,否则无论如何在屏幕的两个相对角上播放相同的vid都不会看到相同的东西)

如果您认为确实需要并排,则可以使用avisynth来执行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)

您不需要进行编码(无论如何它都会添加自己的编码工件),只需创建一个项目,该项目将产生两个一起播放的vid的编码,并跳过文件。


3

我遇到了同样的问题,但是到目前为止,我还没有在网上看到任何令人满意的解决方案(并且相信我已经进行了彻底的搜索)。最后,我提出了自己的解决方案,不需要任何额外的$。尽管这是一个老问题,但我希望我的解决方法仍然有用。

首先,在VLC播放器中,转到“工具”->“首选项”。确保取消选中“仅允许一个正在运行的实例”和“在视频的最后一帧暂停”。

然后,在文本文件中键入/编辑以下命令。打开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 和 http://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html 该命令仅描述了如何合并两个视频,但是我相信(即我尚未对其进行测试),您可以多次运行该命令来合并多个视频文件。


1

我可以通过使用AutoHotKey脚本在很短的时间内向所有三个播放器发送“播放”快捷方式的图像。

他们是否能够完全同时开始比赛是另一回事。即使他们能够立即启动,我也想在硬盘方面还会有一些争斗。如果这是一项重要的评估,则可能希望制作一个RAM磁盘。


您错过了要点:我需要一个能够显示多个视频的播放器。
脾气暴躁的小熊

您可以打开多个实例的任何媒体播放器,例如VLC
ta.speot。是2010年

3
不是真正的骨灰足。因为我必须手动启动每个应用程序,这反过来又转化为“不同步”。
脾气暴躁的小熊

-1

许多播放器将能够在视频中输出单个帧的图片。

您可以在视频中选择多个点来比较不同类型的图像(云,烟,树,草,运动非常适合进行编码比较),并从每个视频中获取相同的帧。

然后,您可以在静态图像上进行比较,而不必试图发现运动上的差异。如果需要,可以逐个像素进行比较。

确保您不要将JPG用作输出,因为这是一种有损格式,会引入其自身的伪像。


2
您错过了要点:我需要一个能够显示多个视频的播放器。
脾气暴躁的醇”熊

1
@NoCanDo:我了解,如果您找不到合适的答案,这只是您比较视频编码结果的另一种选择。
Shevek

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.