+ # Detect if the input file is interlaced or not.
+ # There is a bug in mkvmerge 5.0.1 and earlier where if the video content is 1080i, it doesn't mux it properly, and it stutters.
+ # The quick solution to this issue is to run the interlaced video file through ffmpeg and tell it to copy the video/audio streams to a mkv container.
+ # We will then merge this temporarily created mkv container into the final mkv container instead of the original interlaced video.
+ # http://ubuntuforums.org/showthread.php?t=1627194
+ # http://forum.doom9.org/showthread.php?t=155732&page=31
+ my $interlaced = system('ffmpeg -i "$video" 2>&1 | grep -q "frame rate differs"');
+ if($interlaced != 0) {
+ my $video_mkv = $video;
+ my $video_ext = $video;
+ $video_ext =~ s/.*\.(\S+)$/$1/;
+ print " Detected interlaced video content: $video\n";
+ if($video_ext !~ /mkv/i) {
+ $video_mkv =~ s/\.[^.]*$//; $video_mkv .= ".mkv";
+ print " Re-muxing the interlaced video content as an mkv file: $video_mkv\n";
+ my $make_mkv_cmd = "ffmpeg -i \"$video\" -scodec copy -acodec copy -vcodec copy -f matroska \"$video_mkv\" > /dev/null 2>&1";
+ if(! defined $opt_s) {
+ my $errno = system("$make_mkv_cmd");
+ $errno = $errno >> 8;
+ if($errno > 1) {
+ unlink "$video_mkv";
+ die "-E- ffmpeg encountered some errors with exit code $errno\n";
+ }
+ }
+ # Push the name of our intermediate video file onto a list of files to delete on exit
+ push(@video_tmp_files, "$video_mkv");
+ # Update the name of our video file to equal the name of our new intermediate video file name
+ $video = $video_mkv;
+ }
+ } else {
+ print " Detected progressive video content: $video\n";
+ }
+ # Create our intput file command line options for this video