149 lines
3.7 KiB
Perl
149 lines
3.7 KiB
Perl
|
#!/usr/bin/perl
|
||
|
|
||
|
use strict;
|
||
|
use Getopt::Long;
|
||
|
use JSON;
|
||
|
use Data::Dumper;
|
||
|
|
||
|
my ($help,$config,$verbose,$dryrun);
|
||
|
my $meta_data_script = "lav-outils/podcasts/scripts/make-metadata-image-podcast.sh";
|
||
|
|
||
|
my $verbose;
|
||
|
GetOptions ("help" => \$help,
|
||
|
"config=s" => \$config,
|
||
|
"verbose" => \$verbose,
|
||
|
"dryrun" => \$dryrun);
|
||
|
|
||
|
if($help) {
|
||
|
usage();
|
||
|
} elsif( not $config ) {
|
||
|
print " /!\\ Missing config arg\n\n";
|
||
|
usage();
|
||
|
}
|
||
|
|
||
|
sub usage {
|
||
|
print <<EOS
|
||
|
Exec commands to cut and process LAV! podcast with json file containing the timestamps and sections to be cut.
|
||
|
Needs JSON perl library (apt install libjson-perl)
|
||
|
$0 --config conf_file.json
|
||
|
--config conf_file.json the configuration file containing stuff
|
||
|
--help show this message
|
||
|
--verbose increase verbosity
|
||
|
--dryrun print commands without executing them
|
||
|
EOS
|
||
|
;
|
||
|
}
|
||
|
|
||
|
sub read_config {
|
||
|
my ($filename) = @_;
|
||
|
|
||
|
my $json_text = do { #read all the file in one shot
|
||
|
open(my $json_fh, "<:encoding(UTF-8)", $filename)
|
||
|
or die("Can't open \$filename\": $!\n");
|
||
|
local $/;
|
||
|
<$json_fh>
|
||
|
};
|
||
|
|
||
|
my $json = JSON->new;
|
||
|
my $data = $json->decode($json_text);
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
sub process {
|
||
|
my ($config,$verbose,$dryrun)=@_;
|
||
|
my $data = read_config($config);
|
||
|
|
||
|
my $short_date = $data->{short_date};
|
||
|
my $long_date = $data->{long_date};
|
||
|
my $source_name = "libre-a-vous-$short_date";
|
||
|
my $title = "Libre à vous ! du $long_date sur Cause Commune";
|
||
|
my $ffmpeg_bin = $data->{ffmpeg_bin};
|
||
|
for my $chapter (values @{$data->{chapters}}) {
|
||
|
my $start = $chapter->{start_timestamp};
|
||
|
my $end = $chapter->{end_timestamp};
|
||
|
my $short_chapter_name = $chapter->{short_chapter_name};
|
||
|
|
||
|
# cutting chapter
|
||
|
my $command = "$ffmpeg_bin -y -i $source_name.ogg -vn -acodec copy -ss \"$start\" -to \"$end\" $source_name-$short_chapter_name.ogg";
|
||
|
if($dryrun) {
|
||
|
print "$command\n";
|
||
|
} else {
|
||
|
my @ret = `$command`;
|
||
|
if($?) {
|
||
|
print "Error while cutting $short_chapter_name\n";
|
||
|
if($verbose) {
|
||
|
print Dumper @ret;
|
||
|
print Dumper $data;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# putting metadata
|
||
|
my $url = "https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/$short_date/$source_name-$short_chapter_name.ogg";
|
||
|
my $command = "$meta_data_script -s \"$source_name-$short_chapter_name.ogg\" -d \"output.ogg\" -u \"$url\" -t \"$title\" -p \"$ffmpeg_bin\"";
|
||
|
if($dryrun) {
|
||
|
print "$command\n";
|
||
|
} else {
|
||
|
my @ret = `$command`;
|
||
|
if($?) {
|
||
|
print "Error while setting metadata in $short_chapter_name\n";
|
||
|
if($verbose) {
|
||
|
print Dumper @ret;
|
||
|
print Dumper $data;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
my $command = "mv output.ogg $source_name-$short_chapter_name.ogg";
|
||
|
if($dryrun) {
|
||
|
print "$command\n";
|
||
|
} else {
|
||
|
my @ret = `$command`;
|
||
|
if($?) {
|
||
|
print "Error while renaming $short_chapter_name\n";
|
||
|
if($verbose) {
|
||
|
print Dumper @ret;
|
||
|
print Dumper $data;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# putting metadata in main podcast
|
||
|
my $url = "https://media.april.org/audio/radio-cause-commune/libre-a-vous/emissions/$short_date/$source_name.ogg";
|
||
|
my $command = "$meta_data_script -s \"$source_name.ogg\" -d \"output.ogg\" -u \"$url\" -t \"$title\" -p \"$ffmpeg_bin\"";
|
||
|
if($dryrun) {
|
||
|
print "$command\n";
|
||
|
} else {
|
||
|
my @ret = `$command`;
|
||
|
if($?) {
|
||
|
print "Error while setting metadata in $source_name\n";
|
||
|
if($verbose) {
|
||
|
print Dumper @ret;
|
||
|
print Dumper $data;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
my $command = "mv output.ogg $source_name.ogg";
|
||
|
if($dryrun) {
|
||
|
print "$command\n";
|
||
|
} else {
|
||
|
my @ret = `$command`;
|
||
|
if($?) {
|
||
|
print "Error while renaming $source_name\n";
|
||
|
if($verbose) {
|
||
|
print Dumper @ret;
|
||
|
print Dumper $data;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
process($config,$verbose,$dryrun);
|