Skip to content

About Get File or Folder Properties lie size, image dimensions, audio and video durations etc...

License

Notifications You must be signed in to change notification settings

R35007/FS-Props

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fs-props

FS-Props is a Javascript library that helps to parse image, audio, video or any file and folder and give its stats and properties of the respective file.

  • It uses exifreader node package for image properties and fluent-ffmpeg for audio and video properties.

  • File Name and Extension.

  • File or Folder Size.

  • File Mime Type.

  • Folders Contains.

  • Image Dimensions, Resolution, Bit Depth, Color Type, Sub Sampling, Compression, Filter, Resource URL.

  • File or Folder Workspace, Directory and Location.

  • Audio Title, Album, Artist, Composer, Genre, Bit Rate, Channels, Year, Duration.

  • Video Dimensions, Frame Rate, Bit Rate, Ratio, Duration.

  • Timestamp of created, changed, modified, accessed with relative timestamp.

Usage

JS module:

const fp = require("fs-props");

fp.props("/path/to/file/or/folder").then((properties) => {
  console.log(properties);
});

// using async and await

(async () => {
  const properties = await fp.props("/path/to/file/or/folder");
  console.log(properties);
})();

These are the following useful methods

  • fp.props() - Get all properties like file or folder sizes, timestamps, image or video dimensions, audio or video durations etc...
  • fp.stat(), fp.statSync() - Get only file or folder stats. This will not return image or audio or video properties.
  • fp.deepStat(), fp.deepStatSync() - Get stat list of all the files in a directory and its subdirectories
  • fp.timeStamp(), fp.timeStampSync() - It returns an object with the file's creation, change, modification, and access timestamps.
  • fp.imageProps() - It returns image properties like dimensions, resolution, width, height etc.. If the given file path is a image file.
  • fp.audioProps() - It returns audio properties like artist, album, composer, durations etc.. If the given file path is a audio file.
  • fp.videoProps() - It returns video properties like dimensions, durations, width, height etc.. If the given file path is a video file.
  • fp.ffprobePromise() - It takes a file path as a string, and returns a promise that resolves to the metadata of the audio or video file
  • fp.convertBytes() - It takes a number of bytes and returns a string with the number of bytes in a human readable format.
  • fp.humanizeDuration() - It takes a duration in milliseconds and returns a human readable string.

CLI:

fs-props [path] [path/to/save/properties]

fs-props "/path/to/file/or/folder" "/path/to/save/properties.json"

Sample Folder Properties

{
  "fileName": "FS Props",
  "baseName": "FS Props",
  "directory": "C:/Users/MYCOU/Work_Space/GitRepos",
  "location": "C:/Users/MYCOU/Work_Space/GitRepos/FS Props",
  "size": 177462033, // accumulation of all the nested file sizes from the given folder
  "sizePretty": "169.24 MB (177462033 bytes)",
  "type": "Folder",
  "isFile": false,
  "isDirectory": true,
  "containedFiles": 5622,
  "containedFolders": 623,
  "containsPretty": "5622 Files, 623 Folders",
  "contains": { "files": 5622, "folders": 623 },
  /* ... timestamp properties */
  "stats": { /* ... fs stats */ }
}

Sample File Properties

{
  "fileName": "package.json",
  "baseName": "package",
  "extension": ".json",
  "directory": "C:/Users/MYCOU/Work_Space/GitRepos/FS Props",
  "location": "C:/Users/MYCOU/Work_Space/GitRepos/FS Props/package.json",
  "size": 1350,
  "sizePretty": "1.32 KB (1350 bytes)",
  "type": "File",
  "mimeType": "application/json",
  "isFile": true,
  "isDirectory": false,
  "timestamps": {
    /* ... */
  },
  "stats": {
    /* ... */
  }
}

Timestamps

This timestamp object will be there for any file or folder

{
  /* ... File or Folder properties */
  "created": "2022-11-18T05:19:45.711Z",
  "changed": "2022-11-18T16:15:52.365Z",
  "modified": "2022-11-18T16:15:52.365Z",
  "accessed": "2022-11-18T17:10:42.824Z",
  "createdMs": 1668748785710.9785,
  "changedMs": 1668788152365.1013,
  "modifiedMs": 1668788152365.1013,
  "accessedMs": 1668791442823.701,
  "createdLocal": "18/11/2022, 10:49:45 am",
  "changedLocal": "18/11/2022, 9:45:52 pm",
  "modifiedLocal": "18/11/2022, 9:45:52 pm",
  "accessedLocal": "18/11/2022, 10:40:42 pm",
  "createdRelative": "12 hours ago",
  "changedRelative": "an hour ago",
  "modifiedRelative": "an hour ago",
  "accessedRelative": "a few seconds ago"
}

FS Stats

This is node stats that returned using fs.stat() method.

{
  /* ... File or Folder properties */
  /* ... timestamp properties */
  "stats": {
    "dev": 3569872940,
    "mode": 33206,
    "nlink": 1,
    "uid": 0,
    "gid": 0,
    "rdev": 0,
    "blksize": 4096,
    "ino": 6192449487773464,
    "size": 1350,
    "blocks": 8,
    "atimeMs": 1668791442823.701,
    "mtimeMs": 1668788152365.1013,
    "ctimeMs": 1668788152365.1013,
    "birthtimeMs": 1668748785710.9785,
    "atime": "2022-11-18T17:10:42.824Z",
    "mtime": "2022-11-18T16:15:52.365Z",
    "ctime": "2022-11-18T16:15:52.365Z",
    "birthtime": "2022-11-18T05:19:45.711Z"
  }
}

Image Properties

  • isImage is set to true if the given file is a image.
  • These are the following image properties that comes only if the given file is a image file.
  • These properties are driven using exifreader node package.
  • Some properties can be undefined depending upon the image.
{
  /* ... File or Folder properties */
  /* ... timestamp properties */
  /* ... Fs Stats properties */
  "isImage": true,
  "dimensions": "3840 x 2160 pixels",
  "width": 3840,
  "height": 2160,
  "resolution": "72 x 72 Dpi",
  "xResolution": 72,
  "yResolution": 72,
  "orientation": "top-left",
  "bitDepth": "8",
  "colorType": "RGB ",
  "subSampling": "YCbCr4:4:4 (1 1)",
  "compression": 1,
  "resourceURL": "https://stsci-opo.org/STScI-01FMN25HSDCX1M8BZTK69ZE1JP.jpg",
  "metadata": {
    /* ... from exif library. */
  }
}

Note: The metadata is the full object from exifreader node package. For sample object please click here.

  • The metadata may be undefined if the given image file is not recognizable by the exifreader.
  • For example: exifreader cant able to read Icon files, so the metadata can be undefined but still we can see the dimensions, width and height of the image.

Audio Properties

  • isAudio is set to true if the given file is a audio file.
  • These are the following audio properties that comes only if the given file is a audio file
  • These properties are driven using fluent-ffmpeg node package.
  • Some properties can be undefined depending upon the audio.
{
  /* ... File or Folder properties */
  /* ... timestamp properties */
  /* ... Fs Stats properties */
  "isAudio": true,
  "title": "Yolo You Only Live Once - TamilTunes.com",
  "album": "Anegan (2014)",
  "artist": "Shail Hada,Ramya NSK,Richard,MC Vickey,Eden",
  "composer": "Harris Jayaraj",
  "year": "2014",
  "duration": 278.987755,
  "durationPretty": "4 minutes, 38.98 seconds",
  "bitRate": 299170,
  "bitRatePretty": "292.16 kbps",
  "channels": "2 (stereo)",
  "metadata": {
    /* ... from fluent-ffmpeg library. */
  }
}

Note: The metadata is the full object from fluent-ffmpeg node package. For sample object please click here.

  • The metadata may be undefined if the given audio file is not recognizable by the fluent-ffmpeg.

Video Properties

  • isVideo is set to true if the given file is a video file.
  • These are the following video properties that comes only if the given file is a video file
  • These properties are driven using fluent-ffmpeg node package.
  • Some properties can be undefined depending upon the video.
{
  /* ... File or Folder properties */
  /* ... timestamp properties */
  /* ... Fs Stats properties */
  "isVideo": true,
  "dimensions": "1280 x 720 pixels",
  "width": 1280,
  "height": 720,
  "resolution": "1280 x 720 pixels",
  "duration": 6774.562,
  "durationPretty": "1 hour, 52 minutes, 54.56 seconds",
  "bitRate": 95316,
  "bitRatePretty": "93.08 kbps",
  "frameRate": 29.97,
  "frameRatePretty": "29.97 fps",
  "framesPerSecond": "29.97 fps",
  "ratio": "16:9",
  "metadata": {
    /* ... from fluent-ffmpeg library. */
  }
}

Note: The metadata is the full object from fluent-ffmpeg node package. For sample object please click here.

  • The metadata may be undefined if the given video file is not recognizable by the fluent-ffmpeg.

Author

Sivaraman - sendmsg2siva.siva@gmail.com

License

MIT

About

About Get File or Folder Properties lie size, image dimensions, audio and video durations etc...

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published