FFmpeg::Stream::Helper - Helper for streaming and transcoding using ffmpeg.
Version 0.1.1
This module is for helping generate a command for ffmpeg that should be good for streaming to HTML5.
This module also does it securely by using String::ShellQuote for every definable option passed to ffmpeg.
# Defaults Are... # Output: - ((standard out)) # Bit Rate: 2000 kbps # Bound: undef # Format: mp4 # Log Level: quiet # Threads: 0 my $fsh=FFmpeg::Stream::Helper->new; #sets the bit rate to 1500 $fsh->bitRateSet('1500'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); } # Enable printing of errors. $fsh->loglevelSet('error'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); } # set the width bound to 800 for scaling # aspect will be kept $fsh->boundSet('800'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); } # Disable pretty much all error output. This is great if you are sending stuff # to STDOUT and what you are sending it to can't tell the difference between it # and STDERR $fsh->loglevelSet('quiet'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); } # What? No. We can't stop here. This is bat country. my $command=$fsh->command('/arc/video/movies/Fear and Loathing in Las Vegas.avi'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
Inits a new object for use.
No need for error checking. This will always succeed.
my $fsh=FFmpeg::Stream::Helper->new;
Returns the kilobits per second used for encoding.
my $kbps=$fsh->boundGet; print "Bit Rate: ".$kbps."kbps\n"
This sets the bitrate.
One argument is required and that is a integer represting the kilobits per second.
$fsh->bitRateSet('1500'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
Returns the current width bound for scaling the video.
my $bound=$fsh->boundGet; if ( ! defined( $bound ) ){ print "No bound set.\n"; }else{ print "Bound: ".$bound."\n" }
Sets a new bound. The bound is the maximum size the width can be while keeping aspect when it is scaled.
One argument is taken and that is the integer to use found bounding.
If undef is specified, then no scaling will be done.
#calls it with a the bound being undef, removing it $fsh->boundSet; #sets it to 900px $fsh->boundSet('900'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
The command to run ffmpeg with the specified options.
One argument is taken and that is the file name to run it for.
Escaping it is not needed as String::ShellQuote is used for that as well as any of the other values being passed to it.
my $command=$fsh->command('/arc/video/movies/Fear and Loathing in Las Vegas.avi'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
Returns the current format to be used.
my $format=$fsh->formatGet; print "Format: ".$format."\n";
Sets the new format to use.
One argument is required and that is the format to use. The following are supported.
mp4 webm ogg $fsh->formatSet('webm'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
Returns what it is currently set to output to.
my $output=$fsh->outputGet; print "Output: ".$output."\n";
This sets the -loglevel for ffmpeg. Please see the man for that for the value.
One argument is taken and that is the -loglevel to use.
Currently it only recognizes the text version, which are as below.
quiet panic fatal error warning info verbose debug trace $fsh->loglevelSet('panic'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
Return the current x264 -preset value.
The file to output to. If not specified, "-" will be used.
One argument is required and that is the what it should output to.
There is no need to escape anything as that is handled by String::ShellQuote.
#output to STDOUT $fsh->outputSet('-'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); } #output to '/tmp/Fear and Loathing in Las Vegas.mp4' $fsh->outputSet('/tmp/Fear and Loathing in Las Vegas.mp4'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
Gets the number of threads to use.
my $threads=$fsh->threadsGet; if ( ( $threads eq '0' ) || ( $threads eq 'auto' ) ){ print "The number of threads will automatically be determined.\n"; }else{ print $threads." threads will be used for this.\n"; }
Sets the number of threads to use for encoding.
One argument is taken and that is a integeer representing the number of threads.
'auto' may also be specified and should be the same as '0'. If either are specified, ffmpeg will choose the best thread count.
$fsh->threadsSet('0'); if ( $fsh->error ){ warn('error:'.$fsh->error.': '.$fsh->errorString); }
No file specified.
File does not exist or is not a file.
Not an integer.
Format is undef.
Not a valid format. Must be one of the ones below.
mp4 webm ogg
The default is mp4.
Nothing specified to use for -loglevel.
Not a valid -loglevel value.
The ones recognized by name are as below.
quiet panic fatal error warning info verbose debug trace
Please see the ffmpeg man for descriptions.
No value specified for what to use for -threads.
A bad value has been specified for threads. It needs to match one of the ones below.
/^auto$/ /[0123456789]*/
Zane C. Bowers-Hadley, <vvelox at vvelox.net>
<vvelox at vvelox.net>
Please report any bugs or feature requests to bug-ffmpeg-stream-helper at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=FFmpeg-Stream-Helper. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-ffmpeg-stream-helper at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc FFmpeg::Stream::Helper
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
http://rt.cpan.org/NoAuth/Bugs.html?Dist=FFmpeg-Stream-Helper
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/FFmpeg-Stream-Helper
CPAN Ratings
http://cpanratings.perl.org/d/FFmpeg-Stream-Helper
Search CPAN
http://search.cpan.org/dist/FFmpeg-Stream-Helper/
Copyright 2016 Zane C. Bowers-Hadley.
This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0). You may obtain a copy of the full license at:
http://www.perlfoundation.org/artistic_license_2_0
Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license.
If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license.
This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder.
This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed.
Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
To install FFmpeg::Stream::Helper, copy and paste the appropriate command in to your terminal.
cpanm
cpanm FFmpeg::Stream::Helper
CPAN shell
perl -MCPAN -e shell install FFmpeg::Stream::Helper
For more information on module installation, please visit the detailed CPAN module installation guide.