Зацикливать видео файлы в папке, чтобы получить длину видео - PullRequest
5 голосов
/ 22 октября 2011

У меня есть следующее, которое возвращает, сколько секунд выбранный видеофайл.

Однако я нашел способ просто дать ему папку с фильмом, а затем просмотреть все подкаталоги и найти все типы видеофайлов.

Как только они появятся, я бы хотел указать длительность видео в формате «1 час 53 секунды», так как «7990 секунд» не слишком помогает.*

Ответы [ 2 ]

9 голосов
/ 22 октября 2011

У вас есть несколько подвопросов, связанных с вашим вопросом.

1) Как мне получить все файлы в папке, включая подпапки 2) как мне отфильтровать этот список, чтобы включить только видео файлы 3) Как я могу просмотреть этот список видеофайлов и извлечь информацию из каждого и 4) Как мне преобразовать секунды в полезную строку слов

Обычно я бы попросил, чтобы вы разбили его на эти отдельные вопросы, потому что для кого-то большая задача написать все это для вас. Однако в этом случае вам повезло, потому что я сделал это раньше себя ... так что вы можете получить мой сценарий. Я поместил много комментариев в коде, чтобы помочь вам узнать, как он работает.

-- I found these extensions for video files here http://www.fileinfo.net/filetypes/video
-- we can check the file extensions of a file against this list to evaluate if it's a video file
set video_ext_list to {"3g2", "3gp", "3gp2", "3gpp", "3mm", "60d", "aep", "ajp", "amv", "asf", "asx", "avb", "avi", "avs", "bik", "bix", "box", "byu", "cvc", "dce", "dif", "dir", "divx", "dv", "dvr-ms", "dxr", "eye", "fcp", "flc", "fli", "flv", "flx", "gl", "grasp", "gvi", "gvp", "ifo", "imovieproject", "ivf", "ivs", "izz", "izzy", "lsf", "lsx", "m1v", "m2v", "m4e", "m4u", "m4v", "mjp", "mkv", "moov", "mov", "movie", "mp4", "mpe", "mpeg", "mpg", "mpv2", "msh", "mswmm", "mvb", "mvc", "nvc", "ogm", "omf", "prproj", "prx", "qt", "qtch", "rm", "rmvb", "rp", "rts", "sbk", "scm", "smil", "smv", "spl", "srt", "ssm", "svi", "swf", "swi", "tivo", "ts", "vdo", "vf", "vfw", "vid", "viewlet", "viv", "vivo", "vob", "vro", "wm", "wmd", "wmv", "wmx", "wvx", "yuv"}

-- get the folder to check
set f to choose folder

-- notice the use of "entire contents" to also go through subfolders of f
-- use a "whose" filter to find only the video files
tell application "Finder"
    set vidFiles to (files of entire contents of f whose name extension is in video_ext_list) as alias list
end tell

-- use a repeat loop to loop over a list of something
set vidList to {} -- this is where we store the information as we loop over the files
repeat with aFile in vidFiles
    -- get some information from aFile
    tell application "System Events"
        set vidFile to movie file (aFile as text)
        set ts to time scale of vidFile
        set dur to duration of vidFile
    end tell

    -- add the information to the "storage" list we made earlier
    set end of vidList to {POSIX path of aFile, secs_to_hms(dur / ts)}
end repeat

return vidList

(*=================== SUBROUTINES ===================*)
-- convert seconds into a string of words
-- the use of "mod" and "div" here makes it easy
-- we also make sure that each value is at least 2 places long to make it look nicer
on secs_to_hms(the_secs)
    set timeString to ""
    set hr to the_secs div hours
    if hr is not 0 then set timeString to timeString & (text -2 thru -1 of ("0" & (hr as text))) & " hours "

    set min to the_secs mod hours div minutes
    if min is not 0 then set timeString to timeString & (text -2 thru -1 of ("0" & (min as text))) & " minutes "

    set sec to the_secs mod minutes div 1
    if sec is not 0 then
        set fraction to text 2 thru 3 of ((100 + the_secs mod 1 * 100) as text)
        set timeString to timeString & (sec as text) & "." & fraction & " seconds"
    end if

    if timeString ends with space then set timeString to text 1 thru -2 of timeString
    return timeString
end secs_to_hms
0 голосов
/ 04 мая 2017

Я наткнулся на этот пост, потому что я хотел иметь журнал видеофайлов в папке; что-то, что я мог бы импортировать в электронную таблицу, а также рассчитать общую продолжительность, но не только.

Размещенный скрипт не работал для меня, поэтому я в итоге импортировал папку в Final Cut Pro, выполнил пакетный экспорт в папку, а затем Файл> Экспорт> Пакетный список, что привело к созданию простого текстового файла, который я мог импортировать в электронная таблица в качестве начала журнала и для расчета общей продолжительности.

Возможно, это помогает другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...