1.0.2 • Published 2 years ago

mediareader v1.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

MediaReader

Media file metadata reader.

Required Dependencies

  • FFprobe

How to build

npm install
npm run build

API

  • Media

    • Media.ReadFromFileSync(file)

      Read metadata from file synchronized

      Sample:

      // Read media metadata synchronized
      const { Media } = require('dist/index.js');
      const file = ''; // file path
      const media = Media.ReadFromFileSync(file);
      console.log(media);
      /**
       Console Output:
      Media {
          video: VideoStream {
              index: Property { value: 0 },
              start_pts: Property { value: 0 },
              start_time: Property { value: 0 },
              duration_ts: Property { value: 5165160 },
              duration: Property { value: 86.086 },
              bit_rate: Property { value: 71382367 },
              nb_frames: Property { value: 5160 },
              codec_name: Property { value: 'hevc' },
              codec_long_name: Property { value: 'H.265 / HEVC (High Efficiency Video Coding)' },
              profile: Property { value: 'Main 10' },
              codec_tag_string: Property { value: 'hvc1' },
              codec_tag: Property { value: '0x31637668' },
              r_frame_rate: Property { value: [Ratio] },
              avg_frame_rate: Property { value: [Ratio] },
              time_base: Property { value: [Ratio] },
              disposition: Property { value: [Object] },
              tags: Property { value: [Object] },
              width: Property { value: 3840 },
              height: Property { value: 2160 },
              coded_width: Property { value: 3840 },
              coded_height: Property { value: 2160 },
              has_b_frames: Property { value: 1 },
              level: Property { value: 153 },
              refs: Property { value: 1 },
              closed_captions: Property { value: '0' },
              pix_fmt: Property { value: 'yuv420p10le' },
              color_range: Property { value: 'tv' },
              color_space: Property { value: 'bt2020nc' },
              color_transfer: Property { value: 'smpte2084' },
              color_primaries: Property { value: 'bt2020' },
              chroma_location: Property { value: 'topleft' },
              sample_aspect_ratio: Property { value: [Ratio] },
              display_aspect_ratio: Property { value: [Ratio] }
          },
          audio: AudioStream {
              index: Property { value: 1 },
              start_pts: Property { value: 0 },
              start_time: Property { value: 0 },
              duration_ts: Property { value: 4132864 },
              duration: Property { value: 86.101333 },
              bit_rate: Property { value: 192000 },
              nb_frames: Property { value: 4037 },
              codec_name: Property { value: 'aac' },
              codec_long_name: Property { value: 'AAC (Advanced Audio Coding)' },
              profile: Property { value: 'LC' },
              codec_tag_string: Property { value: 'mp4a' },
              codec_tag: Property { value: '0x6134706d' },
              r_frame_rate: Property { value: [Ratio] },
              avg_frame_rate: Property { value: [Ratio] },
              time_base: Property { value: [Ratio] },
              disposition: Property { value: [Object] },
              tags: Property { value: [Object] },
              sample_fmt: Property { value: 'fltp' },
              sample_rate: Property { value: 48000 },
              channels: Property { value: 2 },
              bits_per_sample: Property { value: 0 },
              channel_layout: Property { value: 'stereo' }
          },
          format: MediaFormat {
              filename: Property { value: 'E:\\视频文件\\HDR视频文件\\Swordsmith.mp4' },
              format_name: Property { value: 'mov,mp4,m4a,3gp,3g2,mj2' },
              format_long_name: Property { value: 'QuickTime / MOV' },
              nb_streams: Property { value: 2 },
              nb_programs: Property { value: 0 },
              start_time: Property { value: 0 },
              duration: Property { value: 86.101333 },
              size: Property { value: 770255991 },
              bit_rate: Property { value: 71567392 },
              probe_score: Property { value: 100 },
              tags: Property { value: [Object] }
          }
          }
      */
    • Media.ReadFromFile(file)

      Read metadata from file asynchronized

      Sample:

      // Read media metadata asynchronized
      const { Media } = require('dist/index.js');
      const file = ''; // file path
      Media.ReadFromFile(file)
          .then(media => {
              console.log(media);
          });
      /**
       Console Output:
      Media {
          video: VideoStream {
              index: Property { value: 0 },
              start_pts: Property { value: 0 },
              start_time: Property { value: 0 },
              duration_ts: Property { value: 5165160 },
              duration: Property { value: 86.086 },
              bit_rate: Property { value: 71382367 },
              nb_frames: Property { value: 5160 },
              codec_name: Property { value: 'hevc' },
              codec_long_name: Property { value: 'H.265 / HEVC (High Efficiency Video Coding)' },
              profile: Property { value: 'Main 10' },
              codec_tag_string: Property { value: 'hvc1' },
              codec_tag: Property { value: '0x31637668' },
              r_frame_rate: Property { value: [Ratio] },
              avg_frame_rate: Property { value: [Ratio] },
              time_base: Property { value: [Ratio] },
              disposition: Property { value: [Object] },
              tags: Property { value: [Object] },
              width: Property { value: 3840 },
              height: Property { value: 2160 },
              coded_width: Property { value: 3840 },
              coded_height: Property { value: 2160 },
              has_b_frames: Property { value: 1 },
              level: Property { value: 153 },
              refs: Property { value: 1 },
              closed_captions: Property { value: '0' },
              pix_fmt: Property { value: 'yuv420p10le' },
              color_range: Property { value: 'tv' },
              color_space: Property { value: 'bt2020nc' },
              color_transfer: Property { value: 'smpte2084' },
              color_primaries: Property { value: 'bt2020' },
              chroma_location: Property { value: 'topleft' },
              sample_aspect_ratio: Property { value: [Ratio] },
              display_aspect_ratio: Property { value: [Ratio] }
          },
          audio: AudioStream {
              index: Property { value: 1 },
              start_pts: Property { value: 0 },
              start_time: Property { value: 0 },
              duration_ts: Property { value: 4132864 },
              duration: Property { value: 86.101333 },
              bit_rate: Property { value: 192000 },
              nb_frames: Property { value: 4037 },
              codec_name: Property { value: 'aac' },
              codec_long_name: Property { value: 'AAC (Advanced Audio Coding)' },
              profile: Property { value: 'LC' },
              codec_tag_string: Property { value: 'mp4a' },
              codec_tag: Property { value: '0x6134706d' },
              r_frame_rate: Property { value: [Ratio] },
              avg_frame_rate: Property { value: [Ratio] },
              time_base: Property { value: [Ratio] },
              disposition: Property { value: [Object] },
              tags: Property { value: [Object] },
              sample_fmt: Property { value: 'fltp' },
              sample_rate: Property { value: 48000 },
              channels: Property { value: 2 },
              bits_per_sample: Property { value: 0 },
              channel_layout: Property { value: 'stereo' }
          },
          format: MediaFormat {
              filename: Property { value: 'E:\\视频文件\\HDR视频文件\\Swordsmith.mp4' },
              format_name: Property { value: 'mov,mp4,m4a,3gp,3g2,mj2' },
              format_long_name: Property { value: 'QuickTime / MOV' },
              nb_streams: Property { value: 2 },
              nb_programs: Property { value: 0 },
              start_time: Property { value: 0 },
              duration: Property { value: 86.101333 },
              size: Property { value: 770255991 },
              bit_rate: Property { value: 71567392 },
              probe_score: Property { value: 100 },
              tags: Property { value: [Object] }
          }
          }
      */
    • toObject()

      Transform read metadata to a simple object.

      Sample:

      const { Media } = require('dist/index.js');
      const file = ''; // file path
      const media = Media.ReadFromFileSync(file);
      console.log(media.toObject());
      /**
       * 
      {
          video: {
              index: 0,
              start_pts: 0,
              start_time: 0,
              duration_ts: 5165160,
              duration: 86.086,
              bit_rate: 71382367,
              nb_frames: 5160,
              codec_name: 'hevc',
              codec_long_name: 'H.265 / HEVC (High Efficiency Video Coding)',
              profile: 'Main 10',
              codec_tag_string: 'hvc1',
              codec_tag: '0x31637668',
              r_frame_rate: '60000/1001',
              avg_frame_rate: '60000/1001',
              time_base: '1/60000',
              disposition: {
                  default: 1,
                  dub: 0,
                  original: 0,
                  comment: 0,
                  lyrics: 0,
                  karaoke: 0,
                  forced: 0,
                  hearing_impaired: 0,
                  visual_impaired: 0,
                  clean_effects: 0,
                  attached_pic: 0,
                  timed_thumbnails: 0,
                  captions: 0,
                  descriptions: 0,
                  metadata: 0,
                  dependent: 0,
                  still_image: 0
              },
              tags: {
                  creation_time: '2016-10-24T06:29:51.000000Z',
                  language: 'und',
                  handler_name: 'Video Media Handler',
                  vendor_id: '[0][0][0][0]',
                  encoder: 'HEVC Coding'
              },
              width: 3840,
              height: 2160,
              coded_width: 3840,
              coded_height: 2160,
              has_b_frames: 1,
              level: 153,
              refs: 1,
              closed_captions: '0',
              pix_fmt: 'yuv420p10le',
              color_range: 'tv',
              color_space: 'bt2020nc',
              color_transfer: 'smpte2084',
              color_primaries: 'bt2020',
              chroma_location: 'topleft',
              sample_aspect_ratio: '1/1',
              display_aspect_ratio: '16/9'
          },
          audio: {
              index: 1,
              start_pts: 0,
              start_time: 0,
              duration_ts: 4132864,
              duration: 86.101333,
              bit_rate: 192000,
              nb_frames: 4037,
              codec_name: 'aac',
              codec_long_name: 'AAC (Advanced Audio Coding)',
              profile: 'LC',
              codec_tag_string: 'mp4a',
              codec_tag: '0x6134706d',
              r_frame_rate: '0/0',
              avg_frame_rate: '0/0',
              time_base: '1/48000',
              disposition: {
                  default: 1,
                  dub: 0,
                  original: 0,
                  comment: 0,
                  lyrics: 0,
                  karaoke: 0,
                  forced: 0,
                  hearing_impaired: 0,
                  visual_impaired: 0,
                  clean_effects: 0,
                  attached_pic: 0,
                  timed_thumbnails: 0,
                  captions: 0,
                  descriptions: 0,
                  metadata: 0,
                  dependent: 0,
                  still_image: 0
              },
              tags: {
                  creation_time: '2016-10-24T06:29:51.000000Z',
                  language: 'eng',
                  handler_name: 'Sound Media Handler',
                  vendor_id: '[0][0][0][0]'
              },
              sample_fmt: 'fltp',
              sample_rate: 48000,
              channels: 2,
              bits_per_sample: 0,
              channel_layout: 'stereo'
          },
          format: {
              filename: 'E:\\视频文件\\HDR视频文件\\Swordsmith.mp4',
              format_name: 'mov,mp4,m4a,3gp,3g2,mj2',
              format_long_name: 'QuickTime / MOV',
              nb_streams: 2,
              nb_programs: 0,
              start_time: 0,
              duration: 86.101333,
              size: 770255991,
              bit_rate: 71567392,
              probe_score: 100,
              tags: {
                  major_brand: 'isom',
                  minor_version: '1',
                  compatible_brands: 'isom',
                  creation_time: '2016-10-24T05:33:14.000000Z'
              }
          }
      }
       */
  • FFprobe

    • constructor()

      FFprobe constructor

      Arguments:

      • bin

        ffprobe executable file path, default: "ffprobe" need to set PATH system enviroment

    • i(file)

      FFprobe cmd option: -i

      Arguments:

      • file

        Input file path

    • show_streams(show)

      FFprobe cmd option: -show_streams

      Arguments:

      • show

        Type:Boolean; True: do read stream metadata; False: do not read stream metadata; Default: true

    • show_format(show)

      FFprobe cmd option: -show_format

      Arguments:

      • show

        Type:Boolean; True: do read format metadata; False: do not read format metadata; Default: true

    • execute()

      Asynchronized execute ffprobe in cmd

      Return:

      Type: Promise\<JSON>

    • executeSync()

      Synchronized execute ffprobe in cmd

      Return:

      Type: JSON

    • show_entries(entries)

      FFprobe cmd option: -show_entries

      Arguments:

      • entries

        Type: string

    • select_streams(select)

      FFprobe cmd option: -select_streams

      Arguments:

      • select

        Type: string; support value is one of: "a", "v", "d", "s"

  • Ratio

    Type for a ratio value, such as video avg frame rate

    • constructor(a,b)

      Ratio constructor

      Arguments:

      • a

        Dividend value

      • b

        Divisor value

    • Ratio.ParseFromString(string_ratio, separator)

      Transform a string format ration to Ratio instance

      Arguments:

      • string_ratio

        String ratio

      • separator

        Separator in ratio string, optional argument, default: "/" and ":"

        Return:

        If parse successfull return the Ratio instance, otherwise return null

        Sample:

        const str = '30000/1001';
        const ratio = Ratio.ParseFromString(str);
        console.log(ratio) // Ratio { a: 30000, b: 1001 }
    • toNumber(fixed)

      Transform a Ratio instance to a float number

      Arguments:

      • fixed

        Result to fixed decimal places, optional argument, Default: 2

        Sample:

        const str = '24000/1001';
        const ratio = Ratio.ParseFromString(str);
        console.log(ratio.toFloat()) // 23.98
        console.log(ratio.toFloat(3)) // 23.976
    • toString(separator)

      Transform a Ratio instance to string

      Arguments:

      • separator

        Ratio separator in result

        Sample:

        const str = '24000/1001';
        const ratio = Ratio.ParseFromString(str);
        console.log(ratio.toString()) // "24000/1001"
        console.log(ratio.toString(":")) // "24000:1001"