Как воспроизвести несколько видео синхронно?

37

У меня 3 видео, у всех 3 одинаковое время, одинаковое количество кадров, и они отличаются только качеством кодирования.

Теперь мне нужно, чтобы они работали бок о бок синхронно для оценки. Значение, когда я нажимаю «играть» ОБА! видео должно начаться. Аналогично для остановки, вперед, назад.

Кто-нибудь знает любого игрока, способного сделать это? Под этим я подразумеваю воспроизведение более 1 видео бок о бок ...

Платформа: Win7

Сварливый медведь
источник
8
Инвестируйте в весы пальцев и приучите себя нажимать очень быстро.
ta.speot.is
Вы упускаете суть: мне нужен плеер, способный отображать более 1 видео.
сварливый медведь
4
Я думаю, что, возможно, он шутил ...
Джо Тейлор
Вы можете запланировать задачу, чтобы открыть их все сразу.
Угур Гюмюшан
1
«У меня есть 3 видео» -> «когда я нажимаю» играть «ОБА! Видео должно начаться» -> Я думаю, вы имеете в виду, что все 3 должны начаться?
Jiggunjer

Ответы:

10

VLC на Windows (1.1.10 или более поздняя версия):

  • Инструменты → Настройки
  • Показать настройки → Все
  • Нажмите « Дополнительно» (нажмите « Плейлист» для VLC 2.1.5).
  • Снимите флажок «Разрешить только один запущенный экземпляр»
  • Снимите флажок «Один экземпляр при запуске из файла»

VLC на OS X не предоставляет тот же набор параметров. Однако вы можете запустить несколько экземпляров из терминала с помощью open -a VLC.

Киран
источник
Это open -n -a vlcдля Mac.
Пол Томблин
10
Это не отвечает на вопрос (Windows 7, а не OS X). Возможно, он мог бы запустить 3 видео с помощью пакетного файла, но не было бы возможности приостановить их все и т. Д.
jiggunjer
30

Если кто-то все еще заинтересован в этом, текущая версия VLC может сделать это очень хорошо без каких-либо сценариев или дополнений. Насколько я знаю, однако, вы можете воспроизводить только два файла синхронно, а не 3.

  1. Для этого просто откройте VLC и выберите « Мультимедиа»> «Открыть несколько файлов» .
  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
Рори,
2
Не работал для версии 3.0.5, но он работал для версии 2.2.4.
Badjr
2
В версии 3.0.7 это работает следующим образом: после нажатия кнопки «Воспроизвести» начинается воспроизведение основного видео, щелкните правой кнопкой мыши «Видео» -> «Видеодорожка» -> «Дорожка 2.». Откроется отдельное окно со вторым видео. Они оба контролируются элементами управления в исходном окне.
Терри Браун
17

Bino - кроссплатформенный медиаплеер, обычно рекомендуемый для воспроизведения стереоскопических файлов. Среди других функций, он поддерживает синхронизированное воспроизведение нескольких потоков.

Поначалу интерфейс может показаться немного примитивным или запутанным, но все, что вам нужно сделать, это

  1. Перетащите два видеофайла в Bino
  2. Выберите «Отдельные потоки, слева первый» вариант ввода и «влево / вправо» вариант вывода

Вуаля, у тебя синхронизированное воспроизведение. Это тот тип, в котором для всех потоков используется один набор элементов управления воспроизведением, поэтому вам не придется «инвестировать в вес пальцев и приучить себя очень быстро щелкать», как предлагает @ ta.speot.is.

В качестве бонуса, он поддерживает рендеринг анаглифа 3D.

OV
источник
2
ОП попросил иметь три видео рядом, а не два. Насколько я вижу, Bino поддерживает только два видео. (Кроме того, для меня опция «Отдельные потоки, оставленные первыми» неактивна)
Саймон Форсберг,
2
Файлы должны быть одинакового размера и кода, иначе опция будет выделена серым цветом.
Эш
4

Сделав то, что сказал Киран, откройте все свои видео и запустите следующий скрипт 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%
    }
}
user52874
источник
Святая корова АХК потрясающая. Как насчет этого ... скажем, у меня есть 14 экземпляров VLC, выполняющих oacross два broswers .... есть сценарий, который может разбить все видео в обоих браузерах (так что, в основном, посмотрите на # видео на экран, разрешение экрана и плиткой их каким-то умным способом)?
18:00
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 для получения дополнительной информации.

llogan
источник
3

Google, вероятно, уже сказал вам, что вы можете купить пару проприетарных программ, которые могут это сделать, но на всякий случай: videocompare, tmpgenc, vidlord ...

Это бесплатно: http://forum.doom9.org/showthread.php?t=138430

(рабочие ссылки для скачивания в конце ветки)

Не проверено, потому что моя винная установка полностью испорчена прямо сейчас. Он не работает бок о бок, но воспроизводится в стеке (если у вас не очень хороший ЖК-дисплей, вы не увидите одно и то же, если все равно сыграете один и тот же видео в двух противоположных углах экрана)

Если вы думаете, что вам действительно нужно рядом, вы можете использовать avisynth, чтобы делать то, что сказал Циммер.

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

(ссылка на forum.doom9.org/showthread.php?t=139769)

Вам не нужно делать кодирование (которое в любом случае добавит свои собственные артефакты кодирования), просто создайте проект, который будет производить кодирование двух видео, играющих вместе, и пропустите файл.

user36755
источник
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 Эта команда описывает только то, как объединить два видео, но я верю (т.е. я не проверял это), вы можете запустить команду несколько раз, чтобы включить несколько видео файлов.

wtong
источник
1

Я представляю, что вы можете использовать скрипт AutoHotKey, чтобы отправить ярлык «Play» всем трем игрокам за очень короткое время.

Способны ли они начать играть в одно и то же время, это другой вопрос. Даже если они смогут начать сразу, я думаю, что будет немного борьбы за жесткий диск. Возможно, вы захотите сделать RAM-диск, если это важная оценка.

ta.speot.is
источник
Вы упускаете суть: мне нужен плеер, способный отображать более 1 видео.
сварливый медведь
Любой медиаплеер, в котором можно открыть более одного экземпляра, например, VLC
ta.speot.is
3
Не совсем таспеотис. Потому что я должен вручную запускать каждое приложение, которое, в свою очередь, переводится как НЕ синхронное.
сварливый медведь
-1

Многие игроки смогут выводить изображение одного кадра в видео.

Вы можете выбрать несколько точек в своих видео, чтобы сравнить различные типы изображений (облака, дым, деревья, трава, движение хороши для кодирования сравнений) и взять одинаковые кадры из каждого видео.

Затем вы можете сравнивать статическое изображение, а не пытаться определить различия в движении. Вы можете сравнить на попиксельной основе, если хотите.

Убедитесь, что вы не используете JPG в качестве выходных данных, поскольку это формат с потерями, и он представит свои собственные артефакты.

Shevek
источник
2
Вы упускаете суть: мне нужен плеер, способный отображать более 1 видео.
сварливый медведь
1
@ NoCanDo: Я понимаю, что это просто альтернативный вариант для вас, чтобы сравнить результаты кодирования видео, если вы не найдете подходящий ответ.
Шевек
-1

Если это не то, что вы делаете очень часто, я бы использовал программное обеспечение для редактирования видео, такое как Вегас, чтобы создать одно видео со всеми их показами.

Youtube видео пример того, как это сделать.

zimmer62
источник
2
Это очень неудобный способ сделать это. До сих пор лучше, чем ничего.
сварливый медведь
Пожалуйста, процитируйте основные части ответа по ссылочной ссылке (ссылкам), так как ответ может стать недействительным, если связанные страницы изменятся.
DavidPostill