我的脚本的第一部分询问是否检查cinavia不起作用。也就是说,如果我输入“y”或“Y”,则不会进入CNVIACHk
功能,而是进入MVIEPARAMs
功能。Perl和ffmpeg脚本
# GET FILE INPUT..
print "Enter Filename..";
my $MOVIe = <STDIN>;
print "Check For Cinavia? Enter y or n\n";
my $CNVIAQUESt = <STDIN>;
if ($CNVIAQUESt eq "y" || $CNVIAQUESt eq "Y") {
CNVIACHk($MOVIe);
}
else {
MVIEPARAMs($MOVIe);
}
sub MVIEPARAMs {
system(
"ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $MOVIe"
);
print "Duration In Seconds..";
$DURATIOn = <STDIN>;
system(
'ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width "$MOVIe"'
);
print "Movie Width? ";
$MOVIEWIDTh = <STDIN>;
print "Movie Height? ";
$MOVIEHEIGHt = <STDIN>;
print "Enter Target Width.. ";
$TARGETWIDTh = <STDIN>;
print "Enter Target Height.. ";
$TARGETHEIGHt = <STDIN>;
system(
'ffprobe -show_entries stream=index,codec_type:stream_tags=language -of compact "$MOVIe" -v 0 | grep eng'
);
print "Enter number of English Audio Track.. ";
$ENGAUDTRk = <STDIN>;
print "English Audio Track Number Is ", $ENGAUDTRk, ".";
$BTRTe = 31875072/$DURATIOn;
DETRMNEPAd;
}
sub DETRMNEPAd {
if ($MOVIEWIDTh < $TARGETWIDTh) {
$X = $TARGETWIDTh - $MOVIEWIDTh/2;
}
elsif ($MOVIEHEIGHt < $TARGETHEIGHt) {
$Y = $TARGETHEIGHt - $MOVIEHEIGHt/2;
$X = 0;
print $Y;
}
else {
print "Padding Not Needed Moving On...";
CNVRTWOPAd();
}
CNVRTWPAd();
}
sub CNVIACHk {
print "Checking Movie For Cinavia.. ";
system("cinde -i $MOVIe -q high -l");
print "Enter Track To Check.. ";
$TRKTOCHEk = <STDIN>;
system("cinde -i $MOVIe -q high -t $TRKTOCHEk");
print "Was Cinavia Detected?";
$CNVIACHKANSr = <STDIN>;
if ($CNVIACHKANSr eq "y") {
exit;
}
else {
print "Would You Like To Check Another Track?";
$CHKANTHRTRk = <STDIN>;
if ($CHKANTHRTRk eq "y") {
CNVIACHk();
}
else {
MVIEPARAMs();
}
}
}
sub CNVRTWOPAd {
print "BEGINNING CONVERSION...\n";
print "What Preset Would You Like To Use?";
$PRESEt = <STDIN>;
system(
"ffmpeg -i $MOVIe -map 0:0 -map 0:$ENGAUDTRk -c:v libx264 -b:v $BTRTe -preset $PRESEt -strict -2 -c:a ac3 -b:a 192k -threads 12 -pass 1 -f matroska dummy && ",
"ffmpeg -i $MOVIe -map 0:0 -map 0:$ENGAUDTRk -c:v libx264 -b:v $BTRTe -preset $PRESEt -strict -2 -c:a ac3 -b:a 192k -threads 12 -pass 2 -f matroska ENCODE1.mkv"
);
}
sub CNVRTWPAd {
print "BEGINNING CONVERSION...\n";
print "What Preset Would You Like To Use?";
my $PRESEt = <STDIN>;
system(
"ffmpeg -i $MOVIe -map 0:0 -map 0:$ENGAUDTRk -c:v libx264 -b:v $BTRTe -preset $PRESEt -vf \"pad=$TARGETWIDTh:$TARGETHEIGHt:$X:$Y:black\" -strict -2 -c:a ac3 -b:a 192k ",
" -threads 12 -pass 1 -f matroska dummy && ffmpeg -i $MOVIe -map 0:0 -map 0:$ENDAUDTRk -c:v libx264 -b:v $BTRTe -preset $PRESEt -vf \"pad=$TARGETWIDTh:$TARGETHEIGHt:$X:$Y:black\"",
" -strict -2 -c:a ac3 -b:a 192k -threads 12 -pass 2 -f matroska ENCODE1.mkv"
);
}
这是一个奇怪的方法来命名您的VARIABLEs。 – LordNeckbeard
是的,我喜欢allcaps,但不知道它是否安全.. – armight29
你应该遵循你正在使用的编程语言的指导原则。通常,Perl词法变量使用小写字母和'snake_case',全局变量采用大写字母,模块和包名称的首字母大写为'Like :: This'。看看['perldoc perlstyle'](http://perldoc.perl.org/perlstyle.html) 你还必须在你编写的每个Perl程序的顶部使用'strict'和''warning all'' ,并用'my'声明所有变量尽可能接近它们的第一个使用点。 – Borodin