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