Как получить длительность нескольких видеофайлов в 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 на то, что вы хотите сопоставить, вы можете полностью удалить его, если хотите проверить все файлы.

Другие вопросы по тегам