1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use English;
7
8use JSON::PP;
9
10my $exe = $ENV{MKVMERGE} // 'mkvmerge';
11
12sub mpls_files {
13  return grep { (-f $_) && m{mpls$}i } (<*>);
14}
15
16sub identify {
17  my ($file_name) = @_;
18
19  my $output = `$exe -J $file_name 2> /dev/null`;
20  return undef if $CHILD_ERROR != 0;
21
22  $output        = JSON::PP::decode_json($output);
23  my ($duration) = $output->{container}->{properties}->{playlist_duration};
24  my ($size)     = $output->{container}->{properties}->{playlist_size};
25
26  return undef unless $duration && $size;
27
28  $duration = int($duration / 1_000_000_000);
29  $size     = int($size     / 1_000_000);
30
31  return sprintf('%s duration %02d:%02d:%02d size %d MB', $file_name, int($duration / 60 / 60), int($duration / 60) % 60, $duration % 60, $size);
32}
33
34print join("\n", grep { $_ } map { identify($_) } mpls_files()), "\n";
35