Как получить длительность нескольких видеофайлов в Mac OS X 10.10 (Yosmite)
Папка из 10 видеофайлов, как узнать их общую длительность? Кстати, я пробовал (Command+Control+I), и он не показывает общую продолжительность.
3 ответа
Вы также можете открыть все файлы в VLC. Видео будет воспроизводиться автоматически, но нажмите стоп в левом нижнем углу (квадратный символ), и он покажет вам список воспроизведения. В верхней части плейлиста он будет иметь общую продолжительность. Если вы включите правильные столбцы (щелкните правой кнопкой мыши заголовок столбца и установите соответствующие флажки), он также даст имя, размер файла и продолжительность для отдельных файлов.
Кроме того, VLC - это удивительно полнофункциональный видеопроигрыватель, который поддерживает все форматы, с которыми вы когда-либо сталкивались, а также многие другие. Он также кроссплатформенный (работает как на Linux, так и на Windows).
Использование скрипта Python решило эту проблему.
# -*- coding: utf-8 -*-
"""
pip install --upgrade setuptools
pip install moviepy
usage:
python compute_duration.py --path ~/Movies/ --type .mp4
"""
import os
import datetime
import argparse
from moviepy.editor import VideoFileClip
def main():
parser = argparse.ArgumentParser(
description='Compute Total Time of a Series of Videos')
parser.add_argument("--path", metavar="PATH", default=".",
help="the root path of the videos(default: .)")
parser.add_argument("--type", metavar="TYPE", default=".mkv",
help="the type of the videos(default: .mkv)")
args = parser.parse_args()
filelist = []
for a, b, c in os.walk(args.path):
for name in c:
fname = os.path.join(a, name)
if fname.endswith(args.type):
filelist.append(fname)
ftime = 0.0
for file in sorted(filelist):
clip = VideoFileClip(file)
print("{}: {}".format(file, clip.duration))
ftime += clip.duration
print("%d seconds: " % ftime, str(datetime.timedelta(seconds=ftime)))
if __name__ == "__main__":
main()
Похоже, что лучшим решением было бы установить MPlayer в Mac OS X, а затем запустить скрипт командной строки Bash, такой как показанный здесь:
find . -type f -name "*.avi" -print0 | xargs -0 mplayer -vo dummy -ao dummy -identify 2>/dev/null | perl -nle '/ID_LENGTH=([0-9\.]+)/ && ($t +=$1) && printf "%02d:%02d:%02d\n",$t/3600,$t/60%60,$t%60' | tail -n 1
Как говорит пользователь "syssyphus":
Измените *.avi на то, что вы хотите сопоставить, вы можете полностью удалить его, если хотите проверить все файлы.