3

我有一个播放随机视频和图像文件的系统,我想用它们设置一些淡入淡出的过渡。现在,我希望时机恰到好处,所以我认为最好的开始方法是确定我将要播放的视频的持续时间。我在使用 JavaScript 确定文件持续时间时遇到了一些问题,所以我将其搁置一会,并认为我可以通过 ColdFusion 来做到这一点。

我试过让最好的朋友谷歌找到答案,但无济于事。所以这里的任何人都知道如何确定刚刚使用 ColdFusion 上传的视频文件的持续时间?

谢谢。

更新:

我设法找到了一些东西:

<!--- Set CrLf definition --->
<cfset CrLf = Chr(13)&Chr(10) />
<!--- Use FF Probe to extract stream information, Stream 1 contains duration, width and height info about the file --->
<cfexecute name="c:\inetpub\wwwroot\ffprobe.exe" arguments="#testFile# -show_streams" timeout="60" variable="info" errorVariable="errorOut" />
<!--- Concentrates on extracting information from the very first stream in the returned variable --->
<cfset StreamStart = Find("[STREAM]", info) />
<cfset StreamEnd = Find("[/STREAM]", info) />
<cfset Stream = Mid(info, StreamStart+9, StreamEnd - StreamStart - 12)&CrLf />
<!--- ^^ Parses out first stream --->
<!--- vv Extracts the duration, don't really mind the long decimal bit at the end! --->
<cfset adRefreshTime = Mid(Stream, Find("duration=",Stream)+9, Find(CrLf, Stream, Find("duration=",Stream)+9)-(Find("duration=",Stream)+9)) />

抽出的流在持续时间中包含十进制秒数,而不是 HH:MM:SS.mmm,所以我只是将其解析出来......即时持续时间......你怎么看?

4

2 回答 2

4

我自己的(免费/开源)VideoConverter.cfc 通常可以做到这一点。

https://github.com/sebtools/Video-Converter

 <cfset sInfo = VideoConverter.getVideoInfo(path)>

在该方法返回的结构中查找“持续时间”键。如果存在,那么 VideoConverter.cfc 能够计算出视频的持续时间。

在内部,它使用 ffmpeg.exe 来获取该信息。

于 2013-02-18T16:40:25.070 回答
2

对于 mp3,您可以使用它。如果您传递视频文件,则可以处理视频

<cfset mp3File = createObject("java", "coldfusion.util.MP3File").init("C:\music.mp3")>
<cfoutput>mp3File.getDuration() : #mp3File.getDuration()# Sec</cfoutput><br>

编辑:尝试使用 wmv 文件,它给了我 4076 秒的 11 分 6 秒视频。用 mp3 试过,它说 3:24 秒的 mp3 需要 207 秒。我正在使用 CF9.01

于 2013-02-18T01:08:46.140 回答