获取存储在S3存储桶中的视频的持续时间

时间:2015-10-30 10:01:09

标签: macos bash amazon-web-services amazon-s3

是否有一种简单有效的方法可以获得存储在S3 Bucket中的大约20,000个视频的持续时间?

现在,我尝试使用expandrive在OS X中安装存储桶并使用mediainfo运行bash脚本但是我总是得到一个"参数列表太长"错误。

这是脚本

#! /bin/bash
# get video length of file.
for MP4 in `ls *mp4`
do
    mediainfo $MP4 | grep "^Duration" | head -1 | sed 's/^.*: \([0-9][0-9]*\)mn *\([0-9][0-9]*\)s/00:\1:\2/' >> results.txt
done
# END

3 个答案:

答案 0 :(得分:0)

尝试使用xargs代替for循环。 backtics运行命令并将其输出插入此位置。对于你的shell来说,20K文件可能太多了。

ls *.mp4 | xargs mediainfo | grep "^Duration" | head -1 | sed 's/^.*: \([0-9][0-9]*\)mn *\([0-9][0-9]*\)s/00:\1:\2/' >> results.txt

答案 1 :(得分:0)

如果安装S3存储桶并对视频文件运行mediainfo以检索视频元数据(包括持续时间标题),则会导致从S3完全下载视频,那么这可能是一种不好的方法。特别是如果你要一次又一次地这样做。

对于上传到S3的新文件,我会预先计算持续时间(使用mediainfo或其他)并将计算的持续时间上传为S3对象元数据。

或者您可以使用在上传视频时执行的Lambda函数,让它读取视频文件的相关部分,提取持续时间标题,并将其存储回S3对象元数据中。对于现有文件,您可以以编程方式针对现有S3对象调用Lambda函数。或者您可以从头开始再次执行上传过程,触发Lambda。

答案 2 :(得分:0)

ffprobe可以阅读各种来源的视频。 HTTP也受支持 - 这可以帮助您,因为它减轻了将所有文件传输到您的计算机的负担。

ffprobe -i http://org.mp4parser.s3.amazonaws.com/examples/Cosmos%20Laundromat%20faststart.mp4

即使您的S3存储桶不公开,您也可以轻松生成签名URL,如果担心安全性,则允许对对象进行限时访问。 使用Bucket GET获取存储桶中的所有文件,然后通过对所有文件进行适当的过滤来执行ffprobe。

这回答了你的问题,但Rambo Ramone的答案很好地解释了你遇到的问题。