#!/usr/bin/perl # Copyright (C) 2019 Quentin GIBEAUX # Copyright (C) 2019 Frédéric COUCHET # Copyright (C) 2019 Christian Pierre MOMON # # This file is part of lav-outils from "April/Libre à vous !" # # This script is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . use strict; use Getopt::Long; use JSON; use Data::Dumper; use utf8; 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 < }; 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}; my $chapter_title = $chapter->{chapter_title}; # 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 - Partie $chapter_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; } } # renaming to target my $target_name = "$source_name-$short_chapter_name.ogg"; my $command = "mv output.ogg $target_name"; 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; } } # hashing my $command = "sha1sum $target_name > $target_name.sha1"; if($dryrun) { print "$command\n"; } else { my @ret = `$command`; if($?) { print "Error while hashing $target_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; } } # renaming to target 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; } } # hashing my $command = "sha1sum $source_name.ogg > $source_name.ogg.sha1"; if($dryrun) { print "$command\n"; } else { my @ret = `$command`; if($?) { print "Error while hashing $source_name.ogg\n"; if($verbose) { print Dumper @ret; print Dumper $data; } return 0; } } } process($config,$verbose,$dryrun);