diff --git a/src/docs/HISTORY.md b/src/docs/HISTORY.md index f8f1167c6..675a5acb8 100644 --- a/src/docs/HISTORY.md +++ b/src/docs/HISTORY.md @@ -8,6 +8,9 @@ v1.2.6 - Added Portuguese, Italian and French translations done with AI. - Added top bar OCIO / Color toggle (Hotkey 't' by default). - Added lumma channel (Hotkey 'l' by default). +- Allowed saving .otio movie files as .mp4, .mov, etc. files. This allows + turning an .otio file into a new movie file. Useful when concatenating + movies with the Playlist panel or the -edl command-line switch. v1.2.5 diff --git a/src/lib/mrvFl/mrvSaveMovie.cpp b/src/lib/mrvFl/mrvSaveMovie.cpp index af8424fae..fe2dfc4fd 100644 --- a/src/lib/mrvFl/mrvSaveMovie.cpp +++ b/src/lib/mrvFl/mrvSaveMovie.cpp @@ -208,7 +208,8 @@ namespace mrv const bool hasVideo = !info.video.empty(); if (player->timeRange() != timeRange || - info.videoTime.start_time() != timeRange.start_time()) + info.videoTime.start_time() != timeRange.start_time() || + info.videoTime.duration() != timeRange.duration()) { double videoRate = info.videoTime.duration().rate(); videoTime = otime::TimeRange( @@ -652,7 +653,7 @@ namespace mrv size_t totalSamples = 0; size_t currentSampleCount = startTime.rescaled_to(sampleRate).value(); - + while (running) { context->tick(); @@ -770,66 +771,72 @@ namespace mrv else { // Get the videoData - const auto videoData = + auto videoData = timeline->getVideo(currentTime).future.get(); + if (videoData.layers.empty() || !videoData.layers[0].image) { std::string err = - string::Format( - _("Empty video data at time {0}.")) + string::Format(_("Empty video data at time " + "{0}. Repeating frame.")) .arg(currentTime); - LOG_ERROR(err); + LOG_WARNING(err); } - - // This refreshes the view window - if (interactive) + else { - view->make_current(); - view->currentVideoCallback({videoData}); - view->flush(); - } + + // This refreshes the view window + if (interactive) + { + view->make_current(); + view->currentVideoCallback({videoData}); + view->flush(); + } - // back to conventional pixel operation - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); - // CHECK_GL; - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + // back to conventional pixel operation + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + // CHECK_GL; + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - if (interactive) - gl::initGLAD(); + if (interactive) + gl::initGLAD(); - // Render the video to an offscreen buffer. - gl::OffscreenBufferBinding binding(buffer); - { - locale::SetAndRestore saved; - render->begin(offscreenBufferSize); - render->setOCIOOptions(view->getOCIOOptions()); - render->setLUTOptions(view->lutOptions()); - render->drawVideo( - {videoData}, - {math::Box2i(0, 0, renderSize.w, renderSize.h)}, - {timeline::ImageOptions()}, - {timeline::DisplayOptions()}, - timeline::CompareOptions(), - ui->uiView->getBackgroundOptions()); - render->end(); - } + // Render the video to an offscreen buffer. + gl::OffscreenBufferBinding binding(buffer); + { + locale::SetAndRestore saved; + render->begin(offscreenBufferSize); + render->setOCIOOptions(view->getOCIOOptions()); + render->setLUTOptions(view->lutOptions()); + render->drawVideo( + {videoData}, + {math::Box2i(0, 0, renderSize.w, renderSize.h)}, + {timeline::ImageOptions()}, + {timeline::DisplayOptions()}, + timeline::CompareOptions(), + ui->uiView->getBackgroundOptions()); + render->end(); + } - glPixelStorei( - GL_PACK_ALIGNMENT, outputInfo.layout.alignment); + glPixelStorei( + GL_PACK_ALIGNMENT, outputInfo.layout.alignment); #if defined(TLRENDER_API_GL_4_1) - glPixelStorei( - GL_PACK_SWAP_BYTES, - outputInfo.layout.endian != memory::getEndian()); + glPixelStorei( + GL_PACK_SWAP_BYTES, + outputInfo.layout.endian != memory::getEndian()); #endif // TLRENDER_API_GL_4_1 - glReadPixels( - 0, 0, outputInfo.size.w, outputInfo.size.h, format, - type, outputImage->getData()); + glReadPixels( + 0, 0, outputInfo.size.w, outputInfo.size.h, format, + type, outputImage->getData()); + } } if (videoTime.contains(currentTime)) + { writer->writeVideo(currentTime, outputImage); + } } if (hasVideo) diff --git a/src/po/de.po b/src/po/de.po index 02cfa6464..bb104af67 100644 --- a/src/po/de.po +++ b/src/po/de.po @@ -2816,8 +2816,8 @@ msgstr "OpenGL Info: {0}" msgid "Saving... {0}" msgstr "Speichern... {0}" -msgid "Empty video data at time {0}." -msgstr "Leere Videodaten zur Zeit {0}." +msgid "Empty video data at time {0}. Repeating frame." +msgstr "Leere Videodaten zur Zeit {0}. Wiederholungsbild." msgid "Reading preferences from \"{0}{1}\"." msgstr "Voreinstellungen von \"{0}{1}\" lesen." diff --git a/src/po/en.po b/src/po/en.po index c7c0fea8d..436ad3a35 100644 --- a/src/po/en.po +++ b/src/po/en.po @@ -19,14 +19,12 @@ msgid "" "\n" "USD module.\n" "\n" -"Contains all classes and enums related to USD (Universal Scene " -"Description). \n" +"Contains all classes and enums related to USD (Universal Scene Description). \n" msgstr "" "\n" "USD module.\n" "\n" -"Contains all classes and enums related to USD (Universal Scene " -"Description). \n" +"Contains all classes and enums related to USD (Universal Scene Description). \n" msgid "Renderer Name" msgstr "Renderer Name" @@ -310,11 +308,11 @@ msgid "Duplicated Python plugin {0} in {1} and {2}." msgstr "Duplicated Python plugin {0} in {1} and {2}." msgid "" -"Expected a tuple containing a Python function and a string with menu options " -"in it." +"Expected a tuple containing a Python function and a string with menu options" +" in it." msgstr "" -"Expected a tuple containing a Python function and a string with menu options " -"in it." +"Expected a tuple containing a Python function and a string with menu options" +" in it." msgid "" "Expected a handle to a Python function or to a tuple containing a Python " @@ -402,8 +400,7 @@ msgid "" " Dictionary of menu entries as keys with callbacks as values.\n" "\n" "\n" -" :return: A dictionary of menu entries and their corresponding " -"callbacks.\n" +" :return: A dictionary of menu entries and their corresponding callbacks.\n" " :rtype: dict\n" "\n" " \"\"\"\n" @@ -447,8 +444,7 @@ msgstr "" " Dictionary of menu entries as keys with callbacks as values.\n" "\n" "\n" -" :return: A dictionary of menu entries and their corresponding " -"callbacks.\n" +" :return: A dictionary of menu entries and their corresponding callbacks.\n" " :rtype: dict\n" "\n" " \"\"\"\n" @@ -508,24 +504,20 @@ msgstr "unsupported operand type(s) for {0}: RationalTime and {1}" msgid "" "\n" -"The RationalTime class represents a measure of time of :math:`rt.value/rt." -"rate` seconds.\n" +"The RationalTime class represents a measure of time of :math:`rt.value/rt.rate` seconds.\n" "It can be rescaled into another :class:`~RationalTime`'s rate.\n" msgstr "" "\n" -"The RationalTime class represents a measure of time of :math:`rt.value/rt." -"rate` seconds.\n" +"The RationalTime class represents a measure of time of :math:`rt.value/rt.rate` seconds.\n" "It can be rescaled into another :class:`~RationalTime`'s rate.\n" msgid "" "\n" -"Returns true if the time is invalid. The time is considered invalid if the " -"value or the rate are a NaN value\n" +"Returns true if the time is invalid. The time is considered invalid if the value or the rate are a NaN value\n" "or if the rate is less than or equal to zero.\n" msgstr "" "\n" -"Returns true if the time is invalid. The time is considered invalid if the " -"value or the rate are a NaN value\n" +"Returns true if the time is invalid. The time is considered invalid if the value or the rate are a NaN value\n" "or if the rate is less than or equal to zero.\n" msgid "Returns the time value for time converted to new_rate." @@ -539,43 +531,35 @@ msgstr "Returns the time value for \"self\" converted to new_rate." msgid "" "\n" -"Compute the duration of samples from first to last (excluding last). This is " -"not the same as distance.\n" +"Compute the duration of samples from first to last (excluding last). This is not the same as distance.\n" "\n" -"For example, the duration of a clip from frame 10 to frame 15 is 5 frames. " -"Result will be in the rate of start_time.\n" +"For example, the duration of a clip from frame 10 to frame 15 is 5 frames. Result will be in the rate of start_time.\n" msgstr "" "\n" -"Compute the duration of samples from first to last (excluding last). This is " -"not the same as distance.\n" +"Compute the duration of samples from first to last (excluding last). This is not the same as distance.\n" "\n" -"For example, the duration of a clip from frame 10 to frame 15 is 5 frames. " -"Result will be in the rate of start_time.\n" +"For example, the duration of a clip from frame 10 to frame 15 is 5 frames. Result will be in the rate of start_time.\n" msgid "" "\n" -"Compute the duration of samples from first to last (including last). This is " -"not the same as distance.\n" +"Compute the duration of samples from first to last (including last). This is not the same as distance.\n" "\n" -"For example, the duration of a clip from frame 10 to frame 15 is 6 frames. " -"Result will be in the rate of start_time.\n" +"For example, the duration of a clip from frame 10 to frame 15 is 6 frames. Result will be in the rate of start_time.\n" msgstr "" "\n" -"Compute the duration of samples from first to last (including last). This is " -"not the same as distance.\n" +"Compute the duration of samples from first to last (including last). This is not the same as distance.\n" "\n" -"For example, the duration of a clip from frame 10 to frame 15 is 6 frames. " -"Result will be in the rate of start_time.\n" +"For example, the duration of a clip from frame 10 to frame 15 is 6 frames. Result will be in the rate of start_time.\n" msgid "Returns true if the rate is valid for use with timecode." msgstr "Returns true if the rate is valid for use with timecode." msgid "" -"Returns the first valid timecode rate that has the least difference from the " -"given value." +"Returns the first valid timecode rate that has the least difference from the" +" given value." msgstr "" -"Returns the first valid timecode rate that has the least difference from the " -"given value." +"Returns the first valid timecode rate that has the least difference from the" +" given value." msgid "Turn a frame number and rate into a :class:`~RationalTime` object." msgstr "Turn a frame number and rate into a :class:`~RationalTime` object." @@ -590,9 +574,11 @@ msgid "Convert to timecode (``HH:MM:SS;FRAME``)" msgstr "Convert to timecode (``HH:MM:SS;FRAME``)" msgid "" -"Convert a timecode string (``HH:MM:SS;FRAME``) into a :class:`~RationalTime`." +"Convert a timecode string (``HH:MM:SS;FRAME``) into a " +":class:`~RationalTime`." msgstr "" -"Convert a timecode string (``HH:MM:SS;FRAME``) into a :class:`~RationalTime`." +"Convert a timecode string (``HH:MM:SS;FRAME``) into a " +":class:`~RationalTime`." msgid "" "Convert a time with microseconds string (``HH:MM:ss`` where ``ss`` is an " @@ -603,17 +589,13 @@ msgstr "" msgid "" "\n" -"The TimeRange class represents a range in time. It encodes the start time " -"and the duration,\n" -"meaning that :meth:`end_time_inclusive` (last portion of a sample in the " -"time range) and\n" +"The TimeRange class represents a range in time. It encodes the start time and the duration,\n" +"meaning that :meth:`end_time_inclusive` (last portion of a sample in the time range) and\n" ":meth:`end_time_exclusive` can be computed.\n" msgstr "" "\n" -"The TimeRange class represents a range in time. It encodes the start time " -"and the duration,\n" -"meaning that :meth:`end_time_inclusive` (last portion of a sample in the " -"time range) and\n" +"The TimeRange class represents a range in time. It encodes the start time and the duration,\n" +"meaning that :meth:`end_time_inclusive` (last portion of a sample in the time range) and\n" ":meth:`end_time_exclusive` can be computed.\n" msgid "" @@ -626,8 +608,7 @@ msgid "" "If the time range starts at (0, 24) with duration (10.5, 24):\n" "(10, 24)\n" "\n" -"In other words, the last frame with data, even if the last frame is " -"fractional.\n" +"In other words, the last frame with data, even if the last frame is fractional.\n" msgstr "" "\n" "The time of the last sample containing data in the time range.\n" @@ -638,8 +619,7 @@ msgstr "" "If the time range starts at (0, 24) with duration (10.5, 24):\n" "(10, 24)\n" "\n" -"In other words, the last frame with data, even if the last frame is " -"fractional.\n" +"In other words, the last frame with data, even if the last frame is fractional.\n" msgid "" "\n" @@ -660,7 +640,8 @@ msgstr "" "If start frame is 10 and duration is 5.5, then end_time_exclusive is\n" "15.5, because the last time with data in this range is 15.\n" -msgid "Construct a new :class:`~TimeRange` that is this one extended by other." +msgid "" +"Construct a new :class:`~TimeRange` that is this one extended by other." msgstr "" "Construct a new :class:`~TimeRange` that is this one extended by other." @@ -749,10 +730,8 @@ msgstr "" msgid "" "\n" -"The start of `this` strictly precedes end of `other` by a value >= " -"`epsilon_s`.\n" -"The end of `this` strictly antecedes start of `other` by a value >= " -"`epsilon_s`.\n" +"The start of `this` strictly precedes end of `other` by a value >= `epsilon_s`.\n" +"The end of `this` strictly antecedes start of `other` by a value >= `epsilon_s`.\n" "::\n" "\n" " [ this ]\n" @@ -761,10 +740,8 @@ msgid "" "The converse would be ``other.overlaps(this)``\n" msgstr "" "\n" -"The start of `this` strictly precedes end of `other` by a value >= " -"`epsilon_s`.\n" -"The end of `this` strictly antecedes start of `other` by a value >= " -"`epsilon_s`.\n" +"The start of `this` strictly precedes end of `other` by a value >= `epsilon_s`.\n" +"The end of `this` strictly antecedes start of `other` by a value >= `epsilon_s`.\n" "::\n" "\n" " [ this ]\n" @@ -834,8 +811,7 @@ msgstr "" msgid "" "\n" "The start of `this` strictly equals the start of `other`.\n" -"The end of `this` strictly precedes the end of `other` by a value >= " -"`epsilon_s`.\n" +"The end of `this` strictly precedes the end of `other` by a value >= `epsilon_s`.\n" "::\n" "\n" " [ this ]\n" @@ -845,8 +821,7 @@ msgid "" msgstr "" "\n" "The start of `this` strictly equals the start of `other`.\n" -"The end of `this` strictly precedes the end of `other` by a value >= " -"`epsilon_s`.\n" +"The end of `this` strictly precedes the end of `other` by a value >= `epsilon_s`.\n" "::\n" "\n" " [ this ]\n" @@ -877,8 +852,7 @@ msgstr "" msgid "" "\n" -"The start of `this` strictly antecedes the start of `other` by a value >= " -"`epsilon_s`.\n" +"The start of `this` strictly antecedes the start of `other` by a value >= `epsilon_s`.\n" "The end of `this` strictly equals the end of `other`.\n" "::\n" "\n" @@ -888,8 +862,7 @@ msgid "" "The converse would be ``other.finishes(this)``\n" msgstr "" "\n" -"The start of `this` strictly antecedes the start of `other` by a value >= " -"`epsilon_s`.\n" +"The start of `this` strictly antecedes the start of `other` by a value >= `epsilon_s`.\n" "The end of `this` strictly equals the end of `other`.\n" "::\n" "\n" @@ -900,10 +873,8 @@ msgstr "" msgid "" "\n" -"The start of `this` precedes or equals the end of `other` by a value >= " -"`epsilon_s`.\n" -"The end of `this` antecedes or equals the start of `other` by a value >= " -"`epsilon_s`.\n" +"The start of `this` precedes or equals the end of `other` by a value >= `epsilon_s`.\n" +"The end of `this` antecedes or equals the start of `other` by a value >= `epsilon_s`.\n" "::\n" "\n" " [ this ] OR [ other ]\n" @@ -912,10 +883,8 @@ msgid "" "The converse would be ``other.finishes(this)``\n" msgstr "" "\n" -"The start of `this` precedes or equals the end of `other` by a value >= " -"`epsilon_s`.\n" -"The end of `this` antecedes or equals the start of `other` by a value >= " -"`epsilon_s`.\n" +"The start of `this` precedes or equals the end of `other` by a value >= `epsilon_s`.\n" +"The end of `this` antecedes or equals the start of `other` by a value >= `epsilon_s`.\n" "::\n" "\n" " [ this ] OR [ other ]\n" @@ -925,33 +894,25 @@ msgstr "" msgid "" "\n" -"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s " -"(exclusive).\n" +"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s (exclusive).\n" "\n" -"For example, if start_time is 1 and end_time is 10, the returned will have a " -"duration of 9.\n" +"For example, if start_time is 1 and end_time is 10, the returned will have a duration of 9.\n" msgstr "" "\n" -"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s " -"(exclusive).\n" +"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s (exclusive).\n" "\n" -"For example, if start_time is 1 and end_time is 10, the returned will have a " -"duration of 9.\n" +"For example, if start_time is 1 and end_time is 10, the returned will have a duration of 9.\n" msgid "" "\n" -"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s " -"(inclusive).\n" +"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s (inclusive).\n" "\n" -"For example, if start_time is 1 and end_time is 10, the returned will have a " -"duration of 10.\n" +"For example, if start_time is 1 and end_time is 10, the returned will have a duration of 10.\n" msgstr "" "\n" -"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s " -"(inclusive).\n" +"Creates a :class:`~TimeRange` from start and end :class:`~RationalTime`\\s (inclusive).\n" "\n" -"For example, if start_time is 1 and end_time is 10, the returned will have a " -"duration of 10.\n" +"For example, if start_time is 1 and end_time is 10, the returned will have a duration of 10.\n" msgid "" "\n" @@ -1410,14 +1371,12 @@ msgid "" "\n" "Command module.\n" "\n" -"Used to run main commands and get arguments and set the display, image, " -"compare, LUT options.\n" +"Used to run main commands and get arguments and set the display, image, compare, LUT options.\n" msgstr "" "\n" "Command module.\n" "\n" -"Used to run main commands and get arguments and set the display, image, " -"compare, LUT options.\n" +"Used to run main commands and get arguments and set the display, image, compare, LUT options.\n" msgid "" "Get command-line arguments passed as single quoted string to -pythonArgs." @@ -1638,11 +1597,11 @@ msgid "Python Script to run and exit." msgstr "Python Script to run and exit." msgid "" -"Python Arguments to pass to the Python script as a single quoted string like " -"\"arg1 'arg2 asd' arg3\", stored in cmd.argv." +"Python Arguments to pass to the Python script as a single quoted string like" +" \"arg1 'arg2 asd' arg3\", stored in cmd.argv." msgstr "" -"Python Arguments to pass to the Python script as a single quoted string like " -"\"arg1 'arg2 asd' arg3\", stored in cmd.argv." +"Python Arguments to pass to the Python script as a single quoted string like" +" \"arg1 'arg2 asd' arg3\", stored in cmd.argv." msgid "Reset settings to defaults." msgstr "Reset settings to defaults." @@ -2907,17 +2866,19 @@ msgstr "Saving audio to {0}." msgid "Saving pictures to {0}." msgstr "Saving pictures to {0}." -#, fuzzy msgid "ProRes profiles need a .mov movie extension. Changing it to .mov." -msgstr "HAP profile needs a .mov extension. Changing it to .mov" +msgstr "ProRes profiles need a .mov movie extension. Changing it to .mov." msgid "" -"VP9 profile needs a .mp4, .mkv or .webm movie extension. Changing it to .mp4" +"VP9 profile needs a .mp4, .mkv or .webm movie extension. Changing it to " +".mp4" msgstr "" -"VP9 profile needs a .mp4, .mkv or .webm movie extension. Changing it to .mp4" +"VP9 profile needs a .mp4, .mkv or .webm movie extension. Changing it to " +".mp4" msgid "AV1 profile needs a .mp4 or .mkv movie extension. Changing it to .mp4" -msgstr "AV1 profile needs a .mp4 or .mkv movie extension. Changing it to .mp4" +msgstr "" +"AV1 profile needs a .mp4 or .mkv movie extension. Changing it to .mp4" msgid "" "GoPro Cineform profile needs a .mkv movie extension. Changing it to .mkv" @@ -2986,8 +2947,8 @@ msgstr "OpenGL info: {0}" msgid "Saving... {0}" msgstr "Saving... {0}" -msgid "Empty video data at time {0}." -msgstr "Empty video data at time {0}." +msgid "Empty video data at time {0}. Repeating frame." +msgstr "Empty video data at time {0}. Repeating frame." msgid "Reading preferences from \"{0}{1}\"." msgstr "Reading preferences from \"{0}{1}\"." @@ -3503,11 +3464,11 @@ msgid "Unknown action mode in " msgstr "Unknown action mode in " msgid "" -"Cannot create an annotation here for all frames. A current frame annotation " -"already exists." +"Cannot create an annotation here for all frames. A current frame annotation" +" already exists." msgstr "" -"Cannot create an annotation here for all frames. A current frame annotation " -"already exists." +"Cannot create an annotation here for all frames. A current frame annotation" +" already exists." msgid "" "Cannot create an annotation here for current frame. An all frames " @@ -4065,11 +4026,11 @@ msgid "Detail mode" msgstr "Detail mode" msgid "" -"Could not create directory '%s'. You may not have permission to perform this " -"operation." +"Could not create directory '%s'. You may not have permission to perform this" +" operation." msgstr "" -"Could not create directory '%s'. You may not have permission to perform this " -"operation." +"Could not create directory '%s'. You may not have permission to perform this" +" operation." msgid "An error ocurred while trying to delete '%s'. %s" msgstr "An error ocurred while trying to delete '%s'. %s" @@ -5012,24 +4973,20 @@ msgid "" " Y = 0.2126 R + 0.7152 G + 0.0722 B\n" "Y' (Lumma) is the weighted pixel value according to:\n" " Y' = ( R + G + B ) / 3.0\n" -"L (Lightness) is the human perception of luminance of the image which is non " -"linear.\n" +"L (Lightness) is the human perception of luminance of the image which is non linear.\n" "According to CIE No.15.2:\n" " L = (116 * Y ^ 1/3 - 16) / 100\n" -"A pixel of Y = 0.18 (L = 0.5) will appear about half as bright as Y = L = " -"1.0 (white)." +"A pixel of Y = 0.18 (L = 0.5) will appear about half as bright as Y = L = 1.0 (white)." msgstr "" "Switch brightness calculation.\n" "Y (Luminance) is the pixel value according to Rec709:\n" " Y = 0.2126 R + 0.7152 G + 0.0722 B\n" "Y' (Lumma) is the weighted pixel value according to:\n" " Y' = ( R + G + B ) / 3.0\n" -"L (Lightness) is the human perception of luminance of the image which is non " -"linear.\n" +"L (Lightness) is the human perception of luminance of the image which is non linear.\n" "According to CIE No.15.2:\n" " L = (116 * Y ^ 1/3 - 16) / 100\n" -"A pixel of Y = 0.18 (L = 0.5) will appear about half as bright as Y = L = " -"1.0 (white)." +"A pixel of Y = 0.18 (L = 0.5) will appear about half as bright as Y = L = 1.0 (white)." msgid "Luminance of image pixel under mouse." msgstr "Luminance of image pixel under mouse." @@ -5591,12 +5548,10 @@ msgstr "Single Instance" msgid "" "When selected, only a single mrv2 instance is allowed.\n" -"If you try to open several mrv2s with different images, all these images " -"will be sent to the already open mrv2." +"If you try to open several mrv2s with different images, all these images will be sent to the already open mrv2." msgstr "" "When selected, only a single mrv2 instance is allowed.\n" -"If you try to open several mrv2s with different images, all these images " -"will be sent to the already open mrv2." +"If you try to open several mrv2s with different images, all these images will be sent to the already open mrv2." msgid "Auto Refit Image" msgstr "Auto Refit Image" @@ -5657,9 +5612,11 @@ msgid "Topbar" msgstr "Topbar" msgid "" -"When selected, mrv2 will start with its channel, gain, gamma toolbar visible." +"When selected, mrv2 will start with its channel, gain, gamma toolbar " +"visible." msgstr "" -"When selected, mrv2 will start with its channel, gain, gamma toolbar visible." +"When selected, mrv2 will start with its channel, gain, gamma toolbar " +"visible." msgid "Pixel Toolbar" msgstr "Pixel Toolbar" @@ -5690,12 +5647,14 @@ msgid "Tool Dock" msgstr "Tool Dock" msgid "When selected, mrv2 will start with the action tool dock already open." -msgstr "When selected, mrv2 will start with the action tool dock already open." +msgstr "" +"When selected, mrv2 will start with the action tool dock already open." msgid "Only One Panel" msgstr "Only One Panel" -msgid "When selected, mrv2 will start with the only one panel option selected." +msgid "" +"When selected, mrv2 will start with the only one panel option selected." msgstr "" "When selected, mrv2 will start with the only one panel option selected." @@ -5876,12 +5835,12 @@ msgid "Fixed Position" msgstr "Fixed Position" msgid "" -"When this option is set, mrv2 will open in the position you set here (except " -"if the window goes out of the Desktop). If Always Save on Exit is on, the " +"When this option is set, mrv2 will open in the position you set here (except" +" if the window goes out of the Desktop). If Always Save on Exit is on, the " "values are recakculated upon exiting the program." msgstr "" -"When this option is set, mrv2 will open in the position you set here (except " -"if the window goes out of the Desktop). If Always Save on Exit is on, the " +"When this option is set, mrv2 will open in the position you set here (except" +" if the window goes out of the Desktop). If Always Save on Exit is on, the " "values are recakculated upon exiting the program." msgid "X:" @@ -5969,11 +5928,11 @@ msgid "Remove EDLs in Temporary Folder on Exit" msgstr "Remove EDLs in Temporary Folder on Exit" msgid "" -"When selected, temporary EDLs (Playlists) will be removed from the temporary " -"folder." +"When selected, temporary EDLs (Playlists) will be removed from the temporary" +" folder." msgstr "" -"When selected, temporary EDLs (Playlists) will be removed from the temporary " -"folder." +"When selected, temporary EDLs (Playlists) will be removed from the temporary" +" folder." msgid "Playback" msgstr "Playback" @@ -6031,13 +5990,13 @@ msgid "Scrub Sensitivity" msgstr "Scrub Sensitivity" msgid "" -"This setting controls the sensitivity of scrubbing (SHIFT and then the mouse " -"right and left). Smaller values make the mouse move jump more frames while " -"higher values does the opposite." +"This setting controls the sensitivity of scrubbing (SHIFT and then the mouse" +" right and left). Smaller values make the mouse move jump more frames while" +" higher values does the opposite." msgstr "" -"This setting controls the sensitivity of scrubbing (SHIFT and then the mouse " -"right and left). Smaller values make the mouse move jump more frames while " -"higher values does the opposite." +"This setting controls the sensitivity of scrubbing (SHIFT and then the mouse" +" right and left). Smaller values make the mouse move jump more frames while" +" higher values does the opposite." msgid "Default View" msgstr "Default View" @@ -6105,36 +6064,30 @@ msgid "8-bits" msgstr "8-bits" msgid "" -"The name of the OCIO default image color space for 8 bit images (jpg, bmp, " -"etc)\n" +"The name of the OCIO default image color space for 8 bit images (jpg, bmp, etc)\n" "(Environment variable: MRV_OCIO_8bits_ICS)" msgstr "" -"The name of the OCIO default image color space for 8 bit images (jpg, bmp, " -"etc)\n" +"The name of the OCIO default image color space for 8 bit images (jpg, bmp, etc)\n" "(Environment variable: MRV_OCIO_8bits_ICS)" msgid "16-bits" msgstr "16-bits" msgid "" -"The name of the OCIO default image color space for 16-bit images (cin, tiff, " -"etc)\n" +"The name of the OCIO default image color space for 16-bit images (cin, tiff, etc)\n" "(Environment variable: MRV_OCIO_16bits_ICS)" msgstr "" -"The name of the OCIO default image color space for 16-bit images (cin, tiff, " -"etc)\n" +"The name of the OCIO default image color space for 16-bit images (cin, tiff, etc)\n" "(Environment variable: MRV_OCIO_16bits_ICS)" msgid "32-bits" msgstr "32-bits" msgid "" -"The name of the OCIO default image color space for 32-bit int images " -"(openexr integers, etc)\n" +"The name of the OCIO default image color space for 32-bit int images (openexr integers, etc)\n" "(Environment variable: MRV_OCIO_32bits_ICS)" msgstr "" -"The name of the OCIO default image color space for 32-bit int images " -"(openexr integers, etc)\n" +"The name of the OCIO default image color space for 32-bit int images (openexr integers, etc)\n" "(Environment variable: MRV_OCIO_32bits_ICS)" msgid "half" @@ -6151,12 +6104,10 @@ msgid "float" msgstr "float" msgid "" -"The name of the OCIO default image color space for half and float images " -"(OpenEXR, dpx, etc)\n" +"The name of the OCIO default image color space for half and float images (OpenEXR, dpx, etc)\n" "(Environment variable: MRV_OCIO_float_ICS)" msgstr "" -"The name of the OCIO default image color space for half and float images " -"(OpenEXR, dpx, etc)\n" +"The name of the OCIO default image color space for half and float images (OpenEXR, dpx, etc)\n" "(Environment variable: MRV_OCIO_float_ICS)" msgid "Default Look" @@ -6293,7 +6244,8 @@ msgid "API" msgstr "API" msgid "Audio API to use for platforms that support multiple APIs (Linux only)" -msgstr "Audio API to use for platforms that support multiple APIs (Linux only)" +msgstr "" +"Audio API to use for platforms that support multiple APIs (Linux only)" msgid "Output Device" msgstr "Output Device" @@ -6315,9 +6267,11 @@ msgid "Use ComfyUI Pipe" msgstr "Use ComfyUI Pipe" msgid "" -"This setting opens a pipe to communicate with ComfyUI's mrv2_save_exr_node.py" +"This setting opens a pipe to communicate with ComfyUI's " +"mrv2_save_exr_node.py" msgstr "" -"This setting opens a pipe to communicate with ComfyUI's mrv2_save_exr_node.py" +"This setting opens a pipe to communicate with ComfyUI's " +"mrv2_save_exr_node.py" msgid "Errors" msgstr "Errors" @@ -6337,7 +6291,8 @@ msgstr "Adjusts how Log Window behaves in case of error." msgid "Check for Updates" msgstr "Check for Updates" -msgid "Allows you to automatically download updates of mrv2 when it starts up." +msgid "" +"Allows you to automatically download updates of mrv2 when it starts up." msgstr "" "Allows you to automatically download updates of mrv2 when it starts up." @@ -6428,12 +6383,12 @@ msgstr "Click to delete the selected preset." msgid "" "Select, Add or Delete an OCIO Preset that stores: config filename, Input " -"Color Space, View, Look, LUT settings and Defaults for 8-bits, 16-bits, 32-" -"bits, half and float images. " +"Color Space, View, Look, LUT settings and Defaults for 8-bits, 16-bits, " +"32-bits, half and float images. " msgstr "" "Select, Add or Delete an OCIO Preset that stores: config filename, Input " -"Color Space, View, Look, LUT settings and Defaults for 8-bits, 16-bits, 32-" -"bits, half and float images. " +"Color Space, View, Look, LUT settings and Defaults for 8-bits, 16-bits, " +"32-bits, half and float images. " msgid "Summary" msgstr "Summary" diff --git a/src/po/es.po b/src/po/es.po index 389100eb7..e6d27c213 100644 --- a/src/po/es.po +++ b/src/po/es.po @@ -2998,8 +2998,8 @@ msgstr "Información de OpenGL: {0}" msgid "Saving... {0}" msgstr "Grando... {0}." -msgid "Empty video data at time {0}." -msgstr "Datos de vídeo vacios en {0}." +msgid "Empty video data at time {0}. Repeating frame." +msgstr "Datos de vídeo vacíos en el momento {0}. Repetición del cuadro." msgid "Reading preferences from \"{0}{1}\"." msgstr "Leyendo preferencias desde \"{0}{1}\"." diff --git a/src/po/fr.po b/src/po/fr.po index cd65b4a96..66c875568 100644 --- a/src/po/fr.po +++ b/src/po/fr.po @@ -2805,8 +2805,8 @@ msgstr "Informations OpenGL: {0}" msgid "Saving... {0}" msgstr "Enregistrement... {0}" -msgid "Empty video data at time {0}." -msgstr "Données vidéo vides au moment {0}." +msgid "Empty video data at time {0}. Repeating frame." +msgstr "Données vidéo vides au moment {0}. Cadre répétitif." msgid "Reading preferences from \"{0}{1}\"." msgstr "Préférences de lecture de \"{0}{1}\"." diff --git a/src/po/hi_IN.po b/src/po/hi_IN.po index 5efd1c24c..db5b6fabd 100644 --- a/src/po/hi_IN.po +++ b/src/po/hi_IN.po @@ -2784,7 +2784,7 @@ msgstr "ओपन- जीएल जानकारी: {0}" msgid "Saving... {0}" msgstr "सहेजा जा रहा है... {0}" -msgid "Empty video data at time {0}." +msgid "Empty video data at time {0}. Repeating frame." msgstr "{0} समय पर वीडियो आँकड़ा खाली करें" msgid "Reading preferences from \"{0}{1}\"." diff --git a/src/po/it.po b/src/po/it.po index 7c6c65a8e..04f1699ee 100644 --- a/src/po/it.po +++ b/src/po/it.po @@ -2815,8 +2815,8 @@ msgstr "Informazioni OpenGL: {0}" msgid "Saving... {0}" msgstr "Salvataggio... {0}" -msgid "Empty video data at time {0}." -msgstr "Dati video vuoti al momento {0}." +msgid "Empty video data at time {0}. Repeating frame." +msgstr "Dati video vuoti al momento {0}. Ripetizione della cornice." msgid "Reading preferences from \"{0}{1}\"." msgstr "Preferenze di lettura da \"{0}{1}\"." diff --git a/src/po/messages.pot b/src/po/messages.pot index 0a4bee932..49bd675a9 100644 --- a/src/po/messages.pot +++ b/src/po/messages.pot @@ -2665,7 +2665,7 @@ msgstr "" msgid "Saving... {0}" msgstr "" -msgid "Empty video data at time {0}." +msgid "Empty video data at time {0}. Repeating frame." msgstr "" msgid "Reading preferences from \"{0}{1}\"." diff --git a/src/po/pt.po b/src/po/pt.po index c1e438ec3..9fa252826 100644 --- a/src/po/pt.po +++ b/src/po/pt.po @@ -2782,8 +2782,8 @@ msgstr "Informaes do OpenGL: {0}" msgid "Saving... {0}" msgstr "Salvar... {0}" -msgid "Empty video data at time {0}." -msgstr "Dados de vdeo vazios no momento {0}." +msgid "Empty video data at time {0}. Repeating frame." +msgstr "Dados de vídeo vazios no tempo {0}. Repetir o quadro." msgid "Reading preferences from \"{0}{1}\"." msgstr "Preferncias de leitura de \"{0}{1}\"." diff --git a/src/po/zh-CN.po b/src/po/zh-CN.po index 701fed516..b992ab4f2 100644 --- a/src/po/zh-CN.po +++ b/src/po/zh-CN.po @@ -2879,8 +2879,8 @@ msgstr "OpenGL 信息: {0}" msgid "Saving... {0}" msgstr "保存... {0}" -msgid "Empty video data at time {0}." -msgstr "时间 {0} 时空视频数据 。" +msgid "Empty video data at time {0}. Repeating frame." +msgstr "时间 {0} 时空视频数据。 重复框架 。" msgid "Reading preferences from \"{0}{1}\"." msgstr "读取“ \"{0}{1}\" 的首选项 。"