text: import argparse
  import logging
  import os
  import sys
  
  import av
  from tests.common import asset, sandboxed
  
  
  arg_parser = argparse.ArgumentParser()
  arg_parser.add_argument('-v', '--verbose', action='store_true')
  arg_parser.add_argument('input', nargs=1)
  args = arg_parser.parse_args()
  
  input_file = av.open(args.input[0])
  input_video_stream = None # next((s for s in input_file.streams if s.type == 'video'), None)
  input_audio_stream = next((s for s in input_file.streams if s.type == 'audio'), None)
  
  # open output file
  output_file_path = sandboxed('encoded-' + os.path.basename(args.input[0]))
  output_file = av.open(output_file_path, 'w')
  output_video_stream = output_file.add_stream("mpeg4", 24) if input_video_stream else None
  output_audio_stream = output_file.add_stream("mp3") if input_audio_stream else None
  
  
  frame_count = 0
  
  
  for packet in input_file.demux([s for s in (input_video_stream, input_audio_stream) if s]):
  
  
      if args.verbose:
          print 'in ', packet
  
      for frame in packet.decode():
          
          if args.verbose:
              print '\t%s' % frame
  
          if packet.stream.type == b'video':
              if frame_count % 10 == 0:
                  if frame_count:
                      print
                  print ('%03d:' % frame_count), 
              sys.stdout.write('.')
              sys.stdout.flush()
  
              frame_count += 1
  
          # Signal to generate it's own timestamps.
          frame.pts = None
          
          stream = output_audio_stream if packet.stream.type == b'audio' else output_video_stream
          output_packets = [output_audio_stream.encode(frame)]
          while output_packets[-1]:
              output_packets.append(output_audio_stream.encode(None))
              
          for p in output_packets:
              if p:
                  if args.verbose:
                      print 'OUT', p
                  output_file.mux(p)
          
      if frame_count >= 100:
          break
  
  print '-' * 78
  
  # Finally we need to flush out the frames that are buffered in the encoder.
  # To do that we simply call encode with no args until we get a None returned
  if output_audio_stream:
      while True:
          output_packet = output_audio_stream.encode(None)
          if output_packet:
              if args.verbose:
                  print '<<<', output_packet
              output_file.mux(output_packet)
          else:
              break
  
  if output_video_stream:
      while True:
          output_packet = output_video_stream.encode(None)
          if output_packet:
              if args.verbose:
                  print '<<<', output_packet
              output_file.mux(output_packet)
          else:
              break
  
  output_file.close()
  
  