여러 개의 비디오를 나란히 동기화하는 방법은 무엇입니까?


37

비디오가 3 개 있는데, 3 개 모두 같은 시간, 같은 양의 프레임을 가지고 있으며 인코딩 품질 측면에서만 다릅니다.

이제 평가 목적으로 동기화 된 방식으로 나란히 실행해야합니다. "play"를 눌렀을 때의 의미! 비디오가 시작되어야합니다. 정지, 전진, 후진과 유사합니다.

누구든지 그렇게 할 수있는 선수를 알고 있습니까? 즉, 두 개 이상의 비디오를 나란히 재생한다는 의미입니다.

플랫폼 : Win7


8
손가락 무게에 투자하고 매우 빠르게 클릭하도록 훈련하십시오.
ta.speot.

요점을 놓쳤습니다. 비디오를 두 개 이상 표시 할 수있는 플레이어가 필요합니다.
Grumpy ol 'Bear

4
아마 그가 농담 한 것 같아요.
Joe Taylor

한 번에 모두 열도록 작업을 예약 할 수 있습니다.
Uğur Gümüşhan

1
"3 개의 비디오가 있습니다"-> ""재생 "을 누르면 2 개의 비디오가 시작됩니다"-> 3 개 모두를 시작해야한다고 생각하십니까?
jiggunjer

답변:


10

Windows의 VLC (1.1.10 이상) :

  • 도구 → 환경 설정
  • 설정 표시 → 모두
  • 고급을 클릭하십시오 ( VLC 2.1.5의 경우 재생 목록 을 클릭하십시오 ).
  • "실행중인 인스턴스 만 허용"을 선택 취소하십시오.
  • "파일에서 시작할 때 하나의 인스턴스"를 선택 취소하십시오.

OS X의 VLC는 동일한 옵션 세트를 제공하지 않습니다. 그러나을 사용하여 터미널에서 여러 인스턴스를 실행할 수 있습니다 open -a VLC.


그건 open -n -a vlcMac 용.
Paul Tomblin

10
이것은 질문에 대답하지 않습니다 (OS X가 아닌 Windows 7). 그는 배치 파일로 3 개의 비디오를 시작할 수 있지만 모든 것을 일시 정지 할 방법은 없습니다.
jiggunjer

30

누구든지 여전히 이것에 관심이 있다면 VLC의 현재 버전은 어떠한 종류의 스크립팅이나 애드온 없이도이 작업을 매우 잘 수행 할 수 있습니다. 그러나 내가 아는 한 3 개의 파일이 아닌 2 개의 파일 만 동기식으로 재생할 수 있습니다.

  1. 이를 위해서는 VLC를 열고 미디어> 여러 파일 열기를 선택하십시오 .
  2. 여러 파일 창에서 추가를 선택하여 첫 번째 파일을 추가하십시오.
  3. 그런 다음 창 하단의 " 추가 옵션 표시 "확인란과 " 동 기적으로 다른 미디어 재생 "확인란을 클릭하십시오.
  4. " 추가 미디어 "옆의 찾아보기를 선택 하여 두 번째 파일을 추가하십시오.
  5. 적중 재생과 두 개의 미디어 파일은 단일 제어 창으로 동시에 재생됩니다.

OSX에서 완벽하게 작동 :)
Navin

2
이것은 3이 아닌 2 개의 비디오에 대해서만 작동합니다
Wakan Tanka

2
5 단계 전에 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
Rory

2
버전 3.0.5에서는 작동하지 않지만 버전 2.2.4에서는 작동했습니다.
badjr

2
3.0.7의 경우 다음과 같이 작동합니다. 기본 비디오 재생을 클릭 한 후 비디오-> 비디오 트랙-> 트랙 2를 마우스 오른쪽 단추로 클릭하십시오. 그러면 두 번째 vid가있는 별도의 창이 열립니다. 둘 다 원래 창의 컨트롤에 의해 제어됩니다.
테리 브라운

17

Bino 는 스테레오 스코픽 파일 재생에 일반적으로 권장되는 크로스 플랫폼 미디어 플레이어입니다. 다른 기능 중에서도 여러 스트림의 동기화 된 재생을 지원합니다.

인터페이스는 처음에는 약간 원시적이거나 혼란스러워 보일 수 있지만 필요한 것은

  1. 두 개의 비디오 파일을 Bino로 드래그
  2. 선택 "별도의 첫번째 왼쪽 스트림," 입력 옵션과 "왼쪽 / 오른쪽" 출력 옵션을

Voilà, 동기화 된 재생이 있습니다. @ ta.speot.가 제안하는 것처럼 단일 스트림의 재생 컨트롤 세트가 모든 스트림에 사용되므로 "손가락 무게에 투자하고 빠르게 클릭하도록 훈련" 할 필요가 없습니다 .

보너스로 입체 3D 렌더링을 지원합니다.


2
OP는 2 개가 아닌 3 개의 비디오를 나란히 배치 하도록 요청했습니다 . 내가 볼 수있는 한, Bino는 두 개의 비디오 만 지원합니다. (또한, 나를 위해 옵션이 회색으로 표시됩니다 "별도의 스트림, 첫번째 왼쪽")
사이먼 포스 버그

2
파일 크기와 코드가 같아야합니다. 그렇지 않으면 옵션이 회색으로 표시됩니다.
Ash

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

구글은 아마 이미 당신에게 말했다, 당신은 그것을 할 수있는 몇 가지 독점 소프트웨어를 구입할 수 있지만, 경우에 따라 : 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)

인코딩 할 필요가 없습니다 (어쨌든 자체 인코딩 아티팩트를 추가 할 필요가 있음), 함께 재생하는 두 vids의 인코딩을 생성하고 파일을 건너 뛰는 프로젝트를 만드십시오.


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%

이렇게하면 각각 3 개의 비디오 중 하나가 있고 적어도 모두 눈에 매우 동기화 된 방식으로 재생되는 3 개의 VLC 인스턴스가 열립니다. 그러나 세 인스턴스는 처음에 서로 겹칩니다. 재생을 중단하지 않고 각 인스턴스의 제목 표시 줄을 클릭하면 화면에서 나란히 재생되는 것을 볼 수 있습니다. 이것은 다소 성가신 일이지만 매우 불편합니다.

시도했지만 멈춤, 앞으로, 뒤로 등의 단축키를 사용하여 모든 인스턴스를 제어하는 ​​것은 불가능합니다. 그러나 '--repeat'옵션은 비디오를 루프에 넣으므로 다시 시작할 때까지 기다릴 수 있습니다 .

매우 긴 동영상의 경우, 사용 하나 개의 비디오로 나란히 구성에서 비디오를 병합하는 것이 가장 좋습니다 예는 FFmpeg : https://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015662.htmlhttp://ffmpeg.org/pipermail/ffmpeg-user/2013-June/015712.html 이 명령은 두 개의 비디오를 병합하는 방법 만 설명하지만 테스트를하지 않은 경우 여러 번 명령을 실행할 수 있다고 생각합니다 여러 비디오 파일을 통합하십시오.


1

AutoHotKey 스크립트를 사용하여 매우 짧은 시간 안에 세 명의 플레이어에게 "재생"바로 가기를 보낼 수 있습니다.

그들이 정확히 동시에 연주를 시작할 수 있는지 여부는 다른 문제입니다. 그들이 곧바로 시작할 수 있다고하더라도, 나는 하드 드라이브와의 싸움이있을 것이라고 생각합니다. 이것이 중요한 평가라면 RAM 디스크를 만들고 싶을 수도 있습니다.


요점을 놓쳤습니다. 비디오를 두 개 이상 표시 할 수있는 플레이어가 필요합니다.
Grumpy ol 'Bear

하나 이상의 인스턴스를 열 수있는 모든 미디어 플레이어 (예 : VLC
ta.speot.)는

3
실제로 taspeotis가 아닙니다. 각 응용 프로그램을 수동으로 시작해야하기 때문에 NOT 동기로 변환됩니다.
Grumpy ol 'Bear 8:15에

-1

많은 플레이어들이 비디오에서 단일 프레임의 사진을 출력 할 수 있습니다.

비디오에서 여러 유형의 이미지 (구름, 연기, 나무, 잔디, 동작이 인코딩을 비교하는 데 적합 함)를 비교하고 각 비디오에서 동일한 프레임을 사용할 수 있도록 여러 지점을 선택할 수 있습니다.

그런 다음 동작의 차이를 발견하지 않고 정적 이미지를 비교할 수 있습니다. 원하는 경우 픽셀 단위로 비교할 수 있습니다.

JPG를 출력으로 사용하지 마십시오. 이는 손실 형식이며 자체 아티팩트를 소개합니다.


2
요점을 놓쳤습니다. 비디오를 두 개 이상 표시 할 수있는 플레이어가 필요합니다.
Grumpy ol 'Bear

1
@NoCanDo : 적절한 답변을 찾지 못한 경우 비디오 인코딩 결과를 비교할 수있는 대체 옵션 일뿐입니다.
Shevek

-1

이것이 당신이 자주하지 않는 일이라면, vegas와 같은 비디오 편집 소프트웨어를 사용하여 하나의 비디오를 모두 보여줍니다.

그 방법에 대한 유튜브 비디오 예제.


2
그렇게하는 것이 매우 불편한 방법입니다. 지금까지 아무것도 아닌 것보다 낫습니다.
Grumpy ol 'Bear

링크 된 페이지가 변경되면 답변이 유효하지 않을 수 있으므로 참조 링크에서 답변의 필수 부분을 인용하십시오.
DavidPostill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.