我有3个视频,所有3个视频具有相同的时间,相同的帧数,并且它们的编码质量不同。
现在,我需要它们以同步方式并排运行以进行评估。意思是当我同时按下“播放”键时!视频应该开始。类似地,停止,前进,后退。
任何人都知道有能力做到这一点的人吗?我的意思是并排播放多个视频...
平台:Win7
我有3个视频,所有3个视频具有相同的时间,相同的帧数,并且它们的编码质量不同。
现在,我需要它们以同步方式并排运行以进行评估。意思是当我同时按下“播放”键时!视频应该开始。类似地,停止,前进,后退。
任何人都知道有能力做到这一点的人吗?我的意思是并排播放多个视频...
平台:Win7
Answers:
Windows(1.1.10或更高版本)上的VLC:
OS X上的VLC不提供相同的选项集。但是,您可以使用在终端上运行多个实例open -a VLC
。
open -n -a vlc
为Mac。
如果仍然有人对此感兴趣,则当前的VLC版本可以很好地做到这一点,而无需任何脚本或附加组件。据我所知,但是您只能同步播放两个文件,不能3。
: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
Bino是一种跨平台媒体播放器,通常推荐用于立体文件播放。除其他功能外,它还支持多个流的同步播放。
界面一开始可能看起来有些原始或混乱,但是您要做的就是
Voilà,您获得了同步播放。@ ta.speot.is建议,所有流都使用一组播放控件,这样您就不必“投资一些手指的重量并训练自己非常快速地单击”。
作为奖励,它支持渲染立体3D。
完成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%
}
}
如果您不介意使用命令行,则可以使用mpv进行此操作:
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
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的编码,并跳过文件。
我遇到了同样的问题,但是到目前为止,我还没有在网上看到任何令人满意的解决方案(并且相信我已经进行了彻底的搜索)。最后,我提出了自己的解决方案,不需要任何额外的$。尽管这是一个老问题,但我希望我的解决方法仍然有用。
首先,在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 该命令仅描述了如何合并两个视频,但是我相信(即我尚未对其进行测试),您可以多次运行该命令来合并多个视频文件。
我可以通过使用AutoHotKey脚本在很短的时间内向所有三个播放器发送“播放”快捷方式的图像。
他们是否能够完全同时开始比赛是另一回事。即使他们能够立即启动,我也想在硬盘方面还会有一些争斗。如果这是一项重要的评估,则可能希望制作一个RAM磁盘。
如果这不是您经常要做的事情,我将使用像vegas这样的视频编辑软件来制作一个视频,并全部显示。