媒体文件列表及其持续时间

suu*_*ser 2 video terminal media time ffmpeg

我想从与以下模式匹配的所有文件夹中获取 mp4 文件列表及其相应的持续时间

例如:LO1/LO1.MP4,LO3/LO3.MP4

我尝试了以下操作,但我得到了多个条目,而且我无法弄清楚文件名:

$ mediainfo /var/www/videos/L*/L*.mp4 | 持续时间
持续时间:2500万54秒
持续时间:2500万54秒
Material_Duration : 1554665
持续时间:2500万54秒
Material_Duration : 1554688
时长:3700万21秒
时长:3700万21秒
Material_Duration : 2241664
时长:3700万21秒
Material_Duration : 2241696
持续时间 : 2600 万 6 秒
持续时间 : 2600 万 6 秒
持续时间 : 2600 万 6 秒
时长:3000万41秒
时长:3000万41秒
时长:3000万41秒
时长:3900万41秒
时长:3900万41秒
时长:3900万41秒
Duration_LastFrame:-7ms
持续时间 : 3700 万 2 秒
持续时间 : 3700 万 2 秒
持续时间 : 3700 万 2 秒
Duration_LastFrame:-12ms
持续时间 : 3400 万 24 秒
持续时间 : 3400 万 24 秒
持续时间 : 3400 万 24 秒
持续时间 : 3100 万 7 秒
持续时间 : 3100 万 7 秒
持续时间 : 3100 万 7 秒
时长:3100万57秒
时长:3100万57秒
时长:3100万57秒
持续时间 : 2900 万 30 秒
持续时间 : 2900 万 30 秒
持续时间 : 2900 万 30 秒
持续时间 : 3600 万 28 秒
持续时间 : 3600 万 28 秒
持续时间 : 3600 万 27 秒
Material_Duration : 2187988

那么如何获得文件名(.mp4)列表及其相应的持续时间?

小智 5

我不知道 mediainfo 的输出,但这就是我使用 ffrobe(或 ffmpeg -i)的方式,这将获得持续时间

ffprobe $fn 2>&1|grep Duration|sed -e 's/^[ \t]*//'|cut -d" " -f2|cut -d. -f1
Run Code Online (Sandbox Code Playgroud)

使用 find 将为您获取文件名

find /var/www/videos/L* -type f -name L\*.mp4
Run Code Online (Sandbox Code Playgroud)

所以你可以在一个小的 for 循环中把所有的东西放在一起来得到你的列表

for fn in `find /var/www/videos/L* -type f -name L\*.mp4`;
do
    dur=`ffprobe $fn 2>&1|grep Duration|sed -e 's/^[ \t]*//'|cut -d" " -f2|cut -d. -f1`
    echo "$fn $dur"
done
Run Code Online (Sandbox Code Playgroud)