Skip to content

Commit da7598e

Browse files
committed
fix yuvdenoise detection issues, should make the latest yuvdenoise actually usable now. closes [https://svn.forevermore.net/nuvexport/ticket/52 #52]
1 parent 9f6cdc8 commit da7598e

File tree

1 file changed

+37
-19
lines changed

1 file changed

+37
-19
lines changed

trunk/export/ffmpeg.pm

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,30 @@ package export::ffmpeg;
3636
my $yuvdenoise = find_program('yuvdenoise')
3737
or push @{$self->{'errors'}}, 'You need yuvdenoise (part of mjpegtools) to use this exporter.';
3838
# Check the yuvdenoise version
39-
my $data = `cat /dev/null | yuvdenoise 2>&1`;
40-
if ($data =~ m/yuvdenoise version 1.6.3-rc[12]/i) {
41-
$self->{'denoise_error'} = 'yuvdenoise version 1.6.3rc1 (and rc2) are broken and cannot be used.';
39+
if (!defined $self->{'denoise_vmaj'}) {
40+
my $data = `cat /dev/null | yuvdenoise 2>&1`;
41+
if ($data =~ m/yuvdenoise version (\d+(?:\.\d+)?)(\.\d+)?/i) {
42+
$self->{'denoise_vmaj'} = $1;
43+
$self->{'denoise_vmin'} = $2;
44+
}
45+
else {
46+
push @{$self->{'errors'}}, 'Unrecognizeable yuvdenoise version string.';
47+
}
48+
# New yuvdenoise can't deinterlace
49+
if ($self->{'denoise_vmaj'} > 1.6 || ($self->{'denoise_vmaj'} == 1.6 && $self->{'denoise_vmin'} > 2)) {
50+
$self->{'deint_in_yuvdenoise'} = 0;
51+
}
4252
}
4353
# Check the ffmpeg version
44-
$data = `ffmpeg -version 2>&1`;
45-
if ($data =~ m/ffmpeg\sversion\s(.+?),\sbuild\s(\d+)/si) {
46-
$self->{'ffmpeg_vers'} = lc($1);
47-
$self->{'ffmpeg_build'} = $2;
48-
}
49-
else {
50-
push @{$self->{'errors'}}, 'Unrecognizeable ffmpeg version string.';
54+
if (!defined $self->{'ffmpeg_vers'}) {
55+
$data = `ffmpeg -version 2>&1`;
56+
if ($data =~ m/ffmpeg\sversion\s(.+?),\sbuild\s(\d+)/si) {
57+
$self->{'ffmpeg_vers'} = lc($1);
58+
$self->{'ffmpeg_build'} = $2;
59+
}
60+
else {
61+
push @{$self->{'errors'}}, 'Unrecognizeable ffmpeg version string.';
62+
}
5163
}
5264
# Audio only?
5365
$self->{'audioonly'} = $audioonly;
@@ -132,16 +144,22 @@ package export::ffmpeg;
132144
$ffmpeg .= " -r " . $episode->{'finfo'}{'fps'};
133145
$ffmpeg .= " -i /tmp/fifodir_$$/vidout -f yuv4mpegpipe -";
134146
$ffmpeg .= " 2> /dev/null | ";
135-
$ffmpeg .= "$NICE yuvdenoise -r 16";
136-
if ($self->val('fast_denoise')) {
137-
$ffmpeg .= ' -f';
138-
}
139-
if ($self->{'crop'}) {
140-
$ffmpeg .= " -b $crop_w,$crop_h,-$crop_w,-$crop_h";
147+
$ffmpeg .= "$NICE yuvdenoise";
148+
if ($self->{'denoise_vmaj'} < 1.6 || ($self->{'denoise_vmaj'} == 1.6 && $self->{'denoise_vmin'} < 3)) {
149+
$ffmpeg .= ' -r 16';
150+
if ($self->val('fast_denoise')) {
151+
$ffmpeg .= ' -f';
152+
}
153+
if ($self->{'crop'}) {
154+
$ffmpeg .= " -b $crop_w,$crop_h,-$crop_w,-$crop_h";
155+
}
156+
# Deinterlace in yuvdenoise
157+
if ($self->val('deint_in_yuvdenoise') && $self->val('deinterlace')) {
158+
$ffmpeg .= " -F";
159+
}
141160
}
142-
# Deinterlace in yuvdenoise
143-
if ($self->val('deint_in_yuvdenoise') && $self->val('deinterlace')) {
144-
$ffmpeg .= " -F";
161+
else {
162+
$ffmpeg .= ' 2>&1';
145163
}
146164
$ffmpeg .= ' | ';
147165
$videofifo = '-';

0 commit comments

Comments
 (0)