我的腳本的第一部分詢問是否檢查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