Video-Generator
view release on metacpan or search on metacpan
Generator.pm view on Meta::CPAN
}
# Image generator.
if (! defined $self->{'image_generator'}) {
$self->{'image_generator'} = Image::Random->new(
'height' => $self->{'height'},
'type' => $self->{'image_type'},
'width' => $self->{'width'},
);
}
# Delay generator.
if (! defined $self->{'delay_generator'}) {
$self->{'delay_generator'} = Video::Delay::Const->new(
'const' => 1000,
);
}
# Video pattern generator.
if (! defined $self->{'video_pattern'}) {
$self->{'video_pattern'} = Video::Pattern->new(
'delay_generator' => $self->{'delay_generator'},
'duration' => $self->{'duration'},
'fps' => $self->{'fps'},
'image_generator' => $self->{'image_generator'},
);
}
# Object.
return $self;
}
# Create random video.
sub create {
my ($self, $out_path) = @_;
# Create images.
$self->{'video_pattern'}->create($self->{'temp_dir'});
if ($self->{'verbose'}) {
print "Video pattern generator created images for video in ".
"temporary directory.\n";
}
# Create video.
my $ffmpeg = FFmpeg::Command->new;
my $images_path = catfile($self->{'temp_dir'},
'%03d.'.$self->{'image_type'});
my @command_options = ('-loglevel', 'error', '-r', $self->{'fps'},
'-i', $images_path,
$self->{'ffmpeg_video_codec'}
? ('-c:v', $self->{'ffmpeg_video_codec'})
: (),
$self->{'ffmpeg_pixel_format'}
? ('-pix_fmt', $self->{'ffmpeg_pixel_format'})
:(),
'-pix_fmt', 'yuv420p',
$out_path);
$ffmpeg->options(@command_options);
$ffmpeg->exec;
if ($ffmpeg->stderr) {
my @stderr = split m/\n/ms, $ffmpeg->stderr;
my $command = join $SPACE, @command_options;
err "Error with command 'ffmpeg $command'.",
map { ('STDERR', $_) } @stderr;
}
if ($self->{'verbose'}) {
print "Created video file.\n";
}
# Remove temporary directory.
rmtree $self->{'temp_dir'};
if ($self->{'verbose'}) {
print "Removed temporary directory.\n";
}
return;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
Video::Generator - Perl class for video generation.
=head1 SYNOPSIS
use Video::Generator;
my $obj = Video::Generator->new(%parameters);
my $type = $obj->create($out_path);
=head1 METHODS
=head2 C<new>
my $obj = Video::Generator->new(%parameters);
Constructor.
=over 8
=item * C<delay_generator>
Delay generator.
Default value is object below:
Video::Delay::Const->new(
'const' => 1000,
)
=item * C<duration>
Video duration used for implicit 'video_pattern' parameter.
Possible suffixes are:
- ms for milisendons.
- s for seconds.
( run in 1.012 second using v1.01-cache-2.11-cpan-71847e10f99 )