Applescript 循环文件夹中的视频文件以获取视频长度

Applescript 循环文件夹中的视频文件以获取视频长度,applescript,Applescript,我有以下返回一个选定的视频文件的秒数 然而,我在寻找一种方法,给它一个电影文件夹,然后让它在所有子目录中循环,找到所有的视频文件类型 一旦有了这些,我想以“1小时53秒”的格式列出视频长度,因为“7990秒”没有太大帮助 谢谢 set macPath to (choose file) as text tell application "System Events" set ts to time scale of movie file macPath set dur to dura

我有以下返回一个选定的视频文件的秒数

然而,我在寻找一种方法,给它一个电影文件夹,然后让它在所有子目录中循环,找到所有的视频文件类型

一旦有了这些,我想以“1小时53秒”的格式列出视频长度,因为“7990秒”没有太大帮助

谢谢

set macPath to (choose file) as text
tell application "System Events"
    set ts to time scale of movie file macPath
    set dur to duration of movie file macPath
    set movieTime to dur / ts
end tell

你的问题中有几个子问题

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

我看到这篇文章是因为我想把视频文件的日志放在一个文件夹里;我可以导入到电子表格中,也可以计算总持续时间,但不仅仅是

发布的脚本对我不起作用,因此我最终在Final Cut Pro中导入了文件夹,对文件夹进行了批导出,而不是文件>导出>批列表,这导致了一个纯文本文件,我可以导入到电子表格中作为日志的开始,并计算总持续时间


也许这对其他人有帮助

他们不是在学校教你使用标点符号吗?无论如何,将秒转换为小时的数学是(秒/60)/60。实施起来应该不会太难。