Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- # chrispitude@gmail.com 01/04/2015
- #
- # credit goes to Nicolas Hillegeer for:
- # http://www.aktau.be/2013/09/22/detecting-interlaced-video-with-ffmpeg/
- # usage:
- # ./tff_or_bff.pl <file>
- # returns dominant frame type keyword (tff, bff, progressive, undetermined)
- #
- # ./tff_or_bff.pl -i <file>
- # returns dominant *interlaced* frame type keyword (tff, bff) and ignores noninterlaced data (progressive, undetermined);
- # useful when you are sure the content is interlaced
- #
- # ./tff_or_bff.pl -v <file>
- # shows detailed frame count information for each frame type
- use strict;
- use Getopt::Std;
- my %args;
- getopts('iv', \%args);
- # acquire information from 'idet' ffmpeg filter
- my $output = `ffmpeg -filter:v idet -an -f rawvideo -y /dev/null -i $ARGV[0] 2>&1`;
- my ($single_tff, $single_bff, $single_progressive, $single_undetermined) = $output =~ m!^\[Parsed_idet.*Single frame detection:\s+TFF:\s+(\d+)\s+BFF:\s+(\d+)\s+Progressive:\s+(\d+)\s+Undetermined:\s+(\d+)!m;
- my ($multi_tff, $multi_bff, $multi_progressive, $multi_undetermined) = $output =~ m!^\[Parsed_idet.*Multi frame detection:\s+TFF:\s+(\d+)\s+BFF:\s+(\d+)\s+Progressive:\s+(\d+)\s+Undetermined:\s+(\d+)!m;
- # sum single-frame and multi-frame results
- my %count = ();
- $count{tff} = $single_tff + $multi_tff;
- $count{bff} = $single_bff + $multi_bff;
- $count{progressive} = $single_progressive + $multi_progressive;
- $count{undetermined} = $single_undetermined + $multi_undetermined;
- # get total frame count
- my $total_count = 0;
- $total_count += $count{$_} for keys(%count);
- # consider only interlacing results (tff, bff) if i
- if ($args{i}) {
- delete $count{progressive};
- delete $count{undetermined};
- }
- # sort frame counts by type, largest first
- my @sorted_count_types = sort {$count{$b} <=> $count{$a}} keys(%count);
- # print dominant result if nonv
- if (!$args{v}) {
- print "$sorted_count_types[0]";
- }
- # print sorted results if v
- if ($args{v}) {
- printf "%s: %d (%.2f%%)\n", $_, $count{$_}, (100.0*$count{$_}/$total_count) for (@sorted_count_types)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement