diff --git a/ffmpeg.c b/ffmpeg.c
index 2f8cc0ef285f817df0e0bbaac1d507b17bfcaab9..a5c102647fcb9aae5cab59e29452a584e175c757 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -666,6 +666,7 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
         main_return_code = 1;
         close_all_output_streams(ost, MUXER_FINISHED | ENCODER_FINISHED, ENCODER_FINISHED);
     }
+    av_free_packet(pkt);
 }
 
 static void close_output_stream(OutputStream *ost)
@@ -743,8 +744,6 @@ static void do_audio_out(AVFormatContext *s, OutputStream *ost,
         }
 
         write_frame(s, &pkt, ost);
-
-        av_free_packet(&pkt);
     }
 }
 
@@ -1037,7 +1036,6 @@ static void do_video_out(AVFormatContext *s,
 
             frame_size = pkt.size;
             write_frame(s, &pkt, ost);
-            av_free_packet(&pkt);
 
             /* if two pass, output log */
             if (ost->logfile && enc->stats_out) {