是否有一种简单有效的方法可以获得存储在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
答案 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的答案很好地解释了你遇到的问题。