Guest User

Untitled

a guest
Apr 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.99 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. use File::Find::Rule;
  6. use Path::Class qw( dir file );
  7. use POSIX ":sys_wait_h";
  8.  
  9. my (@tracks) = File::Find::Rule->file->name('*.flac')->in('./');
  10.  
  11. my $pid = $$;
  12.  
  13. sub flac_decode {
  14. my $writefno = shift;
  15. my $file = shift;
  16. open *STDOUT, '>>&=', $writefno || die "Pipe open failed";
  17. $|++;
  18. exec {'flac'} 'flac', '-d', '-c', $file;
  19. }
  20.  
  21. sub mp3_encode {
  22. my $readfno = shift;
  23. my $file = shift;
  24. exec {'lame'} 'lame', qw( --verbose --preset insane -V 0 -B 128 -q 0 ), "/proc/$pid/fd/$readfno", $file;
  25. }
  26.  
  27. for (@tracks) {
  28. my $file = file($_);
  29. my $dir = $file->dir;
  30. my $base = $file->basename;
  31.  
  32. my $out = $base;
  33. $out =~ s/.flac/.mp3/;
  34.  
  35. print "$file => $out\n";
  36.  
  37. my ( $readfh, $writefh );
  38. pipe $readfh, $writefh;
  39.  
  40. my ( $flaccer, $mp3er );
  41. if ( not $flaccer = fork() ) {
  42. flac_decode( fileno $writefh, "$file" );
  43. }
  44. if ( not $mp3er = fork() ) {
  45. mp3_encode( fileno $readfh, $out );
  46. }
  47.  
  48. waitpid $flaccer, 0;
  49. waitpid $mp3er, 0;
  50.  
  51. }
Add Comment
Please, Sign In to add comment