2015-04-18 6 views
1

У меня есть список медиафайлов (файлы DVD VOB), и я хочу посмотреть только часть видео из списка файлов.Создание списка воспроизведения для воспроизведения выбранной части медиафайлов в vlc

#! /bin/bash 
export SOURCE_DIR=/path/to/dvds/dir 
export DVD1=$SOURCE_DIR/dvd1/VIDEO_TS 
export DVD2=$SOURCE_DIR/dvd2/VIDEO_TS 
export DVD3=$SOURCE_DIR/dvd3/VIDEO_TS 
export DVD4=$SOURCE_DIR/dvd4/VIDEO_TS 
export FILE1=VTS_01_1.VOB 
export FILE2=VTS_01_2.VOB 
export FILE3=VTS_01_3.VOB 
export FILE4=VTS_01_4.VOB 

vlc --play-and-exit --start-time=348 --stop-time=355 $DVD1/$FILE1 
vlc --play-and-exit --start-time=574 --stop-time=594 $DVD1/$FILE2 
#... and so on ... 

я придумал выше скрипт, который запускает VLC экземпляр и играет каждый файл из указанного start-time и stop-time. Это отлично работает, но вызывает новый экземпляр vlc в каждом операторе vlc --play-and-exit, и в результате между файлами происходит видимое прерывание.

Есть ли способ интегрировать правило плейлиста в vlc, чтобы один экземпляр мог воспроизводить все видео в файле сценария?

Можно предположить, что я знаю start-time и stop-time значения для каждого файла

+0

Почему там нет Баш тега но есть тег Lua? – ryanpattison

+1

Поскольку vlc позволяет писать сценарии воспроизведения в lua, см. [This] (https://wiki.videolan.org/Documentation:Building_Lua_Playlist_Scripts). Я смог построить рабочее решение, скоро опубликует – vsnyc

ответ

1

я был в состоянии сделать эту работу, следуя инструкции here. VLC поддерживает lua-скриптинг. Ниже приведен сценарий, который я придумал, он принимает файл, заканчивающийся расширением .fixedseek. Файл плейлиста представляет собой файл csv с тремя столбцами, содержащими file_path_url, start_time, stop_time , например.

file:///path/to/dvds/dvd1/VIDEO_TS/VTS_01_3.VOB,348,355 
file:///path/to/dvds/dvd2/VIDEO_TS/VTS_01_3.VOB,548,855 
... and so on ... 

Скрипт анализирует файл и воспроизводит каждую строку из start_time в stop_time

-- fixedseek.lua 
-- A compiled version of this file (.luac) should be put into the proper VLC playlist parsers directory. 
-- In my ubuntu 14.04 vlc installation, it was: /usr/lib/vlc/lua/playlist/ 
-- For details, refer to: 
-- http://wiki.videolan.org/Documentation:Play_HowTo/Building_Lua_Playlist_Scripts 
-- 
-- The play list file format consists of three comma separated parts: 
-- (file_path_url, start_time, stop_time) 
-- e.g. 
-- file:///path/to/dvds/dvd1/VIDEO_TS/VTS_01_3.VOB,348,355 

-- The script below opens the file, seeks to start_time and plays until stop_time 
-- and then moves on to next file in the playlist 

function probe() 
    -- tell VLC we will handle anything ending in ".fixedseek" 
    return string.match(vlc.path, "%.fixedseek$") 
end 

function parse() 
    -- VLC expects us to return a list of items, each item itself a list 
    -- of properties 
    playlist = {} 

    while true do 
     playlist_item = {} 

     line = vlc.readline() 

     if line == nil then 
      break 
    else vlc.msg.info(" Read line: '"..line.."'") 
     end 

-- parse playlist line into three tokens splitting on comma 
values = {} 
i=0 
for word in string.gmatch(line, '([^,]+)') do 
    values[i]=word 
    i=i+1 
end 

vlc.msg.info(values[0]) 
vlc.msg.info(values[1]) 
vlc.msg.info(values[2]) 

     playlist_item.path = values[0] 
     start_time = values[1] 
     stop_time = values[2] 

    vlc.msg.info(" Start is '"..tostring(start_time).."'") 
    vlc.msg.info(" Stop is '"..tostring(stop_time).."'") 

     -- a playlist item has another list inside of it of options 
     playlist_item.options = {} 
     table.insert(playlist_item.options, "start-time="..tostring(start_time)) 
     table.insert(playlist_item.options, "stop-time="..tostring(stop_time)) 
     table.insert(playlist_item.options, "fullscreen") 

     -- add the item to the playlist 
     table.insert(playlist, playlist_item) 
    end 

    return playlist 
end 
+1

Спасибо! Я тестировал в консоли lua, что '% .fixedseek $' то, что мне нужно – vsnyc

+1

Я пытаюсь сделать что-то подобное, только для каждого элемента плейлиста я хочу контролировать, должен ли трек «повторять», «играть-и- остановить "и т. д. Возможно ли это? Мой вопрос здесь: stackoverflow.com/questions/39333563/ – isedwards

+0

Если я установил «start-time> 0» (например, «start-time = 10'), то решение выше отлично работает **, если предыдущий трек достигнет конца **. Однако, если я заканчиваю предыдущий трек раньше, нажав 'n', чтобы перейти к следующему треку, VLC отображает первый кадр видео на мгновение, прежде чем перейти к моему началу. Есть ли способ предотвратить это? (Протестировано в VLC 2.2.4 и 2.2.6). –

Смежные вопросы