[pitivi] Use quicktime instead of matroska as proxy container



commit 64b00ad051afcaea940e5e46e536308f6c5f7641
Author: Thibault Saunier <tsaunier igalia com>
Date:   Tue Mar 3 17:09:33 2020 -0300

    Use quicktime instead of matroska as proxy container
    
    Quicktime is more used in the industry and GStreamer better handles
    it and allows us to be frame accurate, matroska has issue with
    frame accuracy seeks.

 .gitignore                           |  4 ++--
 data/gstpresets/jpeg-raw-in-qt.gep   | 26 ++++++++++++++++++++++++++
 data/gstpresets/prores-raw-in-qt.gep | 24 ++++++++++++++++++++++++
 pitivi/utils/proxy.py                |  8 ++++----
 tests/test_medialibrary.py           |  4 ++--
 tests/test_project.py                | 12 ++++++------
 tests/test_proxy.py                  | 12 ++++++------
 7 files changed, 70 insertions(+), 20 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index c782e782..5e5b55a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,8 +17,8 @@ bin/pitivi
 pitivi/configure.py
 *__pycache__*
 
-# Generated by make check
-tests/samples/*.proxy.mkv
+# Generated when using the samples in manual tests
+tests/samples/*.proxy.mov
 
 # Generated by make html
 help/html/
diff --git a/data/gstpresets/jpeg-raw-in-qt.gep b/data/gstpresets/jpeg-raw-in-qt.gep
new file mode 100644
index 00000000..bf3a86de
--- /dev/null
+++ b/data/gstpresets/jpeg-raw-in-qt.gep
@@ -0,0 +1,26 @@
+[GStreamer Encoding Target]
+name=matroska
+category=device
+description=Standard config for jpeg and raw audio in quicktime
+
+[profile-default]
+name=default
+type=container
+description[c]=Quicktime muxer with default configs
+format=video/quicktime
+
+[streamprofile-raw]
+parent=default
+type=audio
+format=audio/x-raw
+presence=0
+
+[streamprofile-jpeg]
+parent=default
+type=video
+format=image/jpeg
+presence=0
+pass=0
+variableframerate=false
+preset=Quality High
+
diff --git a/data/gstpresets/prores-raw-in-qt.gep b/data/gstpresets/prores-raw-in-qt.gep
new file mode 100644
index 00000000..4081291d
--- /dev/null
+++ b/data/gstpresets/prores-raw-in-qt.gep
@@ -0,0 +1,24 @@
+[GStreamer Encoding Target]
+name=qtproresraw
+category=device
+description=Standard config for prores and raw audio in quicktime
+
+[profile-default]
+name=default
+type=container
+description[c]=Quicktime muxer with default configs
+format=video/quicktime
+
+[streamprofile-raw]
+parent=default
+type=audio
+format=audio/x-raw
+presence=0
+
+[streamprofile-prores]
+parent=default
+type=video
+format=video/x-prores
+presence=0
+pass=0
+variableframerate=false
\ No newline at end of file
diff --git a/pitivi/utils/proxy.py b/pitivi/utils/proxy.py
index 54dde5fd..ed510e9e 100644
--- a/pitivi/utils/proxy.py
+++ b/pitivi/utils/proxy.py
@@ -90,8 +90,8 @@ GlobalSettings.add_config_option("default_scaled_proxy_height",
                                  default=1080,
                                  notify=True)
 
-ENCODING_FORMAT_PRORES = "prores-raw-in-matroska.gep"
-ENCODING_FORMAT_JPEG = "jpeg-raw-in-matroska.gep"
+ENCODING_FORMAT_PRORES = "prores-raw-in-qt.gep"
+ENCODING_FORMAT_JPEG = "jpeg-raw-in-qt.gep"
 
 
 def create_encoding_profile_simple(container_caps, audio_caps, video_caps):
@@ -139,8 +139,8 @@ class ProxyManager(GObject.Object, Loggable):
         a = GstPbutils.EncodingAudioProfile.new(Gst.Caps(audio), None, None, 0)
         WHITELIST_FORMATS.append(a)
 
-    hq_proxy_extension = "proxy.mkv"
-    scaled_proxy_extension = "scaledproxy.mkv"
+    hq_proxy_extension = "proxy.mov"
+    scaled_proxy_extension = "scaledproxy.mov"
     # Suffix for filenames of proxies being created.
     part_suffix = ".part"
 
diff --git a/tests/test_medialibrary.py b/tests/test_medialibrary.py
index b2a505d5..38f7261c 100644
--- a/tests/test_medialibrary.py
+++ b/tests/test_medialibrary.py
@@ -195,11 +195,11 @@ class TestMediaLibrary(BaseTestMediaLibrary):
         mlib = self.medialibrary
 
         # Test HQ Proxies are filtered
-        mock_filter.uri = "file:///home/user/Videos/video.mp4.2360382.proxy.mkv"
+        mock_filter.uri = "file:///home/user/Videos/video.mp4.2360382.proxy.mov"
         self.assertFalse(mlib._filter_unsupported(mock_filter))
 
         # Test Scaled Proxies are filtered
-        mock_filter.uri = "file:///home/user/Videos/video.mp4.2360382.300x300.scaledproxy.mkv"
+        mock_filter.uri = "file:///home/user/Videos/video.mp4.2360382.300x300.scaledproxy.mov"
         self.assertFalse(mlib._filter_unsupported(mock_filter))
 
     def stop_using_proxies(self, delete_proxies=False):
diff --git a/tests/test_project.py b/tests/test_project.py
index 87862c90..c3537b8a 100644
--- a/tests/test_project.py
+++ b/tests/test_project.py
@@ -321,13 +321,13 @@ class TestProjectLoading(common.TestCase):
     def load_project_with_missing_proxy(self):
         """Loads a project with missing proxies."""
         uris = [common.get_sample_uri("1sec_simpsons_trailer.mp4")]
-        proxy_uri = uris[0] + ".232417.proxy.mkv"
+        proxy_uri = uris[0] + ".232417.proxy.mov"
         xges = r"""<ges version='0.3'>
   <project properties='properties;' metadatas='metadatas, name=(string)&quot;New\ Project&quot;, 
author=(string)Unknown, render-scale=(double)100;'>
     <encoding-profiles>
     </encoding-profiles>
     <ressources>
-      <asset id='%(uri)s' extractable-type-name='GESUriClip' properties='properties, 
supported-formats=(int)6, duration=(guint64)1228000000;' metadatas='metadatas, 
audio-codec=(string)&quot;MPEG-4\ AAC\ audio&quot;, maximum-bitrate=(uint)130625, bitrate=(uint)130625, 
datetime=(datetime)2007-02-19T05:03:04Z, encoder=(string)Lavf54.6.100, container-format=(string)&quot;ISO\ 
MP4/M4A&quot;, video-codec=(string)&quot;H.264\ /\ AVC&quot;, file-size=(guint64)232417;'  
proxy-id='file:///home/thiblahute/devel/pitivi/flatpak/pitivi/tests/samples/1sec_simpsons_trailer.mp4.232417.proxy.mkv'
 />
+      <asset id='%(uri)s' extractable-type-name='GESUriClip' properties='properties, 
supported-formats=(int)6, duration=(guint64)1228000000;' metadatas='metadatas, 
audio-codec=(string)&quot;MPEG-4\ AAC\ audio&quot;, maximum-bitrate=(uint)130625, bitrate=(uint)130625, 
datetime=(datetime)2007-02-19T05:03:04Z, encoder=(string)Lavf54.6.100, container-format=(string)&quot;ISO\ 
MP4/M4A&quot;, video-codec=(string)&quot;H.264\ /\ AVC&quot;, file-size=(guint64)232417;'  
proxy-id='file:///home/thiblahute/devel/pitivi/flatpak/pitivi/tests/samples/1sec_simpsons_trailer.mp4.232417.proxy.mov'
 />
       <asset id='%(proxy_uri)s' extractable-type-name='GESUriClip' properties='properties, 
supported-formats=(int)6, duration=(guint64)1228020833;' metadatas='metadatas, 
container-format=(string)Matroska, audio-codec=(string)Opus, language-code=(string)en, 
encoder=(string)Lavf54.6.100, bitrate=(uint)64000, video-codec=(string)&quot;Motion\ JPEG&quot;, 
file-size=(guint64)4695434;' />
     </ressources>
     <timeline properties='properties, auto-transition=(boolean)true, snapping-distance=(guint64)0;' 
metadatas='metadatas, duration=(guint64)0;'>
@@ -491,10 +491,10 @@ class TestProjectLoading(common.TestCase):
         proj_uri = self.create_project_file_from_xges(r"""<ges version='0.3'>
   <project properties='properties;' metadatas='metadatas, name=(string)&quot;New\ Project&quot;, 
author=(string)Unknown, render-scale=(double)100, format-version=(string)0.3;'>
     <ressources>
-      <asset id='file:///nop/1sec_simpsons_trailer.mp4' extractable-type-name='GESUriClip' 
properties='properties, supported-formats=(int)6, duration=(guint64)1228000000;' metadatas='metadatas, 
audio-codec=(string)&quot;MPEG-4\ AAC\ audio&quot;, maximum-bitrate=(uint)130625, bitrate=(uint)130625, 
datetime=(datetime)2007-02-19T05:03:04Z, encoder=(string)Lavf54.6.100, container-format=(string)&quot;ISO\ 
MP4/M4A&quot;, video-codec=(string)&quot;H.264\ /\ AVC&quot;, file-size=(guint64)232417;'  
proxy-id='file:///nop/1sec_simpsons_trailer.mp4.232417.proxy.mkv' />
-      <asset id='file:///nop/tears_of_steel.webm' extractable-type-name='GESUriClip' properties='properties, 
supported-formats=(int)6, duration=(guint64)2003000000;' metadatas='metadatas, 
container-format=(string)Matroska, language-code=(string)und, application-name=(string)Lavc56.60.100, 
encoder=(string)&quot;Xiph.Org\ libVorbis\ I\ 20150105\ 
\(\342\233\204\342\233\204\342\233\204\342\233\204\)&quot;, encoder-version=(uint)0, 
audio-codec=(string)Vorbis, nominal-bitrate=(uint)80000, bitrate=(uint)80000, video-codec=(string)&quot;VP8\ 
video&quot;, file-size=(guint64)223340;' proxy-id='file:///nop/tears_of_steel.webm.223340.proxy.mkv'/>
-      <asset id='file:///nop/1sec_simpsons_trailer.mp4.232417.proxy.mkv' extractable-type-name='GESUriClip' 
properties='properties, supported-formats=(int)6, duration=(guint64)1228020833;' metadatas='metadatas, 
container-format=(string)Matroska, audio-codec=(string)Opus, language-code=(string)en, 
encoder=(string)Lavf54.6.100, bitrate=(uint)64000, video-codec=(string)&quot;Motion\ JPEG&quot;, 
file-size=(guint64)4694708;' />
-      <asset id='file:///nop/tears_of_steel.webm.223340.proxy.mkv' extractable-type-name='GESUriClip' 
properties='properties, supported-formats=(int)6, duration=(guint64)2003000000;' metadatas='metadatas, 
container-format=(string)Matroska, language-code=(string)und, application-name=(string)Lavc56.60.100, 
encoder=(string)&quot;Xiph.Org\ libVorbis\ I\ 20150105\ 
\(\342\233\204\342\233\204\342\233\204\342\233\204\)&quot;, encoder-version=(uint)0, 
audio-codec=(string)Vorbis, nominal-bitrate=(uint)80000, bitrate=(uint)80000, video-codec=(string)&quot;VP8\ 
video&quot;, file-size=(guint64)223340;' />
+      <asset id='file:///nop/1sec_simpsons_trailer.mp4' extractable-type-name='GESUriClip' 
properties='properties, supported-formats=(int)6, duration=(guint64)1228000000;' metadatas='metadatas, 
audio-codec=(string)&quot;MPEG-4\ AAC\ audio&quot;, maximum-bitrate=(uint)130625, bitrate=(uint)130625, 
datetime=(datetime)2007-02-19T05:03:04Z, encoder=(string)Lavf54.6.100, container-format=(string)&quot;ISO\ 
MP4/M4A&quot;, video-codec=(string)&quot;H.264\ /\ AVC&quot;, file-size=(guint64)232417;'  
proxy-id='file:///nop/1sec_simpsons_trailer.mp4.232417.proxy.mov' />
+      <asset id='file:///nop/tears_of_steel.webm' extractable-type-name='GESUriClip' properties='properties, 
supported-formats=(int)6, duration=(guint64)2003000000;' metadatas='metadatas, 
container-format=(string)Matroska, language-code=(string)und, application-name=(string)Lavc56.60.100, 
encoder=(string)&quot;Xiph.Org\ libVorbis\ I\ 20150105\ 
\(\342\233\204\342\233\204\342\233\204\342\233\204\)&quot;, encoder-version=(uint)0, 
audio-codec=(string)Vorbis, nominal-bitrate=(uint)80000, bitrate=(uint)80000, video-codec=(string)&quot;VP8\ 
video&quot;, file-size=(guint64)223340;' proxy-id='file:///nop/tears_of_steel.webm.223340.proxy.mov'/>
+      <asset id='file:///nop/1sec_simpsons_trailer.mp4.232417.proxy.mov' extractable-type-name='GESUriClip' 
properties='properties, supported-formats=(int)6, duration=(guint64)1228020833;' metadatas='metadatas, 
container-format=(string)Matroska, audio-codec=(string)Opus, language-code=(string)en, 
encoder=(string)Lavf54.6.100, bitrate=(uint)64000, video-codec=(string)&quot;Motion\ JPEG&quot;, 
file-size=(guint64)4694708;' />
+      <asset id='file:///nop/tears_of_steel.webm.223340.proxy.mov' extractable-type-name='GESUriClip' 
properties='properties, supported-formats=(int)6, duration=(guint64)2003000000;' metadatas='metadatas, 
container-format=(string)Matroska, language-code=(string)und, application-name=(string)Lavc56.60.100, 
encoder=(string)&quot;Xiph.Org\ libVorbis\ I\ 20150105\ 
\(\342\233\204\342\233\204\342\233\204\342\233\204\)&quot;, encoder-version=(uint)0, 
audio-codec=(string)Vorbis, nominal-bitrate=(uint)80000, bitrate=(uint)80000, video-codec=(string)&quot;VP8\ 
video&quot;, file-size=(guint64)223340;' />
     </ressources>
 </project>
 </ges>""")
diff --git a/tests/test_proxy.py b/tests/test_proxy.py
index 9a1d2603..9f88cee6 100644
--- a/tests/test_proxy.py
+++ b/tests/test_proxy.py
@@ -63,13 +63,13 @@ class TestProxyManager(common.TestCase):
 
     def test_get_target_uri(self):
         """Checks the get_target_uri method."""
-        self._check_get_target_uri("file:///home/filename.ext.size.scaled_res.scaledproxy.mkv",
+        self._check_get_target_uri("file:///home/filename.ext.size.scaled_res.scaledproxy.mov",
                                    "file:///home/filename.ext")
-        self._check_get_target_uri("file:///home/filename.ext.size.proxy.mkv",
+        self._check_get_target_uri("file:///home/filename.ext.size.proxy.mov",
                                    "file:///home/filename.ext")
-        self._check_get_target_uri("file:///home/file.name.mp4.1927006.1280x720.scaledproxy.mkv",
+        self._check_get_target_uri("file:///home/file.name.mp4.1927006.1280x720.scaledproxy.mov",
                                    "file:///home/file.name.mp4")
-        self._check_get_target_uri("file:///home/file.name.mp4.1927006.proxy.mkv",
+        self._check_get_target_uri("file:///home/file.name.mp4.1927006.proxy.mov",
                                    "file:///home/file.name.mp4")
 
     def _check_get_proxy_uri(self, asset_uri, expected_uri, size=10, scaled=False, scaled_res=(1280, 720)):
@@ -90,9 +90,9 @@ class TestProxyManager(common.TestCase):
     def test_get_proxy_uri(self):
         """Checks the get_proxy_uri method."""
         self._check_get_proxy_uri("file:///home/file.name.mp4",
-                                  "file:///home/file.name.mp4.10.proxy.mkv")
+                                  "file:///home/file.name.mp4.10.proxy.mov")
         self._check_get_proxy_uri("file:///home/file.name.mp4",
-                                  "file:///home/file.name.mp4.10.1280x720.scaledproxy.mkv",
+                                  "file:///home/file.name.mp4.10.1280x720.scaledproxy.mov",
                                   scaled=True)
 
     def test_asset_matches_target_res(self):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]