From 1281d8cb80a014ea029d3805c5028e2f8f08c6c7 Mon Sep 17 00:00:00 2001 From: Rato Date: Sat, 22 Jul 2017 08:28:03 +0200 Subject: [PATCH 1/2] Fix for #482: VP9 video codec. Plus additional common audio and video codecs. --- HISTORY.rst | 7 +++ docs/properties.rst | 6 +-- guessit/rules/properties/audio_codec.py | 6 ++- guessit/rules/properties/language.py | 2 +- guessit/rules/properties/video_codec.py | 12 +++-- guessit/test/episodes.yml | 33 +++++++++++++ guessit/test/movies.yml | 65 +++++++++++++++++++++++++ guessit/test/rules/audio_codec.yml | 10 ++++ guessit/test/rules/video_codec.yml | 21 +++++++- 9 files changed, 152 insertions(+), 10 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 7afea59..3c7627f 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -102,6 +102,13 @@ History - Added `audio_video_rate` as new possible property. - Added `video_video_rate` as new possible property. - Added `disc` as a new possible property. +- Added `H.263` as new `video_codec` possible value. +- Added `VP7` as new `video_codec` possible value. +- Added `VP8` as new `video_codec` possible value. +- Added `VP9` as new `video_codec` possible value. +- Added `Vorbis` as new `audio_codec` possible value. +- Added `PCM` as new `audio_codec` possible value. +- Added `LPCM` as new `audio_codec` possible value. 2.1.4 (2017-06-01) ------------------ diff --git a/docs/properties.rst b/docs/properties.rst index cfdfdf6..0bc8c98 100644 --- a/docs/properties.rst +++ b/docs/properties.rst @@ -162,7 +162,7 @@ Video properties Codec used for video. - - ``DivX``, ``H.264``, ``H.265``, ``MPEG-2``, ``RealVideo``, ``Xvid`` + - ``DivX``, ``H.263``, ``H.264``, ``H.265``, ``MPEG-2``, ``RealVideo``, ``VP7``, ``VP8``, ``VP9``,``Xvid`` - **video_profile** @@ -206,8 +206,8 @@ Audio properties Codec used for audio. - - ``AAC``, ``Dolby Atmos``, ``Dolby Digital``, ``Dolby Digital Plus``, ``Dolby TrueHD``, ``DTS``, ``FLAC``, ``MP3``, - ``Opus`` + - ``AAC``, ``Dolby Atmos``, ``Dolby Digital``, ``Dolby Digital Plus``, ``Dolby TrueHD``, ``DTS``, ``FLAC``, ``LPCM``, + ``MP3``, ``Opus``, ``PCM``, ``Vorbis`` - **audio_profile** diff --git a/guessit/rules/properties/audio_codec.py b/guessit/rules/properties/audio_codec.py index c298236..011e7e4 100644 --- a/guessit/rules/properties/audio_codec.py +++ b/guessit/rules/properties/audio_codec.py @@ -45,9 +45,13 @@ def audio_codec(): rebulk.string('EAC3', 'DDP', 'DD+', value='Dolby Digital Plus') rebulk.string("Flac", value="FLAC") rebulk.string("DTS", value="DTS") - rebulk.regex('DTS-?HD', value='DTS-HD') + rebulk.regex('DTS-?HD', 'DTS(?=-?MA)', value='DTS-HD', + conflict_solver=lambda match, other: other if other.name == 'audio_codec' else '__default__') rebulk.regex('True-?HD', value='Dolby TrueHD') rebulk.string('Opus', value='Opus') + rebulk.string('Vorbis', value='Vorbis') + rebulk.string('PCM', value='PCM') + rebulk.string('LPCM', value='LPCM') rebulk.defaults(name='audio_profile') rebulk.string('MA', value='Master Audio', tags='DTS-HD') diff --git a/guessit/rules/properties/language.py b/guessit/rules/properties/language.py index cd0b3ca..4060242 100644 --- a/guessit/rules/properties/language.py +++ b/guessit/rules/properties/language.py @@ -111,7 +111,7 @@ def length_comparator(value): babelfish.language_converters['guessit'] = GuessitConverter() -subtitle_both = ['sub', 'subs', 'subbed', 'custom subbed', 'custom subs', +subtitle_both = ['sub', 'subs', 'esub', 'esubs', 'subbed', 'custom subbed', 'custom subs', 'custom sub', 'customsubbed', 'customsubs', 'customsub', 'soft subtitles', 'soft subs'] subtitle_prefixes = sorted(subtitle_both + diff --git a/guessit/rules/properties/video_codec.py b/guessit/rules/properties/video_codec.py index 4d5ae20..23b241d 100644 --- a/guessit/rules/properties/video_codec.py +++ b/guessit/rules/properties/video_codec.py @@ -21,11 +21,15 @@ def video_codec(): rebulk.defaults(name="video_codec", tags=['source-suffix', 'streaming_service.suffix']) rebulk.regex(r'Rv\d{2}', value='RealVideo') - rebulk.regex('Mpeg2', value='MPEG-2') - rebulk.regex("DVDivX", "DivX", value="DivX") - rebulk.regex('XviD', value='Xvid') + rebulk.regex('Mpe?g-?2', '[hx]-?262', value='MPEG-2') + rebulk.string("DVDivX", "DivX", value="DivX") + rebulk.string('XviD', value='Xvid') rebulk.regex('VC-?1', value='VC-1') - rebulk.regex('[hx]-?264(?:-?AVC(?:HD)?)?(?:-?SC)?', 'MPEG-?4(?:-?AVC(?:HD)?)', 'AVC(?:HD)?(?:-?SC)?', value='H.264') + rebulk.string('VP7', value='VP7') + rebulk.string('VP8', 'VP80', value='VP8') + rebulk.string('VP9', value='VP9') + rebulk.regex('[hx]-?263', value='H.263') + rebulk.regex('[hx]-?264(?:-?AVC(?:HD)?)?', 'MPEG-?4(?:-?AVC(?:HD)?)', 'AVC(?:HD)?', value='H.264') rebulk.regex('[hx]-?265(?:-?HEVC)?', 'HEVC', value='H.265') rebulk.regex('(?Phevc)(?P10)', value={'video_codec': 'H.265', 'color_depth': '10-bit'}, tags=['video-codec-suffix'], children=True) diff --git a/guessit/test/episodes.yml b/guessit/test/episodes.yml index 34b5ca5..c041815 100644 --- a/guessit/test/episodes.yml +++ b/guessit/test/episodes.yml @@ -4387,3 +4387,36 @@ source: Blu-ray release_group: COJONUDO type: episode + +? The Simpsons - Season 2 Complete [DVDRIP VP7 KEGGERMAN +: title: The Simpsons + season: 2 + other: [Complete, Rip] + source: DVD + video_codec: VP7 + release_group: KEGGERMAN + type: episode + +? Barney & Friends_ Easy as ABC (Season 9_ Episode 15)_VP8_Vorbis_360p.webm +: title: Barney & Friends Easy as ABC + season: 9 + episode: 15 + video_codec: VP8 + audio_codec: Vorbis + screen_size: 360p + container: webm + type: episode + +? Victoria.S01.1080p.BluRay.HEVC.DTSMA.LPCM.PGS-OZM +: title: Victoria + season: 1 + screen_size: 1080p + source: Blu-ray + video_codec: H.265 + audio_codec: [DTS-HD, LPCM] + audio_profile: Master Audio + # Does it worth to add subtitle_format? Such rare case + # subtitle_format: PGS + # release_group: OZM + type: episode + diff --git a/guessit/test/movies.yml b/guessit/test/movies.yml index 3065002..2b0f16e 100644 --- a/guessit/test/movies.yml +++ b/guessit/test/movies.yml @@ -1546,3 +1546,68 @@ video_codec: H.264 container: mkv type: movie + +? FROZEN [2010] LiMiTED DVDRip H262 AAC[ ENG SUBS]-MANTESH +: title: FROZEN + year: 2010 + edition: Limited + source: DVD + other: Rip + video_codec: MPEG-2 + audio_codec: AAC + subtitle_language: english + release_group: MANTESH + type: movie + +? Family.Katta.2016.1080p.WEB-DL.H263.DD5.1.ESub-DDR +: title: Family Katta + year: 2016 + screen_size: 1080p + source: Web + video_codec: H.263 + audio_codec: Dolby Digital + audio_channels: '5.1' + subtitle_language: und + release_group: DDR + type: movie + +? Bad Boys 2 1080i.mpg2.rus.eng.ts +: title: Bad Boys 2 + screen_size: 1080i + video_codec: MPEG-2 + language: [russian, english] + container: ts + type: movie + +? Alien.Director.Cut.Ita.Eng.VP9.Opus.AlphaBot.webm +: title: Alien + edition: Director's Cut + language: [english, italian] + video_codec: VP9 + audio_codec: Opus + release_group: AlphaBot + container: webm + type: movie + +? The.Stranger.1946.US.(Kino.Classics).Bluray.1080p.LPCM.DD-2.0.x264-Grym@BTNET +: title: The Stranger + year: 1946 + country: US + source: Blu-ray + screen_size: 1080p + audio_codec: [LPCM, Dolby Digital] + audio_channels: '2.0' + video_codec: H.264 + release_group: Grym@BTNET + type: movie + +? X-Men.Apocalypse.2016.complete.hdts.pcm.TrueFrench-Scarface45.avi +: title: X-Men Apocalypse + year: 2016 + other: Complete + source: HD Telesync + audio_codec: PCM + language: french + release_group: Scarface45 + container: avi + type: movie diff --git a/guessit/test/rules/audio_codec.yml b/guessit/test/rules/audio_codec.yml index 90992e6..cbb6fc8 100644 --- a/guessit/test/rules/audio_codec.yml +++ b/guessit/test/rules/audio_codec.yml @@ -49,6 +49,7 @@ : audio_codec: DTS-HD ? +DTS-HDma +? +DTSMA : audio_codec: DTS-HD audio_profile: Master Audio @@ -119,3 +120,12 @@ ? OPUS : audio_codec: Opus + +? Vorbis +: audio_codec: Vorbis + +? PCM +: audio_codec: PCM + +? LPCM +: audio_codec: LPCM diff --git a/guessit/test/rules/video_codec.yml b/guessit/test/rules/video_codec.yml index 56ea116..c37c1a6 100644 --- a/guessit/test/rules/video_codec.yml +++ b/guessit/test/rules/video_codec.yml @@ -10,8 +10,12 @@ ? mpeg2 ? MPEG2 +? MPEG-2 +? mpg2 +? H262 +? H.262 +? x262 ? -mpeg -? -mpeg 2 # Not sure if we should ignore this one ... ? -xmpeg2 ? -mpeg2x : video_codec: MPEG-2 @@ -28,6 +32,11 @@ ? -x vid : video_codec: Xvid +? h263 +? x263 +? h.263 +: video_codec: H.263 + ? h264 ? x264 ? h.264 @@ -66,3 +75,13 @@ ? VC1 ? VC-1 : video_codec: VC-1 + +? VP7 +: video_codec: VP7 + +? VP8 +? VP80 +: video_codec: VP8 + +? VP9 +: video_codec: VP9 From 66f4d19888ba0f8658ba2283296c369f3488c88c Mon Sep 17 00:00:00 2001 From: Rato Date: Sat, 2 Dec 2017 22:26:41 +0100 Subject: [PATCH 2/2] Fixing failing tests --- guessit/rules/properties/release_group.py | 3 +++ guessit/rules/properties/video_codec.py | 2 +- guessit/test/rules/episodes.yml | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/guessit/rules/properties/release_group.py b/guessit/rules/properties/release_group.py index ba23894..008f2b6 100644 --- a/guessit/rules/properties/release_group.py +++ b/guessit/rules/properties/release_group.py @@ -94,6 +94,9 @@ class DashSeparatedReleaseGroup(Rule): Whether a candidate is a valid release group. """ if not at_end: + if len(candidate.value) <= 1: + return False + if matches.markers.at_match(candidate, predicate=lambda m: m.name == 'group'): return False diff --git a/guessit/rules/properties/video_codec.py b/guessit/rules/properties/video_codec.py index 23b241d..d8b7aa2 100644 --- a/guessit/rules/properties/video_codec.py +++ b/guessit/rules/properties/video_codec.py @@ -29,7 +29,7 @@ def video_codec(): rebulk.string('VP8', 'VP80', value='VP8') rebulk.string('VP9', value='VP9') rebulk.regex('[hx]-?263', value='H.263') - rebulk.regex('[hx]-?264(?:-?AVC(?:HD)?)?', 'MPEG-?4(?:-?AVC(?:HD)?)', 'AVC(?:HD)?', value='H.264') + rebulk.regex('[hx]-?264(?:-?AVC(?:HD)?)?(?:-?SC)?', 'MPEG-?4(?:-?AVC(?:HD)?)', 'AVC(?:HD)?(?:-?SC)?', value='H.264') rebulk.regex('[hx]-?265(?:-?HEVC)?', 'HEVC', value='H.265') rebulk.regex('(?Phevc)(?P10)', value={'video_codec': 'H.265', 'color_depth': '10-bit'}, tags=['video-codec-suffix'], children=True) diff --git a/guessit/test/rules/episodes.yml b/guessit/test/rules/episodes.yml index a5e5ee4..98325fa 100644 --- a/guessit/test/rules/episodes.yml +++ b/guessit/test/rules/episodes.yml @@ -272,7 +272,7 @@ ? Episode 71 : episode: 71 -? S01D02.3-5 +? S01D02.3-5-GROUP : disc: [2, 3, 4, 5] ? S01D02&4-6&8