--- mythtv/programs/mythtranscode/transcode.cpp
+++ mythtv/programs/mythtranscode/transcode1.cpp
@@ -1332,11 +1337,64 @@
                           imageOut.data, imageOut.linesize);
             }
 
+            if (!avfMode)
+            {
+                GetPlayer()->GetCC608Reader()->
+                    TranscodeWriteText(&TranscodeWriteText, (void *)(nvr));
+            }
+            lasttimecode = frame.timecode;
+            frame.timecode -= timecodeOffset;
+
+            if (avfMode)
+            {
+                if (halfFramerate && !skippedLastFrame)
+                {
+                    skippedLastFrame = true;
+                }
+                else
+                {
+                    skippedLastFrame = false;
+
+                    if ((hls) &&
+                        (avfw->GetFramesWritten()) &&
+                        (hlsSegmentFrames > hlsSegmentSize) &&
+                        (avfw->NextFrameIsKeyFrame()))
+                    {
+                        hls->AddSegment();
+                        avfw->ReOpen(hls->GetCurrentFilename());
+
+                        if (avfw2)
+                            avfw2->ReOpen(hls->GetCurrentFilename(true));
+
+                        hlsSegmentFrames = 0;
+                    }
+
+                    if (avfw->WriteVideoFrame(&frame) > 0)
+                    {
+                        lastWrittenTime = frame.timecode + timecodeOffset;
+                        if (hls)
+                            ++hlsSegmentFrames;
+                    }
+
+                }
+            }
+            else
+            {
+                if (forceKeyFrames)
+                    nvr->WriteVideo(&frame, true, true);
+                else
+                    nvr->WriteVideo(&frame);
+
+                lastWrittenTime = frame.timecode + timecodeOffset;
+            }
+
             // audio is fully decoded, so we need to reencode it
             AudioBuffer *ab = NULL;
             while ((ab = arb->GetData(lastWrittenTime)) != NULL)
             {
+
                 unsigned char *buf = (unsigned char *)ab->data();
+
                 if (avfMode)
                 {
                     if (did_ff != 1)
@@ -1362,9 +1420,11 @@
                 }
                 else
                 {
+
                     nvr->SetOption("audioframesize", ab->size());
                     nvr->WriteAudio(buf, audioFrame++,
                                     ab->m_time - timecodeOffset);
+
                     if (nvr->IsErrored())
                     {
                         LOG(VB_GENERAL, LOG_ERR,
@@ -1378,60 +1438,12 @@
                         delete ab;
                         return REENCODE_ERROR;
                     }
+
                 }
 
                 delete ab;
             }
 
-            if (!avfMode)
-            {
-                GetPlayer()->GetCC608Reader()->
-                    TranscodeWriteText(&TranscodeWriteText, (void *)(nvr));
-            }
-            lasttimecode = frame.timecode;
-            frame.timecode -= timecodeOffset;
-
-            if (avfMode)
-            {
-                if (halfFramerate && !skippedLastFrame)
-                {
-                    skippedLastFrame = true;
-                }
-                else
-                {
-                    skippedLastFrame = false;
-
-                    if ((hls) &&
-                        (avfw->GetFramesWritten()) &&
-                        (hlsSegmentFrames > hlsSegmentSize) &&
-                        (avfw->NextFrameIsKeyFrame()))
-                    {
-                        hls->AddSegment();
-                        avfw->ReOpen(hls->GetCurrentFilename());
-
-                        if (avfw2)
-                            avfw2->ReOpen(hls->GetCurrentFilename(true));
-
-                        hlsSegmentFrames = 0;
-                    }
-
-                    if (avfw->WriteVideoFrame(&frame) > 0)
-                    {
-                        lastWrittenTime = frame.timecode;
-                        if (hls)
-                            ++hlsSegmentFrames;
-                    }
-
-                }
-            }
-            else
-            {
-                if (forceKeyFrames)
-                    nvr->WriteVideo(&frame, true, true);
-                else
-                    nvr->WriteVideo(&frame);
-                lastWrittenTime = frame.timecode;
-            }
         }
         if (MythDate::current() > statustime)
         {

