<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, May 4, 2015 at 5:30 PM, Dave MythTV <span dir="ltr"><<a href="mailto:dave.mythtv@gmail.com" target="_blank">dave.mythtv@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 3, 2015 at 6:22 PM, Michael Stucky <span dir="ltr"><<a href="mailto:mike@stucky.us" target="_blank">mike@stucky.us</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div>On Sun, May 3, 2015 at 5:46 PM, Dave MythTV <span dir="ltr"><<a href="mailto:dave.mythtv@gmail.com" target="_blank">dave.mythtv@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Hello everyone.<br></div><br></div>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:<br></div><a href="https://www.mythtv.org/wiki/Transcode_Mpeg2_to_H264" target="_blank">https://www.mythtv.org/wiki/Transcode_Mpeg2_to_H264</a><br><br><br></div>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.<br><br></div>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?<br><div><div><br><br></div><div>Additional information:<br></div><div>'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?<br><br><br></div><div>Thanks for the help.<span><font color="#888888"><br></font></span></div><span><font color="#888888"><div>- Dave<br></div><div><br></div></font></span></div></div></blockquote><div><br></div></div></div><div>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:</div><div><br></div><div>     task = System(path=transcoder, db=db)</div><div>     try:<br></div><div>            output = task('-i "%s"' % tmpfile,</div><div>                          '-filter:v yadif=1',</div><div>                          '-sws_flags spline',<br></div><div>                          '-r 60000/1001',</div><div>                          '-c:v libx264',</div><div>                          '-preset:v slow',</div><div>                          '-crf:v 18',</div><div>                          '-threads 0',<br></div><div>                          '-c:a copy',</div><div>                          '-metadata:s:a:0',</div><div>                          'language="eng"',</div><div>                          '"%s"' % outfile,</div><div>                          '2> /dev/null')</div><div><br></div><div>If you find that this helps let me know and I will update the script on the wiki.</div><div><br></div><div>Mike</div></div></div></div><br></blockquote><div><br><br></div><div>Thanks Mike!  I'll do some experimenting with your changes this evening.  <br><br>A couple questions:<br></div><div>* What made you select 'spline' as the scaler method?  (just curious)<br></div><div>* Did you have a frame rate issue that required forcing the output frame rate explicitly?<br><br></div><div>Also, I think there may be an issue with the yadif filter...<br></div><div>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.<br>(example: <a href="https://ffmpeg.org/pipermail/ffmpeg-user/2014-May/021412.html" target="_blank">https://ffmpeg.org/pipermail/ffmpeg-user/2014-May/021412.html</a>)<br><br></div><div>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.<br><br></div><div>(Other links for reference...)<br></div><div><a href="https://ffmpeg.org/ffmpeg-filters.html#yadif-1" target="_blank">https://ffmpeg.org/ffmpeg-filters.html#yadif-1</a>   <br></div><div><a href="https://ffmpeg.org/ffmpeg-filters.html#idet" target="_blank">https://ffmpeg.org/ffmpeg-filters.html#idet</a><br><br></div><div><br></div><div>Thanks again<span class=""><font color="#888888"><br></font></span></div><span class=""><font color="#888888"><div>- Dave<br></div><div><br></div></font></span></div></div></div></blockquote><div><br></div><div>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. </div><div><br></div><div>"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.</div><div><br></div><div>This works and produces good quality output for all my content, 1080i, 720p, and 480i all OTA to HDHomerun tuners. </div><div><br></div><div>Mike</div></div></div></div>