@@ -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\s version\s (.+?),\s build\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\s version\s (.+?),\s build\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