Guest User

Untitled

a guest
Jan 2nd, 2011
675
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/perl
  2.  
  3. # usage: cd into your working directory, put all sub directories containing mkv's with dts track to encode to ac3 over there and run it
  4.  
  5. use warnings;
  6. use strict;
  7. use File::Basename;
  8.  
  9. my $DCADEC="/usr/bin/dcadec";
  10. # apt-get install libdca0 libdca-utils
  11.  
  12. my $AFTEN="/usr/bin/aften";
  13. # apt-get install cmake
  14. # cd /usr/src; wget wget http://downloads.sourceforge.net/project/aften/aften/0.0.8/aften-0.0.8.tar.bz2; tar xvjf aften-0.0.8.tar.bz2
  15. # cd aften-0.0.8; mkdir default; cd default
  16. # cmake .. -DCMAKE_INSTALL_PREFIX:STRING="/usr"; make && make install
  17.  
  18. my $MKVMERGE="/usr/bin/mkvmerge";
  19. my $MKVEXTRACT="/usr/bin/mkvextract";
  20. # apt-get install mkvtoolnix mkvtoolnix-gui
  21.  
  22. my $TMP_DTS="tmp.dts";
  23. my $TMP_AC3="tmp.ac3";
  24. my $PATTERN_DTS="A_DTS";
  25. my $PATTERN_AC3="A_AC3";
  26.  
  27. sub dts2ac3 {
  28.         my ($dts, $ac3) = @_;
  29.         `$DCADEC -o wavall $dts | $AFTEN - $ac3`;
  30. }
  31.  
  32. sub info {
  33.         my ($mkv) = @_;
  34.         return `$MKVMERGE -i $mkv`;
  35. }
  36.  
  37. sub demux {
  38.         my ($mkv, $id) = @_;
  39.         `$MKVEXTRACT tracks $mkv $id:$TMP_DTS`;
  40. }
  41.  
  42.  
  43. sub mux {
  44.         my ($mkv, $new, $ac3) = @_;
  45.         #remove all tracks with -A, only add new
  46.         `$MKVMERGE -A -o $new $mkv $ac3`;
  47. }
  48.  
  49. sub clean {
  50.         # delete 1.dts, 1.ac3, old mkv
  51.         my ($dts, $ac3, $old) = @_;
  52.         system("rm -f $dts");
  53.         system("rm -f $ac3");
  54.         system("rm -f $old");
  55. }
  56.  
  57. my $pwd=`pwd`;
  58. print "Processing all matches in $pwd...\n\n";
  59.  
  60. my @dirs=<*>;
  61.  
  62. my $dir;
  63. my @files;
  64. my $file;
  65. my @buf;
  66. my $line;
  67. my $id;
  68. my $name;
  69. my $ext=".mkv";;
  70. my $output;
  71.  
  72. foreach $dir (@dirs) {
  73.  
  74.         chdir $dir;
  75.         @files=<*>;
  76.  
  77.         foreach $file (@files) {
  78.                 if($file=~m/mkv/i) {
  79.  
  80.                         $id=-1;
  81.  
  82.                         # 1. get dts track id from info
  83.                         @buf=info($file);
  84.                         foreach $line (@buf) {
  85.                                 if($line=~m/$PATTERN_DTS/i) {
  86.                                         $line=~m/(\d+)/;
  87.                                         $id = $1;
  88.                                 }
  89.                                 if($line=~m/$PATTERN_AC3/i) {
  90.                                         print "AC3 track found.\n";
  91.                                 }
  92.                         }
  93.  
  94.                         next if($id<0);
  95.  
  96.                         # 2. demux dts track
  97.                         print "Demuxing DTS track from $file...\n";
  98.                         demux($file,$id);
  99.  
  100.                         # 3. encode dts to ac3
  101.                         print "Encoding DTS to AC3...\n";
  102.                         dts2ac3($TMP_DTS,$TMP_AC3);
  103.  
  104.                         # 4. parse old name, create new
  105.                         if($file=~m/dts/i){
  106.                                 $output=$file;
  107.                                 $output=~s/DTS/AC3/g;
  108.                                 $output=~s/dts/AC3/g;
  109.                         } else {
  110.                                 ($name, undef, $ext) = fileparse($file,qr"\.mkv");
  111.                                 $output="$name.AC3$ext";
  112.                         }
  113.  
  114.                         # 5. mux
  115.                         print "Creating new output with AC3 in $output...\n";
  116.                         mux($file, $output, $TMP_AC3);
  117.  
  118.                         # 6. clean
  119.                         print "Deleting temp files and old mkv...\n";
  120.                         clean($TMP_DTS, $TMP_AC3, $file);
  121.  
  122.                         # 7. info
  123.                         print info($output);
  124.                 }
  125.         }
  126.         chdir "../";
  127. }
RAW Paste Data