/tests/test_ffmpeg.py

http://echo-nest-remix.googlecode.com/ · Python · 71 lines · 53 code · 0 blank · 18 comment · 3 complexity · 92da86e92b969fa1d75a5735c82e428d MD5 · raw file

  1. #!/usr/bin/env python
  2. # encoding: utf-8
  3. """
  4. Test that an Echo-Nest-Remix-compatible version of ffmpeg is installed.
  5. Run the tests like this:
  6. python test_ffmpeg.py
  7. If you want to test that your version of ffmpeg can handle a particular file,
  8. (like if you're planning on analyzing OggVorbis files and want to make sure
  9. your ffmpeg can decode them), run like this:
  10. python test_ffmpeg.py my_crazy_audio_file.mp47
  11. """
  12. import os
  13. import sys
  14. import tempfile
  15. from echonest import audio
  16. def main():
  17. """Run some tests"""
  18. if len(sys.argv) > 1:
  19. input_filename = sys.argv[1]
  20. else:
  21. input_filename = 'input_file.mp3'
  22. test_en_ffmpeg_exists(input_filename)
  23. test_round_trip(input_filename)
  24. def test_en_ffmpeg_exists(input_filename):
  25. """Don't do any conversion, just see if en-ffmpeg, the command used
  26. by Remix, is installed."""
  27. result = audio.ffmpeg(input_filename, overwrite=False, verbose=True)
  28. audio.ffmpeg_error_check(result[1])
  29. def test_round_trip(input_filename):
  30. """Convert the input file to a wav file, then back to an mp3 file."""
  31. result = audio.ffmpeg(input_filename, overwrite=False, verbose=True)
  32. audio.ffmpeg_error_check(result[1])
  33. sampleRate, numChannels = audio.settings_from_ffmpeg(result[1])
  34. temp_file_handle, temp_filename = tempfile.mkstemp(".wav")
  35. result = audio.ffmpeg(input_filename, temp_filename, overwrite=True,
  36. numChannels=numChannels, sampleRate=sampleRate, verbose=True)
  37. audio.ffmpeg_error_check(result[1])
  38. temp_filesize = os.path.getsize(temp_filename)
  39. print 'temp file size: %s bytes' % temp_filesize
  40. output_filename = 'output_file.mp3'
  41. result = audio.ffmpeg(temp_filename, output_filename, overwrite=True,
  42. numChannels=numChannels, sampleRate=sampleRate, verbose=True)
  43. audio.ffmpeg_error_check(result[1])
  44. if temp_file_handle is not None:
  45. os.close(temp_file_handle)
  46. os.remove(temp_filename)
  47. input_filesize = os.path.getsize(input_filename)
  48. output_filesize = os.path.getsize(output_filename)
  49. difference = output_filesize - input_filesize
  50. args = (input_filesize, output_filesize, difference)
  51. print 'input file size: %s bytes | output file size: %s bytes | difference: %s bytes ' % args
  52. if abs(int(difference)) > 1000:
  53. print 'input and output files are different sizes. something might be wrong with your ffmpeg.'
  54. else:
  55. print 'Ok!'
  56. if __name__ == '__main__':
  57. main()