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 )