diff --git a/src/devedeng/avprobe.py b/src/devedeng/avprobe.py index c8a4d7f..ed1d05f 100644 --- a/src/devedeng/avprobe.py +++ b/src/devedeng/avprobe.py @@ -60,6 +60,22 @@ class avprobe(devedeng.avbase.avbase): """ processes a file, refered by the FILE_MOVIE movie object, and fills its main data (resolution, FPS, length...) """ + self.original_file_size = os.path.getsize(file_name) + + command_line = ["avprobe",file_name,"-of","json","-show_streams", "-loglevel", "quiet"] + + (stdout, stderr) = self.launch_process(command_line, False) + + try: + stdout2 = stdout.decode("utf-8") + except: + stdout2 = stdout.decode("latin1") + self.config.append_log("AVProbe JSON data: "+str(stdout2)) + return self.process_json(stdout2, file_name) + + + def process_json(self,stdout2,file_name): + self.audio_list=[] self.audio_streams = 0 self.video_list=[] @@ -73,16 +89,6 @@ class avprobe(devedeng.avbase.avbase): self.original_fps = 0 self.original_aspect_ratio = 0 - self.original_file_size = os.path.getsize(file_name) - - command_line = ["avprobe",file_name,"-of","json","-show_streams", "-loglevel", "quiet"] - - (stdout, stderr) = self.launch_process(command_line, False) - try: - stdout2 = stdout.decode("utf-8") - except: - stdout2 = stdout.decode("latin1") - try: video_data = json.loads(stdout2) except: @@ -137,7 +143,7 @@ class avprobe(devedeng.avbase.avbase): stdout2 = stdout.decode("utf-8") + "\n" + stderr.decode("utf-8") except: stdout2 = stdout.decode("latin1") + "\n" + stderr.decode("latin1") - + self.config.append_log("Using avprobe human readable format: "+str(stdout2)) for line in stdout2.split("\n"): line = line.strip() if line.startswith("Duration: "): diff --git a/src/devedeng/configuration_data.py b/src/devedeng/configuration_data.py index bd9126b..aac8856 100644 --- a/src/devedeng/configuration_data.py +++ b/src/devedeng/configuration_data.py @@ -46,6 +46,7 @@ class configuration(GObject.GObject): for line in proc_file: if (line.startswith("processor")): self.cores += 1 + proc_file.close() is_local = None self.log = "" diff --git a/src/devedeng/ffprobe.py b/src/devedeng/ffprobe.py index d51b489..1dd4c17 100644 --- a/src/devedeng/ffprobe.py +++ b/src/devedeng/ffprobe.py @@ -60,6 +60,22 @@ class ffprobe(devedeng.executor.executor): """ processes a file, refered by the FILE_MOVIE movie object, and fills its main data (resolution, FPS, length...) """ + self.original_file_size = os.path.getsize(file_name) + + command_line = ["ffprobe",file_name,"-of","json","-show_streams", "-loglevel", "quiet"] + + (stdout, stderr) = self.launch_process(command_line, False) + try: + stdout2 = stdout.decode("utf-8") + except: + stdout2 = stdout.decode("latin1") + + self.config.append_log("FFProbe JSON data: "+str(stdout2)) + return self.process_json(file_name,stdout2) + + + def process_json(self,file_name,stdout2): + self.audio_list=[] self.audio_streams = 0 self.video_list=[] @@ -73,16 +89,6 @@ class ffprobe(devedeng.executor.executor): self.original_fps = 0 self.original_aspect_ratio = 0 - self.original_file_size = os.path.getsize(file_name) - - command_line = ["ffprobe",file_name,"-of","json","-show_streams", "-loglevel", "quiet"] - - (stdout, stderr) = self.launch_process(command_line, False) - try: - stdout2 = stdout.decode("utf-8") - except: - stdout2 = stdout.decode("latin1") - try: video_data = json.loads(stdout2) except: @@ -137,7 +143,7 @@ class ffprobe(devedeng.executor.executor): stdout2 = stdout.decode("utf-8") + "\n" + stderr.decode("utf-8") except: stdout2 = stdout.decode("latin1") + "\n" + stderr.decode("latin1") - + self.config.append_log("Using ffprobe human readable format: "+str(stdout2)) for line in stdout2.split("\n"): line = line.strip() if line.startswith("Duration: "): diff --git a/src/unitests/test_avconv.py b/src/unitests/test_avconv.py index 6781911..8cd3222 100755 --- a/src/unitests/test_avconv.py +++ b/src/unitests/test_avconv.py @@ -1,11 +1,12 @@ import unittest import devedeng.avbase +import devedeng.avprobe class TestAVConv(unittest.TestCase): def test_ubuntu_14_04(self): c = devedeng.avbase.avbase() - c.check_version_txt("""avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers + text = """avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) avconv 9.18-6:9.18-0ubuntu0.14.04.1 libavutil 52. 3. 0 / 52. 3. 0 @@ -14,7 +15,9 @@ libavformat 54. 20. 4 / 54. 20. 4 libavdevice 53. 2. 0 / 53. 2. 0 libavfilter 3. 3. 0 / 3. 3. 0 libavresample 1. 0. 1 / 1. 0. 1 -libswscale 2. 1. 1 / 2. 1. 1""".split("\n")) +libswscale 2. 1. 1 / 2. 1. 1""".split("\n") + text.append(9) + c.check_version_txt(text) self.assertEqual(c.major_version, 9, "Detecting major version for Ubuntu 14.04's AVConv version") self.assertEqual(c.minor_version, 18, "Detecting minor version for Ubuntu 14.04's AVConv version") @@ -22,7 +25,7 @@ libswscale 2. 1. 1 / 2. 1. 1""".split("\n")) def test_ubuntu_14_10(self): c = devedeng.avbase.avbase() - c.check_version_txt("""avconv version 11-6:11-1, Copyright (c) 2000-2014 the Libav developers + text = """avconv version 11-6:11-1, Copyright (c) 2000-2014 the Libav developers built on Sep 26 2014 14:36:31 with gcc 4.9.1 (Ubuntu 4.9.1-15ubuntu1) avconv 11-6:11-1 libavutil 54. 3. 0 / 54. 3. 0 @@ -31,7 +34,9 @@ libavformat 56. 1. 0 / 56. 1. 0 libavdevice 55. 0. 0 / 55. 0. 0 libavfilter 5. 0. 0 / 5. 0. 0 libavresample 2. 1. 0 / 2. 1. 0 -libswscale 3. 0. 0 / 3. 0. 0""".split("\n")) +libswscale 3. 0. 0 / 3. 0. 0""".split("\n") + text.append(9) + c.check_version_txt(text) self.assertEqual(c.major_version, 11, "Detecting major version for Ubuntu 14.10's AVConv version") self.assertEqual(c.minor_version, 0, "Detecting minor version for Ubuntu 14.10's AVConv version") @@ -39,7 +44,7 @@ libswscale 3. 0. 0 / 3. 0. 0""".split("\n")) def test_ubuntu_15_04(self): c = devedeng.avbase.avbase() - c.check_version_txt("""avconv version 11.2-6:11.2-1, Copyright (c) 2000-2014 the Libav developers + text = """avconv version 11.2-6:11.2-1, Copyright (c) 2000-2014 the Libav developers built on Jan 18 2015 05:12:33 with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu2) avconv 11.2-6:11.2-1 libavutil 54. 3. 0 / 54. 3. 0 @@ -48,11 +53,122 @@ libavformat 56. 1. 0 / 56. 1. 0 libavdevice 55. 0. 0 / 55. 0. 0 libavfilter 5. 0. 0 / 5. 0. 0 libavresample 2. 1. 0 / 2. 1. 0 -libswscale 3. 0. 0 / 3. 0. 0""".split("\n")) +libswscale 3. 0. 0 / 3. 0. 0""".split("\n") + text.append(9) + c.check_version_txt(text) self.assertEqual(c.major_version, 11, "Detecting major version for Ubuntu 15.04's AVConv version") self.assertEqual(c.minor_version, 2, "Detecting minor version for Ubuntu 15.04's AVConv version") + def test_mkv1(self): + + + c = devedeng.avprobe.avprobe() + json_test = """{ + "streams": [ + { + "index": 0, + "codec_name": "aac", + "codec_long_name": "AAC (Advanced Audio Coding)", + "profile": "LC", + "codec_type": "audio", + "codec_time_base": "1/44100", + "codec_tag_string": "mp4a", + "codec_tag": "0x6134706d", + "sample_fmt": "fltp", + "sample_rate": "44100", + "channels": 2, + "channel_layout": "stereo", + "bits_per_sample": 0, + "r_frame_rate": "0/0", + "avg_frame_rate": "0/0", + "time_base": "1/44100", + "start_pts": 0, + "start_time": "0.000000", + "duration_ts": 3771392, + "duration": "85.519093", + "bit_rate": "115596", + "nb_frames": "3683", + "disposition": { + "default": 1, + "dub": 0, + "original": 0, + "comment": 0, + "lyrics": 0, + "karaoke": 0, + "forced": 0, + "hearing_impaired": 0, + "visual_impaired": 0, + "clean_effects": 0, + "attached_pic": 0 + }, + "tags": { + "creation_time": "2005-12-20 20:20:15", + "language": "eng", + "handler_name": "Apple Sound Media Handler" + } + }, + { + "index": 1, + "codec_name": "h264", + "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", + "profile": "Constrained Baseline", + "codec_type": "video", + "codec_time_base": "1/2000", + "codec_tag_string": "avc1", + "codec_tag": "0x31637661", + "width": 320, + "height": 240, + "has_b_frames": 0, + "sample_aspect_ratio": "0:1", + "display_aspect_ratio": "0:1", + "pix_fmt": "yuv420p", + "level": 13, + "color_range": "tv", + "color_space": "smpte170m", + "color_transfer": "bt709", + "color_primaries": "smpte170m", + "chroma_location": "topleft", + "is_avc": "1", + "nal_length_size": "4", + "r_frame_rate": "10/1", + "avg_frame_rate": "10/1", + "time_base": "1/1000", + "start_pts": 0, + "start_time": "0.000000", + "duration_ts": 85500, + "duration": "85.500000", + "bit_rate": "90795", + "bits_per_raw_sample": "8", + "nb_frames": "855", + "disposition": { + "default": 1, + "dub": 0, + "original": 0, + "comment": 0, + "lyrics": 0, + "karaoke": 0, + "forced": 0, + "hearing_impaired": 0, + "visual_impaired": 0, + "clean_effects": 0, + "attached_pic": 0 + }, + "tags": { + "creation_time": "2005-12-20 20:20:15", + "language": "eng", + "handler_name": "Apple Video Media Handler" + } + } + ] +}""" + retval = c.process_json(json_test,"filename.mkv") + self.assertFalse(retval) + self.assertEqual(c.audio_streams, 1, "Checking number of audio streams") + self.assertEqual(c.audio_list[0], 0, "Checking audio stream 1") + self.assertEqual(c.video_streams, 1, "Checking number of video streams") + self.assertEqual(c.video_list[0], 1, "Checking video stream 1") + if __name__ == '__main__': unittest.main() \ No newline at end of file