Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- use File::Find::Rule;
- use Path::Class qw( dir file );
- use POSIX ":sys_wait_h";
- my (@tracks) = File::Find::Rule->file->name('*.flac')->in('./');
- my $pid = $$;
- sub flac_decode {
- my $writefno = shift;
- my $file = shift;
- open *STDOUT, '>>&=', $writefno || die "Pipe open failed";
- $|++;
- exec {'flac'} 'flac', '-d', '-c', $file;
- }
- sub mp3_encode {
- my $readfno = shift;
- my $file = shift;
- exec {'lame'} 'lame', qw( --verbose --preset insane -V 0 -B 128 -q 0 ), "/proc/$pid/fd/$readfno", $file;
- }
- for (@tracks) {
- my $file = file($_);
- my $dir = $file->dir;
- my $base = $file->basename;
- my $out = $base;
- $out =~ s/.flac/.mp3/;
- print "$file => $out\n";
- my ( $readfh, $writefh );
- pipe $readfh, $writefh;
- my ( $flaccer, $mp3er );
- if ( not $flaccer = fork() ) {
- flac_decode( fileno $writefh, "$file" );
- }
- if ( not $mp3er = fork() ) {
- mp3_encode( fileno $readfh, $out );
- }
- waitpid $flaccer, 0;
- waitpid $mp3er, 0;
- }
Add Comment
Please, Sign In to add comment