[mythtv-users] H264 conversion of interlaced MPEG2?
Jay Foster
jayf0ster at roadrunner.com
Mon May 11 20:17:29 UTC 2015
On 5/11/2015 12:46 PM, Michael Stucky wrote:
> On Mon, May 4, 2015 at 5:30 PM, Dave MythTV <dave.mythtv at gmail.com
> <mailto:dave.mythtv at gmail.com>> wrote:
>
>
>
> On Sun, May 3, 2015 at 6:22 PM, Michael Stucky <mike at stucky.us
> <mailto:mike at stucky.us>> wrote:
>
> On Sun, May 3, 2015 at 5:46 PM, Dave MythTV
> <dave.mythtv at gmail.com <mailto:dave.mythtv at gmail.com>> wrote:
>
> Hello everyone.
>
> I'm running some tests, preparing to reconfigure my
> backend to transcode certain shows from US-broadcast ATSC
> MPEG2 to H264 for hardware accelerated playback on our
> various portable devices. In doing this, I've been
> experimenting with Mike Stucky's user job script:
> https://www.mythtv.org/wiki/Transcode_Mpeg2_to_H264
>
>
> However, I've hit a snag... If I run this script on an
> MPEG2 file with interlaced SD content, MythTV no longer
> recognizes the resulting H264 file as being interlaced,
> and playback in the MythTV frontend shows interlacing
> artifacts.
>
> I know I could modify Mike's script to specifically
> deinterlace the content before or during the H264
> conversion... but I didn't think this would have been
> necessary? Shouldn't it be possible to convert interlaced
> MPEG2 to interlaced H264, and continue using the
> frontend's deinterlacer?
>
>
> Additional information:
> 'mediainfo' detects the input MPEG2 file as being
> interlaced, but shows the output H264 file as being
> progressive scan. So I think this might be an issue with
> the ffmpeg conversion flagging (or encoding) the
> non-deinterlaced output as progressive... and not an issue
> with MythTV's player?
>
>
> Thanks for the help.
> - Dave
>
>
> I have recently discovered this same behavior and I think you
> are right about it being an ffmpeg issue. It looks like ffmpeg
> automatically deinterlaces SD content, so I have modified the
> "transcode" section to do a better job of deinterlacing (this
> has the added benefit of allowing ffmpeg to do a better job of
> compressing), this appears to be working for me, at least for
> SD content:
>
> task = System(path=transcoder, db=db)
> try:
> output = task('-i "%s"' % tmpfile,
> '-filter:v yadif=1',
> '-sws_flags spline',
> '-r 60000/1001',
> '-c:v libx264',
> '-preset:v slow',
> '-crf:v 18',
> '-threads 0',
> '-c:a copy',
> '-metadata:s:a:0',
> 'language="eng"',
> '"%s"' % outfile,
> '2> /dev/null')
>
> If you find that this helps let me know and I will update the
> script on the wiki.
>
> Mike
>
>
>
> Thanks Mike! I'll do some experimenting with your changes this
> evening.
>
> A couple questions:
> * What made you select 'spline' as the scaler method? (just curious)
> * Did you have a frame rate issue that required forcing the output
> frame rate explicitly?
>
> Also, I think there may be an issue with the yadif filter...
> The FFmpeg docs state that the third yadif parameter (deint)
> controls which frames to deinterlace. The default is "all", but
> I've been reading that applying yadif on **progressive** source
> content will negatively impact the quality.
> (example:
> https://ffmpeg.org/pipermail/ffmpeg-user/2014-May/021412.html)
>
> So I think to make your script flexible for both interlaced and
> progressive source content, we would need to either call yadif as
> yadif=1:-1:1 (and hope that the frames are properly flagged?), or
> do some sort of other method (idet filter?) to detect the
> interlacing and convert as necessary? There is a solution in the
> message linked above using idet, but the author (Nick) reports
> "mixed success"... not sure what to make of that.
>
> (Other links for reference...)
> https://ffmpeg.org/ffmpeg-filters.html#yadif-1
> https://ffmpeg.org/ffmpeg-filters.html#idet
>
>
> Thanks again
> - Dave
>
>
> Sorry for the delay, it was a busy weekend+... I am not an ffmpeg
> expert so all the syntax came either from the original shell script or
> searches for a better way to deinterlace. But I have done some
> additional searching and testing have updated my script on the wiki
> accordingly.
>
> "yadif=1" has become "yadif=0:-1:1" (mode 0 = one frame out for one
> frame in, parity -1 = autodetect, and deint 1 = only deinterlace
> frames marked as interlaced). "sws_flags spline" is removed (only
> applies when scaling content?). "-r 60000/1001" is removed (this
> actually caused every frame to be duplicated for interlaced content).
> "threads 0" is removed (the h264 encoder uses all available threads by
> default). "-c:a copy" replaced with "-strict -2" to use the internal
> AAC encoder.
>
> This works and produces good quality output for all my content, 1080i,
> 720p, and 480i all OTA to HDHomerun tuners.
>
> Mike
>
>
> _______________________________________________
> mythtv-users mailing list
> mythtv-users at mythtv.org
> http://lists.mythtv.org/mailman/listinfo/mythtv-users
> http://wiki.mythtv.org/Mailing_List_etiquette
> MythTV Forums: https://forum.mythtv.org
I took a look at the script on the wiki and had a question. Does this
break commercial skipping? The script does not appear to reschedule a
commflag job after the transcoding.
Jay
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mythtv.org/pipermail/mythtv-users/attachments/20150511/557ccd2d/attachment-0001.html>
More information about the mythtv-users
mailing list