summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_mapping.cc32
-rw-r--r--src/lib/digester.cc37
-rw-r--r--src/lib/digester.h22
-rw-r--r--src/lib/film.cc30
-rw-r--r--src/lib/film.h2
-rw-r--r--src/lib/image.cc26
-rw-r--r--src/lib/memory_util.cc46
-rw-r--r--src/lib/memory_util.h7
-rw-r--r--src/lib/player.cc21
-rw-r--r--src/lib/player.h9
-rw-r--r--src/lib/po/ja_JP.po367
-rw-r--r--src/lib/po/zh_CN.po63
-rw-r--r--src/lib/raw_image_proxy.cc3
-rw-r--r--src/lib/reel_writer.cc30
14 files changed, 351 insertions, 344 deletions
diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc
index 4e13d1adb..c926437ea 100644
--- a/src/lib/audio_mapping.cc
+++ b/src/lib/audio_mapping.cc
@@ -85,13 +85,13 @@ AudioMapping::make_zero()
struct ChannelRegex
{
- ChannelRegex(string regex_, int channel_)
+ ChannelRegex(string regex_, dcp::Channel channel_)
: regex(regex_)
, channel(channel_)
{}
string regex;
- int channel;
+ dcp::Channel channel;
};
@@ -99,19 +99,19 @@ void
AudioMapping::make_default(AudioProcessor const * processor, optional<boost::filesystem::path> filename)
{
static ChannelRegex const regex[] = {
- ChannelRegex(".*[\\._-]L[\\._-].*", 0),
- ChannelRegex(".*[\\._-]R[\\._-].*", 1),
- ChannelRegex(".*[\\._-]C[\\._-].*", 2),
- ChannelRegex(".*[\\._-]Lfe[\\._-].*", 3),
- ChannelRegex(".*[\\._-]LFE[\\._-].*", 3),
- ChannelRegex(".*[\\._-]Lss[\\._-].*", 4),
- ChannelRegex(".*[\\._-]Lsr[\\._-].*", 6),
- ChannelRegex(".*[\\._-]Lrs[\\._-].*", 6),
- ChannelRegex(".*[\\._-]Ls[\\._-].*", 4),
- ChannelRegex(".*[\\._-]Rss[\\._-].*", 5),
- ChannelRegex(".*[\\._-]Rsr[\\._-].*", 7),
- ChannelRegex(".*[\\._-]Rrs[\\._-].*", 7),
- ChannelRegex(".*[\\._-]Rs[\\._-].*", 5),
+ ChannelRegex(".*[\\._-]L[\\._-].*", dcp::Channel::LEFT),
+ ChannelRegex(".*[\\._-]R[\\._-].*", dcp::Channel::RIGHT),
+ ChannelRegex(".*[\\._-]C[\\._-].*", dcp::Channel::CENTRE),
+ ChannelRegex(".*[\\._-]Lfe[\\._-].*", dcp::Channel::LFE),
+ ChannelRegex(".*[\\._-]LFE[\\._-].*", dcp::Channel::LFE),
+ ChannelRegex(".*[\\._-]Lss[\\._-].*", dcp::Channel::LS),
+ ChannelRegex(".*[\\._-]Lsr[\\._-].*", dcp::Channel::BSL),
+ ChannelRegex(".*[\\._-]Lrs[\\._-].*", dcp::Channel::BSL),
+ ChannelRegex(".*[\\._-]Ls[\\._-].*", dcp::Channel::LS),
+ ChannelRegex(".*[\\._-]Rss[\\._-].*", dcp::Channel::RS),
+ ChannelRegex(".*[\\._-]Rsr[\\._-].*", dcp::Channel::BSR),
+ ChannelRegex(".*[\\._-]Rrs[\\._-].*", dcp::Channel::BSR),
+ ChannelRegex(".*[\\._-]Rs[\\._-].*", dcp::Channel::RS),
};
static int const regexes = sizeof(regex) / sizeof(*regex);
@@ -127,7 +127,7 @@ AudioMapping::make_default(AudioProcessor const * processor, optional<boost::fil
if (filename) {
for (int i = 0; i < regexes; ++i) {
boost::regex e(regex[i].regex, boost::regex::icase);
- if (boost::regex_match(filename->filename().string(), e) && regex[i].channel < output_channels()) {
+ if (boost::regex_match(filename->filename().string(), e) && static_cast<int>(regex[i].channel) < output_channels()) {
set(0, regex[i].channel, 1);
guessed = true;
}
diff --git a/src/lib/digester.cc b/src/lib/digester.cc
index 67a3e2398..bbcad5478 100644
--- a/src/lib/digester.cc
+++ b/src/lib/digester.cc
@@ -22,6 +22,7 @@
#include "digester.h"
#include "dcpomatic_assert.h"
#include <nettle/md5.h>
+#include <nettle/version.h>
#include <iomanip>
#include <cstdio>
@@ -32,38 +33,42 @@ using std::setfill;
using std::setw;
-Digester::Digester ()
+Digester::Digester()
{
- md5_init (&_context);
+ md5_init(&_context);
}
-Digester::~Digester ()
+Digester::~Digester()
{
- get ();
+ get();
}
void
-Digester::add (void const * data, size_t size)
+Digester::add(void const * data, size_t size)
{
- md5_update (&_context, size, reinterpret_cast<uint8_t const *>(data));
+ md5_update(&_context, size, reinterpret_cast<uint8_t const *>(data));
}
void
-Digester::add (string const & s)
+Digester::add(string const & s)
{
- add (s.c_str(), s.length());
+ add(s.c_str(), s.length());
}
string
-Digester::get () const
+Digester::get() const
{
if (!_digest) {
unsigned char digest[MD5_DIGEST_SIZE];
- md5_digest (&_context, MD5_DIGEST_SIZE, digest);
+#if NETTLE_VERSION_MAJOR >= 4
+ md5_digest(&_context, digest);
+#else
+ md5_digest(&_context, MD5_DIGEST_SIZE, digest);
+#endif
char hex[MD5_DIGEST_SIZE * 2 + 1];
for (int i = 0; i < MD5_DIGEST_SIZE; ++i) {
@@ -73,19 +78,23 @@ Digester::get () const
_digest = hex;
}
- return _digest.get ();
+ return _digest.get();
}
void
-Digester::get (uint8_t* buffer) const
+Digester::get(uint8_t* buffer) const
{
- md5_digest (&_context, MD5_DIGEST_SIZE, buffer);
+#if NETTLE_VERSION_MAJOR >= 4
+ md5_digest(&_context, buffer);
+#else
+ md5_digest(&_context, MD5_DIGEST_SIZE, buffer);
+#endif
}
int
-Digester::size () const
+Digester::size() const
{
return MD5_DIGEST_SIZE;
}
diff --git a/src/lib/digester.h b/src/lib/digester.h
index e4daabd68..5ff50f363 100644
--- a/src/lib/digester.h
+++ b/src/lib/digester.h
@@ -27,26 +27,26 @@
class Digester
{
public:
- Digester ();
- ~Digester ();
+ Digester();
+ ~Digester();
- Digester (Digester const&) = delete;
- Digester& operator= (Digester const&) = delete;
+ Digester(Digester const&) = delete;
+ Digester& operator=(Digester const&) = delete;
- void add (void const * data, size_t size);
+ void add(void const * data, size_t size);
template <class T>
- void add (T data) {
- add (&data, sizeof (T));
+ void add(T data) {
+ add(&data, sizeof(T));
}
- void add (std::string const & s);
+ void add(std::string const & s);
- std::string get () const;
+ std::string get() const;
- void get (uint8_t* buffer) const;
+ void get(uint8_t* buffer) const;
- int size () const;
+ int size() const;
private:
mutable md5_ctx _context;
diff --git a/src/lib/film.cc b/src/lib/film.cc
index b0276086a..de6343b9c 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -113,6 +113,7 @@ using namespace dcpomatic;
static constexpr char metadata_file[] = "metadata.xml";
static constexpr char ui_state_file[] = "ui.xml";
static constexpr char assets_file[] = "assets.xml";
+static constexpr char info_dir[] = "info";
/* 5 -> 6
@@ -289,7 +290,7 @@ boost::filesystem::path
Film::info_file(DCPTimePeriod period) const
{
boost::filesystem::path p;
- p /= "info";
+ p /= info_dir;
p /= video_identifier() + "_" + fmt::to_string(period.from.get()) + "_" + fmt::to_string(period.to.get());
return file(p);
}
@@ -1440,7 +1441,7 @@ Film::cpls() const
for (auto const& item: dcp::filesystem::directory_iterator(dir)) {
if (
dcp::filesystem::is_directory(item) &&
- item.path().filename() != "j2c" && item.path().filename() != "video" && item.path().filename() != "info" && item.path().filename() != "analysis"
+ item.path().filename() != "j2c" && item.path().filename() != "video" && item.path().filename() != info_dir && item.path().filename() != "analysis"
) {
try {
@@ -2204,12 +2205,35 @@ Film::speed_up_range(int dcp_frame_rate) const
return _playlist->speed_up_range(dcp_frame_rate);
}
+
void
-Film::copy_from(shared_ptr<const Film> film)
+Film::copy_from(shared_ptr<const Film> film, std::function<void (float)> set_progress)
{
read_metadata(film->file(metadata_file));
+
+ auto old_assets = film->read_remembered_assets();
+ auto new_assets = std::vector<RememberedAsset>{};
+
+ /* Find source film's remembered assets that still exist and copy them to our new film */
+ for (auto path: dcp::filesystem::recursive_directory_iterator(*film->directory())) {
+ auto iter = std::find_if(old_assets.begin(), old_assets.end(), [path](RememberedAsset const& asset) {
+ return asset.filename() == path.path().filename();
+ });
+ if (iter != old_assets.end()) {
+ copy_in_bits(path, assets_path() / path.path().filename(), set_progress);
+ new_assets.push_back({path.path().filename(), iter->period(), iter->identifier()});
+ }
+ }
+
+ write_remembered_assets(new_assets);
+
+ /* To use the assets we also need the info files */
+ for (auto path: dcp::filesystem::directory_iterator(film->dir(info_dir))) {
+ dcp::filesystem::copy_file(path.path(), dir(info_dir) / path.path().filename());
+ }
}
+
bool
Film::references_dcp_video() const
{
diff --git a/src/lib/film.h b/src/lib/film.h
index ae812f6d4..09b51202c 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -122,7 +122,7 @@ public:
void write_template(boost::filesystem::path path) const;
std::shared_ptr<xmlpp::Document> metadata(bool with_content_paths = true) const;
- void copy_from(std::shared_ptr<const Film> film);
+ void copy_from(std::shared_ptr<const Film> film, std::function<void (float)> set_progress);
std::string isdcf_name(bool if_created_now) const;
std::string dcp_name(bool if_created_now = false) const;
diff --git a/src/lib/image.cc b/src/lib/image.cc
index 0810fbbea..3a2e99c23 100644
--- a/src/lib/image.cc
+++ b/src/lib/image.cc
@@ -190,7 +190,8 @@ Image::crop_source_pointers(Crop crop) const
corrected_crop.bottom = size().height - 4;
}
- std::vector<uint8_t*> pointers(planes());
+ /* FFmpeg memcpy()s this array and assumes it has 4 entries */
+ std::vector<uint8_t*> pointers(4);
for (int c = 0; c < planes(); ++c) {
int const x = lrintf(bytes_per_pixel(c) * corrected_crop.left);
pointers[c] = data()[c] + x + stride()[c] * (corrected_crop.top / vertical_factor(c));
@@ -286,7 +287,8 @@ Image::crop_scale_window(
round_height_for_subsampling((out_size.height - inter_size.height) / 2, out_desc)
);
- std::vector<uint8_t*> scale_out_data(out->planes());
+ /* FFmpeg memcpy()s this array and assumes it has 4 entries */
+ std::vector<uint8_t*> scale_out_data(4);
for (int c = 0; c < out->planes(); ++c) {
int const x = lrintf(out->bytes_per_pixel(c) * corner.x);
scale_out_data[c] = out->data()[c] + x + out->stride()[c] * (corner.y / out->vertical_factor(c));
@@ -610,17 +612,15 @@ Image::make_black()
case AV_PIX_FMT_UYVY422:
{
- int const Y = sample_size(0).height;
- int const X = line_size()[0];
- uint8_t* p = data()[0];
- for (int y = 0; y < Y; ++y) {
- for (int x = 0; x < X / 4; ++x) {
- *p++ = eight_bit_uv; // Cb
- *p++ = 0; // Y0
- *p++ = eight_bit_uv; // Cr
- *p++ = 0; // Y1
- }
- }
+ fill_memory(
+ data()[0],
+ sample_size(0).height * line_size()[0],
+ /* Cb/Cr is eight_bit_uv, Y0/Y1 is 0 */
+ static_cast<uint64_t>(eight_bit_uv) |
+ (static_cast<uint64_t>(eight_bit_uv) << 16) |
+ (static_cast<uint64_t>(eight_bit_uv) << 32) |
+ (static_cast<uint64_t>(eight_bit_uv) << 48)
+ );
break;
}
diff --git a/src/lib/memory_util.cc b/src/lib/memory_util.cc
index 00117855d..cf8842615 100644
--- a/src/lib/memory_util.cc
+++ b/src/lib/memory_util.cc
@@ -30,12 +30,52 @@ LIBDCP_ENABLE_WARNINGS
void *
-wrapped_av_malloc (size_t s)
+wrapped_av_malloc(size_t s)
{
- auto p = av_malloc (s);
+ auto p = av_malloc(s);
if (!p) {
- throw std::bad_alloc ();
+ throw std::bad_alloc();
}
return p;
}
+
+void
+fill_memory(void* ptr, size_t bytes, uint64_t value)
+{
+ if (bytes == 0) {
+ return;
+ }
+
+ auto const start = std::min(bytes, sizeof(value) - reinterpret_cast<uintptr_t>(ptr) % sizeof(value));
+ auto start_ptr = reinterpret_cast<uint8_t*>(ptr);
+ if (start < 8) {
+ for (auto i = 0UL; i < start; ++i) {
+ *start_ptr++ = value & 0xff;
+ value = (value >> 8) | ((value & 0xff) << 56);
+ }
+
+ bytes -= start;
+ if (bytes == 0) {
+ return;
+ }
+ }
+
+ auto const main = (bytes - (bytes % sizeof(value))) / 8;
+ auto main_ptr = reinterpret_cast<uint64_t*>(start_ptr);
+ for (auto i = 0UL; i < main; ++i) {
+ *main_ptr++ = value;
+ }
+
+ bytes -= main * 8;
+ if (bytes == 0) {
+ return;
+ }
+
+ auto end_ptr = reinterpret_cast<uint8_t*>(main_ptr);
+ for (auto i = 0UL; i < bytes; ++i) {
+ *end_ptr++ = value & 0xff;
+ value = (value >> 8) | ((value & 0xff) << 56);
+ }
+}
+
diff --git a/src/lib/memory_util.h b/src/lib/memory_util.h
index eccc4a857..f6bbe0621 100644
--- a/src/lib/memory_util.h
+++ b/src/lib/memory_util.h
@@ -19,4 +19,9 @@
*/
-extern void* wrapped_av_malloc (size_t);
+#include <cstddef>
+#include <cstdint>
+
+
+extern void* wrapped_av_malloc(size_t);
+extern void fill_memory(void* ptr, size_t bytes, uint64_t value);
diff --git a/src/lib/player.cc b/src/lib/player.cc
index f93327495..cf5429fd5 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -86,6 +86,7 @@ using namespace dcpomatic;
Player::Player(shared_ptr<const Film> film, Image::Alignment subtitle_alignment, bool tolerant)
: _film(film)
, _suspended(0)
+ , _video_container_size(dcp::Size{})
, _ignore_video(false)
, _ignore_audio(false)
, _ignore_text(false)
@@ -94,6 +95,7 @@ Player::Player(shared_ptr<const Film> film, Image::Alignment subtitle_alignment,
, _tolerant(tolerant)
, _play_referenced(false)
, _audio_merger(film->audio_frame_rate())
+ , _playback_length(dcpomatic::DCPTime{})
, _subtitle_alignment(subtitle_alignment)
{
construct();
@@ -104,6 +106,7 @@ Player::Player(shared_ptr<const Film> film, shared_ptr<const Playlist> playlist_
: _film(film)
, _playlist(playlist_)
, _suspended(0)
+ , _video_container_size(dcp::Size{})
, _ignore_video(false)
, _ignore_audio(false)
, _ignore_text(false)
@@ -112,6 +115,7 @@ Player::Player(shared_ptr<const Film> film, shared_ptr<const Playlist> playlist_
, _tolerant(tolerant)
, _play_referenced(false)
, _audio_merger(film->audio_frame_rate())
+ , _playback_length(dcpomatic::DCPTime{})
{
construct();
}
@@ -164,7 +168,7 @@ Player::Player(Player&& other)
, _play_referenced(other._play_referenced.load())
, _next_video_time(other._next_video_time)
, _next_audio_time(other._next_audio_time)
- , _dcp_decode_reduction(other._dcp_decode_reduction.load())
+ , _dcp_decode_reduction(other._dcp_decode_reduction)
, _last_video(std::move(other._last_video))
, _audio_merger(std::move(other._audio_merger))
, _shuffler(std::move(other._shuffler))
@@ -204,7 +208,7 @@ Player::operator=(Player&& other)
_play_referenced = other._play_referenced.load();
_next_video_time = other._next_video_time;
_next_audio_time = other._next_audio_time;
- _dcp_decode_reduction = other._dcp_decode_reduction.load();
+ _dcp_decode_reduction = other._dcp_decode_reduction;
_last_video = std::move(other._last_video);
_audio_merger = std::move(other._audio_merger);
_shuffler = std::move(other._shuffler);
@@ -1554,12 +1558,17 @@ Player::set_dcp_decode_reduction(optional<int> reduction)
{
ChangeSignaller<Player, int> cc(this, PlayerProperty::DCP_DECODE_REDUCTION);
- if (reduction == _dcp_decode_reduction.load()) {
- cc.abort();
- return;
+ {
+ boost::mutex::scoped_lock lm(_mutex);
+
+ if (reduction == _dcp_decode_reduction) {
+ cc.abort();
+ return;
+ }
+
+ _dcp_decode_reduction = reduction;
}
- _dcp_decode_reduction = reduction;
setup_pieces();
}
diff --git a/src/lib/player.h b/src/lib/player.h
index df5db28f0..2ae60c287 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -181,9 +181,10 @@ private:
std::weak_ptr<Piece> weak_piece, std::weak_ptr<const TextContent> weak_content, dcpomatic::ContentTime subtitle_from
) const;
- /** Mutex to protect the most of the Player state. When it's used for the preview we have
- seek() and pass() called from the Butler thread and lots of other stuff called
- from the GUI thread.
+ /** Mutex to protect the player state that is not using std::atomic.
+ * When the player is used for the preview we have seek() and pass()
+ * called from the Butler thread and lots of other stuff called
+ * from the GUI thread.
*/
mutable boost::mutex _mutex;
@@ -221,7 +222,7 @@ private:
/** Time of the next audio that we will emit, or the time of the last accurate seek */
boost::optional<dcpomatic::DCPTime> _next_audio_time;
- std::atomic<boost::optional<int>> _dcp_decode_reduction;
+ boost::optional<int> _dcp_decode_reduction;
EnumIndexedVector<std::pair<std::shared_ptr<PlayerVideo>, dcpomatic::DCPTime>, Eyes> _last_video;
diff --git a/src/lib/po/ja_JP.po b/src/lib/po/ja_JP.po
index 804a2f259..6ec5315d1 100644
--- a/src/lib/po/ja_JP.po
+++ b/src/lib/po/ja_JP.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-04-19 23:03+0200\n"
-"PO-Revision-Date: 2026-04-07 19:21+0900\n"
+"POT-Creation-Date: 2026-02-15 21:03+0100\n"
+"PO-Revision-Date: 2026-04-25 20:27+0900\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: ja_JP\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.8\n"
-#: src/lib/video_content.cc:515
+#: src/lib/video_content.cc:513
#, c-format
msgid ""
"\n"
@@ -27,8 +27,7 @@ msgstr ""
"\n"
"コンテンツのフレームレート %.4f\n"
-#: src/lib/video_content.cc:479
-#, c++-format
+#: src/lib/video_content.cc:477
msgid ""
"\n"
"Cropped to {}x{}"
@@ -36,7 +35,7 @@ msgstr ""
"\n"
"切り抜きサイズ: {}x{}"
-#: src/lib/video_content.cc:469
+#: src/lib/video_content.cc:467
#, c-format
msgid ""
"\n"
@@ -45,8 +44,7 @@ msgstr ""
"\n"
"画面アスペクト比= %.2f:1"
-#: src/lib/video_content.cc:503
-#, c++-format
+#: src/lib/video_content.cc:501
msgid ""
"\n"
"Padded with black to fit container {} ({}x{})"
@@ -54,8 +52,7 @@ msgstr ""
"\n"
"画角に合う黒地入りアクセクト比= {} ({}x{})"
-#: src/lib/video_content.cc:493
-#, c++-format
+#: src/lib/video_content.cc:491
msgid ""
"\n"
"Scaled to {}x{}"
@@ -63,7 +60,7 @@ msgstr ""
"\n"
"スケール= {}x{}"
-#: src/lib/video_content.cc:497 src/lib/video_content.cc:508
+#: src/lib/video_content.cc:495 src/lib/video_content.cc:506
#, c-format
msgid " (%.2f:1)"
msgstr " (%.2f:1)"
@@ -71,11 +68,10 @@ msgstr " (%.2f:1)"
#. TRANSLATORS: the {} in this string will be filled in with a day of the week
#. to say what day a job will finish.
#: src/lib/job.cc:628
-#, c++-format
msgid " on {}"
msgstr ""
-#: src/lib/config.cc:1270
+#: src/lib/config.cc:1266
msgid ""
"$CPL_NAME\n"
"\n"
@@ -99,11 +95,11 @@ msgstr ""
"長さ: $LENGTH\n"
"サイズ: $SIZE\n"
-#: src/lib/config.cc:1248
+#: src/lib/config.cc:1244
msgid "$JOB_NAME: $JOB_STATUS"
msgstr "$処理名: $処理状況"
-#: src/lib/video_content.cc:464
+#: src/lib/video_content.cc:462
#, c-format
msgid ", pixel aspect ratio %.2f:1"
msgstr ", ピクセルアスペクト比= %.2f:1"
@@ -148,11 +144,11 @@ msgstr "1.85 (Flat)"
msgid "1.90 (Full frame)"
msgstr "1.90 (Full frame)"
-#: src/lib/util.cc:622
+#: src/lib/util.cc:628
msgid "10"
msgstr "10"
-#: src/lib/util.cc:628
+#: src/lib/util.cc:634
msgid "16"
msgstr "16"
@@ -176,7 +172,7 @@ msgstr "2.39 (Scope)"
msgid "3D denoiser"
msgstr "3Dノイズ除去"
-#: src/lib/hints.cc:222
+#: src/lib/hints.cc:219
msgid ""
"4K 3D is only supported by a very limited number of projectors. Unless you "
"know that you will play this DCP back on a capable projector, it is "
@@ -186,25 +182,23 @@ msgstr ""
"クターで再生する予定がない場合は「DCP→動画」タブでDCPを2Kに設定することをお勧"
"めします。"
-#: src/lib/util.cc:621
+#: src/lib/util.cc:627
msgid "9"
msgstr "9"
#. TRANSLATORS: fps here is an abbreviation for frames per second
#: src/lib/transcode_job.cc:184
-#, c++-format
msgid "; {} fps"
msgstr "; {} fps"
#: src/lib/job.cc:633
-#, c++-format
msgid "; {} remaining; finishing at {}{}"
msgstr "; 残り時間 {} ; 終了予定 {}{}"
#: src/lib/analytics.cc:58
-#, fuzzy, c++-format
+#, c-format
msgid ""
-"<h2>You have made {} DCPs with {}!</h2><img width=\"150\" height=\"193\" "
+"<h2>You have made {} DCPs with {}!</h2><img width=\"20%%\" "
"src=\"memory:me.jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl "
"and I'm the developer of {}. I work on it in my spare time (with the help of "
"a volunteer team of testers and translators) and I release it as free "
@@ -228,7 +222,7 @@ msgstr ""
"donate_amount?amount=10\">Paypal で €10 を寄付</a></ul><p>ありがとうございま"
"す。</font>"
-#: src/lib/hints.cc:179
+#: src/lib/hints.cc:176
msgid ""
"A few projectors have problems playing back very high bit-rate DCPs. It is "
"a good idea to drop the video bit rate down to about 200Mbit/s; this is "
@@ -239,7 +233,6 @@ msgstr ""
"画像の目に見える影響が出る可能性は低いと思います。"
#: src/lib/text_content.cc:230
-#, c++-format
msgid ""
"A subtitle or closed caption file in this project is marked with the "
"language '{}', which {} does not recognise. The file's language has been "
@@ -256,7 +249,7 @@ msgstr "ARIB STD-B67(ハイブリッドログガンマ/HLG)"
msgid "Advertisement"
msgstr "広告(ADV)"
-#: src/lib/hints.cc:156
+#: src/lib/hints.cc:153
msgid ""
"All of your content is in Scope (2.39:1) but your DCP's container is Flat "
"(1.85:1). This will letter-box your content inside a Flat (1.85:1) frame. "
@@ -268,7 +261,7 @@ msgstr ""
"レターボックス表示されます。「DCP」タブで、DCPのコンテナをスコープ(2.39:1)"
"に設定することをお勧めします。"
-#: src/lib/hints.cc:160
+#: src/lib/hints.cc:157
msgid ""
"All of your content narrower than 1.90:1 but your DCP's container is Scope "
"(2.39:1). This will pillar-box your content. You may prefer to set your "
@@ -279,7 +272,6 @@ msgstr ""
"ペクト比をコンテンツと同じ比率に設定することをお勧めします。"
#: src/lib/job.cc:115
-#, c++-format
msgid "An error occurred whilst handling the file {}."
msgstr "ファイル {} の処理中にエラーが発生しました。"
@@ -291,28 +283,28 @@ msgstr "音声解析中"
msgid "Analysing subtitles"
msgstr "字幕解析中"
-#: src/lib/hints.cc:379
+#: src/lib/hints.cc:384
#, fuzzy
msgid ""
"At least one marker comes after the end of the project and will be ignored."
msgstr "最低1つのマーカーがプロジェクトの終了後に出現しますが、無視されます。"
-#: src/lib/hints.cc:526
+#: src/lib/hints.cc:523
msgid "At least one of your closed caption files is larger than "
msgstr "最低1つの「クローズドキャプション」ファイルが次のサイズより大きいです"
-#: src/lib/hints.cc:520
+#: src/lib/hints.cc:516
#, fuzzy
msgid "At least one of your closed caption files' XML part is larger than "
msgstr ""
"最低1つの「クローズドキャプション」ファイルのXML部分が次のサイズより大きいで"
"す"
-#: src/lib/hints.cc:532
+#: src/lib/hints.cc:531
msgid "At least one of your subtitle files is larger than "
msgstr "最低1つの字幕はサイズが大きいです"
-#: src/lib/hints.cc:490
+#: src/lib/hints.cc:495
msgid ""
"At least one of your subtitle lines has more than 52 characters. It is "
"recommended to make each line 52 characters at most in length."
@@ -320,7 +312,7 @@ msgstr ""
"最低1つの字幕は1行が52文字を超えています。各行の長さは52文字以下にすることを"
"お勧めします。"
-#: src/lib/hints.cc:492
+#: src/lib/hints.cc:497
msgid ""
"At least one of your subtitle lines has more than 79 characters. You should "
"make each line 79 characters at most in length."
@@ -328,13 +320,13 @@ msgstr ""
"最低1つの字幕は1行が79文字を超えています。各行の長さを79文字以下にしてくださ"
"い。"
-#: src/lib/hints.cc:681
+#: src/lib/hints.cc:664
msgid ""
"At least one of your subtitles has more than 3 lines. It is advisable to "
"use no more than 3 lines."
msgstr "最低1つの字幕は3行を超えています。3行以内に収めることをお勧めします。"
-#: src/lib/hints.cc:648
+#: src/lib/hints.cc:631
msgid ""
"At least one of your subtitles lasts less than 15 frames. It is advisable "
"to make each subtitle at least 15 frames long."
@@ -342,7 +334,7 @@ msgstr ""
"最低1つの字幕は15フレーム未満です。各字幕は最低15フレーム以上にすることをお勧"
"めします。"
-#: src/lib/hints.cc:653
+#: src/lib/hints.cc:636
msgid ""
"At least one of your subtitles starts less than 2 frames after the previous "
"one. It is advisable to make the gap between subtitles at least 2 frames."
@@ -350,7 +342,7 @@ msgstr ""
"最低1つの字幕は少なくとも前の字幕から2フレーム以内に始まります。字幕の間隔を2"
"フレーム以上あけることをお勧めします。"
-#: src/lib/hints.cc:724
+#: src/lib/hints.cc:707
msgid ""
"At least one piece of subtitle content has no specified language. It is "
"advisable to set the language for each piece of subtitle content in the "
@@ -361,12 +353,10 @@ msgstr ""
"定することをお勧めします。"
#: src/lib/audio_content.cc:264
-#, c++-format
msgid "Audio will be resampled from {}Hz to {}Hz"
msgstr "音声は {}Hz から {}Hz に再サンプリングされます"
#: src/lib/audio_content.cc:266
-#, c++-format
msgid "Audio will be resampled to {}Hz"
msgstr "オーディオは {}Hz に再サンプリングされます"
@@ -427,20 +417,19 @@ msgstr "ピクセルあたりのビット数"
msgid "Bob Weaver Deinterlacing Filter"
msgstr ""
-#: src/lib/util.cc:623
+#: src/lib/util.cc:629
msgid "BsL"
msgstr "BsL"
-#: src/lib/util.cc:624
+#: src/lib/util.cc:630
msgid "BsR"
msgstr "BsR"
-#: src/lib/util.cc:615
+#: src/lib/util.cc:621
msgid "C"
msgstr "C"
#: src/lib/exceptions.cc:196
-#, c++-format
msgid "CPL {} not found"
msgstr "CPL {} が見つかりません"
@@ -453,15 +442,15 @@ msgid "Cannot contain slashes"
msgstr "スラッシュを含めることはできません"
#: src/lib/exceptions.cc:78
-#, fuzzy, c++-format
+#, fuzzy
msgid "Cannot handle pixel format {} during {}"
msgstr "{} 中にピクセル形式 {} を処理できません"
-#: src/lib/film.cc:1940
+#: src/lib/film.cc:1938
msgid "Cannot make a KDM as this project is not encrypted."
msgstr "このプロジェクトは暗号化されていない為、KDM を作成できません。"
-#: src/lib/util.cc:584
+#: src/lib/util.cc:590
msgid "Centre"
msgstr "Centre"
@@ -544,7 +533,7 @@ msgstr "カラースペース"
msgid "Combine DCPs"
msgstr "複数のDCPを結合"
-#: src/lib/writer.cc:525
+#: src/lib/writer.cc:522
#, fuzzy
msgid "Computing digests"
msgstr "ダイジェストの計算"
@@ -700,8 +689,7 @@ msgstr "結合するコンテンツは同じ字幕ストリームを使用する
msgid "Content to be joined must use the same text language."
msgstr "結合するコンテンツは同じ言語文字を使用する必要があります。"
-#: src/lib/video_content.cc:455
-#, c++-format
+#: src/lib/video_content.cc:453
msgid "Content video is {}x{}"
msgstr "コンテンツ動画=: {}x{}"
@@ -714,7 +702,6 @@ msgid "Copying DCP"
msgstr "DCPのコピー"
#: src/lib/copy_to_drive_job.cc:61
-#, c++-format
msgid "Copying DCPs to {}"
msgstr "DCPを{}にコピーしています"
@@ -723,39 +710,35 @@ msgid "Copying existing asset"
msgstr "既存のassetをコピーする"
#: src/lib/copy_to_drive_job.cc:58
-#, c++-format
msgid ""
"Copying {}\n"
"to {}"
msgstr "{} を {} へコピーしています"
#: src/lib/scp_uploader.cc:56
-#, c++-format
msgid "Could not connect to server {} ({})"
msgstr "サーバー {} ({}) に接続できませんでした"
#: src/lib/scp_uploader.cc:105
-#, fuzzy, c++-format
+#, fuzzy
msgid "Could not create remote directory {} ({})"
msgstr "リモート ディレクトリ {} ({}) を作成できませんでした"
#: src/lib/image_examiner.cc:64
-#, fuzzy, c++-format
+#, fuzzy
msgid "Could not decode JPEG2000 file {} ({})"
msgstr "JPEG2000 ファイル {} ({}) をデコードできませんでした"
#: src/lib/ffmpeg_image_proxy.cc:163
-#, fuzzy, c++-format
+#, fuzzy
msgid "Could not decode image ({})"
msgstr "画像をデコードできませんでした ({})"
#: src/lib/unzipper.cc:77
-#, c++-format
msgid "Could not find file {} in ZIP file"
msgstr "ZIPファイル内にファイル「 {} 」が見つかりませんでした"
#: src/lib/encode_server_finder.cc:197
-#, c++-format
msgid ""
"Could not listen for remote encode servers. Perhaps another instance of {} "
"is running."
@@ -768,31 +751,26 @@ msgid "Could not open downloaded ZIP file"
msgstr "ダウンロードしたZIPファイルを開けませんでした"
#: src/lib/internet.cc:178
-#, c++-format
msgid "Could not open downloaded ZIP file ({}:{}: {})"
msgstr "ダウンロードしたZIPファイルを開けませんでした ({}:{}: {})"
-#: src/lib/config.cc:1172
+#: src/lib/config.cc:1168
msgid "Could not open file for writing"
msgstr "書き込み用のファイルを開けませんでした"
#: src/lib/ffmpeg_file_encoder.cc:282
-#, c++-format
msgid "Could not open output file {} ({})"
msgstr "出力ファイル{}を開けませんでした({})"
#: src/lib/job.cc:179 src/lib/job.cc:194
-#, c++-format
msgid "Could not open {}"
msgstr "{} を開けませんでした"
#: src/lib/curl_uploader.cc:101 src/lib/scp_uploader.cc:121
-#, c++-format
msgid "Could not open {} to send"
msgstr "{} を開き送信できませんでした"
#: src/lib/dcp_subtitle.cc:59
-#, c++-format
msgid "Could not read subtitles ({} / {})"
msgstr "字幕を読み取れませんでした({} / {})"
@@ -801,23 +779,22 @@ msgid "Could not start transfer"
msgstr "転送を開始できませんでした"
#: src/lib/curl_uploader.cc:109 src/lib/scp_uploader.cc:137
-#, c++-format
msgid "Could not write to remote file ({})"
msgstr "リモートファイルへの書き込みができませんでした ({})"
-#: src/lib/util.cc:594
+#: src/lib/util.cc:600
msgid "D-BOX primary"
msgstr "D-BOXプライマリ"
-#: src/lib/util.cc:595
+#: src/lib/util.cc:601
msgid "D-BOX secondary"
msgstr "D-BOX セカンダリ"
-#: src/lib/audio_processor.cc:144 src/lib/util.cc:625
+#: src/lib/audio_processor.cc:144 src/lib/util.cc:631
msgid "DBP"
msgstr "DBP"
-#: src/lib/audio_processor.cc:145 src/lib/util.cc:626
+#: src/lib/audio_processor.cc:145 src/lib/util.cc:632
msgid "DBS"
msgstr "DBS"
@@ -829,16 +806,15 @@ msgstr "DCI Flat"
msgid "DCI Scope"
msgstr "DCI Scope"
-#: src/lib/film.cc:2048
+#: src/lib/film.cc:2046
msgid "DCP"
msgstr "DCP"
-#: src/lib/film.cc:2045
-#, c++-format
+#: src/lib/film.cc:2043
msgid "DCP (via {})"
msgstr "DCP ({}経由)"
-#: src/lib/dcp_subtitle_content.cc:138
+#: src/lib/dcp_subtitle_content.cc:139
msgid "DCP XML subtitles"
msgstr "DCP XML字幕"
@@ -846,12 +822,7 @@ msgstr "DCP XML字幕"
msgid "DCP sample rate"
msgstr "DCPサンプルレート"
-#: src/lib/frame_rate_change.cc:93
-#, fuzzy, c++-format
-msgid "DCP will contain 1 out of every {} frames of the content.\n"
-msgstr "DCP はコンテンツのフレームを 1 つおきに使用します。\n"
-
-#: src/lib/frame_rate_change.cc:103
+#: src/lib/frame_rate_change.cc:101
#, c-format
msgid "DCP will run at %.1f%% of the content speed.\n"
msgstr ""
@@ -862,7 +833,7 @@ msgstr ""
msgid "DCP will use every other frame of the content.\n"
msgstr "DCP はコンテンツのフレームを 1 つおきに使用します。\n"
-#: src/lib/film.cc:1857
+#: src/lib/film.cc:1855
msgid ""
"DCP-o-matic had to set your container to 1920x1080 as it's the only one that "
"can be used with MPEG2 encoding."
@@ -870,7 +841,7 @@ msgstr ""
"DCP-o-matic では MPEG2 エンコーディングに使用できるのは 1920x1080 のみです。"
"その為アスペクト比と解像度を 1920x1080 に変更しましした。"
-#: src/lib/film.cc:1861
+#: src/lib/film.cc:1859
#, fuzzy
msgid ""
"DCP-o-matic had to set your film to 2D as 3D is not yet supported with MPEG2 "
@@ -879,7 +850,7 @@ msgstr ""
"DCP-o-matic では、MPEG2 エンコーディングではまだ 3D がサポートされていないた"
"め、プロジェクトを 2D に設定する必要がありました。"
-#: src/lib/film.cc:1865
+#: src/lib/film.cc:1863
msgid ""
"DCP-o-matic set your container to DCI Flat as it was previously 1920x1080 "
"and that is not a standard ratio with JPEG2000 encoding."
@@ -897,8 +868,7 @@ msgstr "Datasat AP20 or AP25"
msgid "De-interlacing"
msgstr "インターレース解除"
-#: src/lib/config.cc:1233
-#, c++-format
+#: src/lib/config.cc:1229
msgid ""
"Dear Projectionist\n"
"\n"
@@ -925,12 +895,10 @@ msgstr ""
"{}"
#: src/lib/exceptions.cc:178
-#, c++-format
msgid "Disk full when writing {}"
msgstr "書込みディスクが一杯です {}"
#: src/lib/job.cc:268
-#, c++-format
msgid "Disk full while writing {}"
msgstr "書込み中のディスクが一杯です {}"
@@ -939,7 +907,6 @@ msgid "Dolby CP650 or CP750"
msgstr "Dolby CP650 or CP750"
#: src/lib/internet.cc:124
-#, c++-format
msgid "Download failed ({} error {})"
msgstr "ダウンロードに失敗しました ({} エラー {})"
@@ -949,13 +916,13 @@ msgstr "ダウンロードに失敗しました ({} エラー {})"
msgid "EC"
msgstr "EC"
-#: src/lib/frame_rate_change.cc:95
+#: src/lib/frame_rate_change.cc:93
#, fuzzy
msgid "Each content frame will be doubled in the DCP.\n"
msgstr "各コンテンツ フレームは DCP で 2 倍になります。\n"
-#: src/lib/frame_rate_change.cc:97
-#, fuzzy, c++-format
+#: src/lib/frame_rate_change.cc:95
+#, fuzzy
msgid "Each content frame will be repeated {} more times in the DCP.\n"
msgstr "各コンテンツ フレームは DCP 内で {} 回以上繰り返されます。\n"
@@ -964,7 +931,6 @@ msgid "Email KDMs"
msgstr "KDMをメール"
#: src/lib/send_kdm_email_job.cc:96
-#, c++-format
msgid "Email KDMs for {}"
msgstr "{}にKDMを送信"
@@ -977,7 +943,6 @@ msgid "Email problem report"
msgstr "問題レポートをEmailで報告"
#: src/lib/send_problem_report_job.cc:71
-#, c++-format
msgid "Email problem report for {}"
msgstr "{} の問題レポートをメールで送信"
@@ -990,12 +955,11 @@ msgid "Episode"
msgstr "エピソード・物語(EPS)"
#: src/lib/exceptions.cc:85
-#, fuzzy, c++-format
+#, fuzzy
msgid "Error in subtitle file: saw {} while expecting {}"
msgstr "字幕ファイルエラー:saw {} while expecting {}"
#: src/lib/job.cc:655
-#, c++-format
msgid "Error: {}"
msgstr "エラー: {}"
@@ -1003,11 +967,11 @@ msgstr "エラー: {}"
msgid "Event"
msgstr "イベント・行事(EVT)"
-#: src/lib/hints.cc:410
+#: src/lib/hints.cc:415
msgid "Examining audio"
msgstr "音声の検査"
-#: src/lib/hints.cc:412
+#: src/lib/hints.cc:417
msgid "Examining audio, subtitles and closed captions"
msgstr "音声、字幕、クローズドキャプションの検査"
@@ -1019,7 +983,7 @@ msgstr "コンテンツの検査"
msgid "Examining subtitles"
msgstr "字幕の検査"
-#: src/lib/hints.cc:408
+#: src/lib/hints.cc:413
msgid "Examining subtitles and closed captions"
msgstr "字幕とクローズドキャプションの検査"
@@ -1036,7 +1000,7 @@ msgid "FCP XML subtitles"
msgstr "FCP XML字幕"
#: src/lib/scp_uploader.cc:68
-#, fuzzy, c++-format
+#, fuzzy
msgid "Failed to authenticate with server ({})"
msgstr "サーバーとの認証に失敗しました({})"
@@ -1090,7 +1054,6 @@ msgid "Full"
msgstr ""
#: src/lib/ffmpeg_content.cc:562
-#, c++-format
msgid "Full (0-{})"
msgstr ""
@@ -1137,11 +1100,11 @@ msgstr "Gamma 28 (BT470BG)"
msgid "Gradient debander"
msgstr ""
-#: src/lib/audio_processor.cc:142 src/lib/util.cc:619
+#: src/lib/audio_processor.cc:142 src/lib/util.cc:625
msgid "HI"
msgstr "HI"
-#: src/lib/util.cc:588
+#: src/lib/util.cc:594
msgid "Hearing impaired"
msgstr "聴覚障害(HI)"
@@ -1175,11 +1138,11 @@ msgstr "IEC61966-2-4"
msgid "IN"
msgstr ""
-#: src/lib/hints.cc:198
+#: src/lib/hints.cc:195
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
msgstr "25fpsを使用する場合、DCP規格をSMPTEに変更する必要があります。"
-#: src/lib/hints.cc:261
+#: src/lib/hints.cc:258
msgid ""
"In general it is now advisable to make SMPTE DCPs unless you have a "
"particular reason to use Interop. It is advisable to set your DCP to use "
@@ -1189,7 +1152,7 @@ msgstr ""
"勧めします。「DCP」タブで、SMPTE規格を使用するようにDCPを設定することをお勧め"
"します。"
-#: src/lib/hints.cc:641
+#: src/lib/hints.cc:624
msgid ""
"It is advisable to put your first subtitle at least 4 seconds after the "
"start of the DCP to make sure it is seen."
@@ -1198,7 +1161,6 @@ msgstr ""
"することをお勧めします。"
#: src/lib/job.cc:169 src/lib/job.cc:204 src/lib/job.cc:295 src/lib/job.cc:305
-#, c++-format
msgid "It is not known what caused this error. {}"
msgstr "このエラーの原因は不明です。{}"
@@ -1206,7 +1168,7 @@ msgstr "このエラーの原因は不明です。{}"
msgid "JEDEC P22"
msgstr "JEDEC P22"
-#: src/lib/config.cc:422 src/lib/config.cc:1230
+#: src/lib/config.cc:421 src/lib/config.cc:1226
msgid "KDM delivery: $CPL_NAME"
msgstr "KDM配信: $CPL_NAME"
@@ -1216,35 +1178,35 @@ msgid "Kernel deinterlacer"
msgstr "カーネルデインターレース"
#. TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export
-#: src/lib/ffmpeg_film_encoder.cc:265 src/lib/util.cc:613
+#: src/lib/ffmpeg_film_encoder.cc:265 src/lib/util.cc:619
msgid "L"
msgstr "L"
-#: src/lib/mid_side_decoder.cc:106 src/lib/util.cc:582
+#: src/lib/mid_side_decoder.cc:106 src/lib/util.cc:588
msgid "Left"
msgstr "Left"
-#: src/lib/util.cc:590
+#: src/lib/util.cc:596
msgid "Left centre"
msgstr "Left centre"
-#: src/lib/util.cc:592
+#: src/lib/util.cc:598
msgid "Left rear surround"
msgstr "Left rear surround"
-#: src/lib/util.cc:586
+#: src/lib/util.cc:592
msgid "Left surround"
msgstr "Left surround"
-#: src/lib/video_content.cc:528
+#: src/lib/video_content.cc:526
msgid "Length"
msgstr "長さ"
-#: src/lib/util.cc:616
+#: src/lib/util.cc:622
msgid "Lfe"
msgstr "Lfe"
-#: src/lib/util.cc:585
+#: src/lib/util.cc:591
msgid "Lfe (sub)"
msgstr "Lfe (sub)"
@@ -1254,7 +1216,7 @@ msgid "Limited"
msgstr "限定"
#: src/lib/ffmpeg_content.cc:555
-#, fuzzy, c++-format
+#, fuzzy
msgid "Limited / video ({}-{})"
msgstr "限定 / ビデオ ({}-{})"
@@ -1276,7 +1238,7 @@ msgstr "対数(316:1 range)"
msgid "Lost communication between main and writer processes"
msgstr "メインプロセスとライタープロセス間の通信が失われました"
-#: src/lib/util.cc:617
+#: src/lib/util.cc:623
msgid "Ls"
msgstr "Ls"
@@ -1315,7 +1277,6 @@ msgid "Mismatched video sizes in DCP"
msgstr "DCP のビデオ サイズの不一致"
#: src/lib/exceptions.cc:71
-#, c++-format
msgid "Missing required setting {}"
msgstr "必要な設定 {} がありません"
@@ -1371,12 +1332,10 @@ msgid "OK"
msgstr "OK"
#: src/lib/job.cc:652
-#, c++-format
msgid "OK (ran for {} from {} to {})"
-msgstr ""
+msgstr "OK ( 処理時間 {} 、 開始時刻 {} 、 終了時刻 {} )"
#: src/lib/job.cc:650
-#, c++-format
msgid "OK (ran for {})"
msgstr ""
@@ -1398,7 +1357,6 @@ msgid "Open subtitles"
msgstr "字幕を開く"
#: src/lib/transcode_job.cc:113
-#, c++-format
msgid ""
"Open the project in {}, check the settings, then save it before trying again."
msgstr ""
@@ -1431,8 +1389,7 @@ msgstr "P3 D65 (~6500K)"
msgid "P3 DCI (~6300K)"
msgstr "P3 DCI (~6300K)"
-#: src/lib/util.cc:1111
-#, c++-format
+#: src/lib/util.cc:1137
msgid ""
"Please report this problem by using Help -> Report a problem or via email to "
"{}"
@@ -1454,7 +1411,6 @@ msgid "Prepared for video frame rate"
msgstr "動画フレームレートの準備"
#: src/lib/exceptions.cc:106
-#, c++-format
msgid "Programming error at {}:{} {}"
msgstr "プログラミングエラー({}:{} {})"
@@ -1467,7 +1423,7 @@ msgid "Public Service Announcement"
msgstr "公共広告(PSA)"
#. TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export
-#: src/lib/ffmpeg_film_encoder.cc:270 src/lib/util.cc:614
+#: src/lib/ffmpeg_film_encoder.cc:270 src/lib/util.cc:620
msgid "R"
msgstr "R"
@@ -1501,19 +1457,19 @@ msgstr "Rec. 601"
msgid "Rec. 709"
msgstr "Rec. 709"
-#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:583
+#: src/lib/mid_side_decoder.cc:107 src/lib/util.cc:589
msgid "Right"
msgstr "Right"
-#: src/lib/util.cc:591
+#: src/lib/util.cc:597
msgid "Right centre"
msgstr "Right centre"
-#: src/lib/util.cc:593
+#: src/lib/util.cc:599
msgid "Right rear surround"
msgstr "Right rear surround"
-#: src/lib/util.cc:587
+#: src/lib/util.cc:593
msgid "Right surround"
msgstr "Right surround"
@@ -1525,7 +1481,7 @@ msgstr "反時計回りに90度回転"
msgid "Rotate 90 degrees clockwise"
msgstr "時計回りに90度回転"
-#: src/lib/util.cc:618
+#: src/lib/util.cc:624
msgid "Rs"
msgstr "Rs"
@@ -1550,7 +1506,7 @@ msgstr "SMPTE 2085, Y'D'zD'x"
msgid "SMPTE 240M"
msgstr "SMPTE 240M"
-#: src/lib/hints.cc:706
+#: src/lib/hints.cc:689
msgid ""
"SMPTE DCPs with the type FTR (feature) should have markers for the first "
"frame of end credits (FFEC) and the first frame of moving credits (FFMC). "
@@ -1585,13 +1541,11 @@ msgid "SMPTE ST 432-1 D65 (2010)"
msgstr "SMPTE ST 432-1 D65 (2010)"
#: src/lib/scp_uploader.cc:46
-#, c++-format
msgid "SSH error [{}]"
msgstr "SSH エラー [{}]"
#: src/lib/scp_uploader.cc:62 src/lib/scp_uploader.cc:75
#: src/lib/scp_uploader.cc:82
-#, c++-format
msgid "SSH error [{}] ({})"
msgstr "SSH エラー [{}] ({})"
@@ -1611,17 +1565,16 @@ msgstr "メールを送信する"
msgid "Short"
msgstr "短編(SHR)"
-#: src/lib/audio_processor.cc:146 src/lib/util.cc:627
+#: src/lib/audio_processor.cc:146 src/lib/util.cc:633
#, fuzzy
msgid "Sign"
msgstr "サイン"
-#: src/lib/video_content.cc:530
+#: src/lib/video_content.cc:528
msgid "Size"
msgstr "サイズ"
#: src/lib/audio_content.cc:259
-#, c++-format
msgid "Some audio will be resampled to {}Hz"
msgstr "一部の音声は {}Hz に再サンプリングされます"
@@ -1660,14 +1613,13 @@ msgstr ""
"DCP-o-maticのバグ修正により、一部のファイルの再調査が必要です。設定の確認が必"
"要になる場合があります。"
-#: src/lib/hints.cc:622
-#, c++-format
+#: src/lib/hints.cc:605
msgid ""
"Some of your closed captions span more than {} lines, so they will be "
"truncated."
msgstr "字幕の中には{}行を超えるものがある為、途中が途切れて表示されます。"
-#: src/lib/hints.cc:744
+#: src/lib/hints.cc:727
msgid ""
"Some of your content has audio but you have not set the audio language. It "
"is advisable to set the audio language in the \"DCP\" tab unless your audio "
@@ -1677,7 +1629,7 @@ msgstr ""
"ナレーションが含まれていない場合を除き「DCP」タブで音声言語を設定することをお"
"勧めします。"
-#: src/lib/hints.cc:815
+#: src/lib/hints.cc:798
msgid ""
"Some of your content is encrypted, and some not. Though some distributors "
"(e.g. Netflix) require subtitles not to be encrypted (even if picture and "
@@ -1703,8 +1655,7 @@ msgstr "コンテンツの一部にはKDMが必要です"
msgid "Some of your content needs an OV"
msgstr "コンテンツの一部にはOVが必要です"
-#: src/lib/hints.cc:798
-#, c++-format
+#: src/lib/hints.cc:781
msgid ""
"Some of your video content contains an alpha channel, and {} cannot be "
"certain how to process it. Check that your video looks correct in the "
@@ -1767,12 +1718,10 @@ msgid "The certificate chain for signing is invalid"
msgstr "署名用の証明書チェーンが無効です"
#: src/lib/exceptions.cc:99
-#, c++-format
msgid "The certificate chain for signing is invalid ({})"
msgstr "署名用の証明書チェーンが無効です ({})"
-#: src/lib/hints.cc:761
-#, c++-format
+#: src/lib/hints.cc:744
msgid ""
"The certificate chain that {} uses for signing DCPs and KDMs contains a "
"small error which will prevent DCPs from being validated correctly on some "
@@ -1785,8 +1734,7 @@ msgstr ""
"「秘密鍵」ページで「証明書と秘密鍵を再作成する」ボタンをクリックして、署名証"
"明書チェーンを再作成することをお勧めします。"
-#: src/lib/hints.cc:769
-#, c++-format
+#: src/lib/hints.cc:752
msgid ""
"The certificate chain that {} uses for signing DCPs and KDMs has a validity "
"period that is too long. This will cause problems playing back DCPs on some "
@@ -1800,7 +1748,6 @@ msgstr ""
"名証明書チェーンを再作成することをお勧めします。"
#: src/lib/video_decoder.cc:69
-#, c++-format
msgid ""
"The content file {} is set as 3D but does not appear to contain 3D images. "
"Please set it to 2D. You can still make a 3D DCP from this content by "
@@ -1819,26 +1766,22 @@ msgstr ""
"てからもう一度お試しください。"
#: src/lib/playlist.cc:244
-#, c++-format
msgid "The file {} has been moved {} milliseconds earlier."
msgstr "{}は{}ms前に移動されました。"
#: src/lib/playlist.cc:239
-#, c++-format
msgid "The file {} has been moved {} milliseconds later."
msgstr "{}は{}ms後に移動されました。"
#: src/lib/playlist.cc:264
-#, c++-format
msgid "The file {} has been trimmed by {} milliseconds less."
msgstr "{}は{}ms短縮されました。"
#: src/lib/playlist.cc:259
-#, c++-format
msgid "The file {} has been trimmed by {} milliseconds more."
msgstr "{}はさらにに{}ms短縮されました。"
-#: src/lib/hints.cc:270
+#: src/lib/hints.cc:267
msgid ""
"The vast majority of cinemas in Europe, Australasia and North America expect "
"DCPs encoded with JPEG2000 rather than MPEG2. Make sure that your cinema "
@@ -1859,7 +1802,7 @@ msgstr ""
"うになりました。プロジェクト内の字幕が意図した位置に配置されているか、必ず確"
"認してください。"
-#: src/lib/hints.cc:251
+#: src/lib/hints.cc:248
msgid ""
"There is a large difference between the frame rate of your DCP and that of "
"some of your content. This will cause your audio to play back at a much "
@@ -1885,20 +1828,17 @@ msgstr ""
"メモリが不足しています。32ビットオペレーティングシステムを使用している場合、"
"環境設定の「一般」タブでエンコードスレッドの数を減らしてみてください。"
-#: src/lib/util.cc:961
-#, c++-format
+#: src/lib/util.cc:987
msgid "This KDM was made for {} but not for its leaf certificate."
msgstr ""
"このKDMは{}のために作成されたものです。リーフ証明書のために作成されたものでは"
"ありません。"
-#: src/lib/util.cc:959
-#, c++-format
+#: src/lib/util.cc:985
msgid "This KDM was not made for {}'s decryption certificate."
msgstr "このKDMは{}の復号のために作成された証明書ではありません。"
#: src/lib/job.cc:141
-#, c++-format
msgid ""
"This error has probably occurred because you are running the 32-bit version "
"of {} and trying to use too many encoding threads. Please reduce the "
@@ -1910,7 +1850,6 @@ msgstr ""
"を減らして、もう一度お試しください。"
#: src/lib/job.cc:155
-#, c++-format
msgid ""
"This error has probably occurred because you are running the 32-bit version "
"of {}. Please re-install {} with the 64-bit installer and try again."
@@ -1927,7 +1866,6 @@ msgstr ""
"して「KDMを追加」を選択してください。"
#: src/lib/film.cc:556
-#, c++-format
msgid ""
"This film was created with a newer version of {}, and it cannot be loaded "
"into this version. Sorry!"
@@ -1936,7 +1874,6 @@ msgstr ""
"ができません。"
#: src/lib/film.cc:537
-#, c++-format
msgid ""
"This film was created with an older version of {}, and unfortunately it "
"cannot be loaded into this version. You will need to create a new Film, re-"
@@ -1964,7 +1901,6 @@ msgid "Trailer"
msgstr "予告(TLR)"
#: src/lib/transcode_job.cc:74
-#, c++-format
msgid "Transcoding {}"
msgstr "トランスコーディング {}"
@@ -1997,8 +1933,7 @@ msgstr "不明"
msgid "Unknown error"
msgstr "不明なエラー"
-#: src/lib/ffmpeg_decoder.cc:384
-#, c++-format
+#: src/lib/ffmpeg_decoder.cc:377
msgid "Unrecognised audio sample format ({})"
msgstr "認識されていない音声サンプル形式 ({})"
@@ -2019,7 +1954,7 @@ msgstr "未指定"
msgid "Untitled"
msgstr "未使用"
-#: src/lib/util.cc:596 src/lib/util.cc:597
+#: src/lib/util.cc:602 src/lib/util.cc:603
msgid "Unused"
msgstr "未使用"
@@ -2031,7 +1966,7 @@ msgstr "Upmix L"
msgid "Upmix R"
msgstr "Upmix R"
-#: src/lib/audio_processor.cc:143 src/lib/util.cc:620
+#: src/lib/audio_processor.cc:143 src/lib/util.cc:626
msgid "VI"
msgstr "VI"
@@ -2048,11 +1983,10 @@ msgid "Vertical flip"
msgstr "垂直反転"
#: src/lib/fcpxml.cc:69
-#, c++-format
msgid "Video refers to missing asset {}"
msgstr ""
-#: src/lib/util.cc:589
+#: src/lib/util.cc:595
msgid "Visually impaired"
msgstr "視覚障害者"
@@ -2085,8 +2019,7 @@ msgstr "YCgCo-R, 奇数追加"
msgid "Yet Another Deinterlacing Filter"
msgstr ""
-#: src/lib/hints.cc:211
-#, c++-format
+#: src/lib/hints.cc:208
msgid ""
"You are set up for a DCP at a frame rate of {} fps. This frame rate is not "
"supported by all projectors. It is advisable to change the DCP frame rate "
@@ -2096,8 +2029,7 @@ msgstr ""
"ロジェクターで対応している訳ではりません。DCPのフレームレートを{} fpsに変更す"
"ることをお勧めします。"
-#: src/lib/hints.cc:195
-#, c++-format
+#: src/lib/hints.cc:192
msgid ""
"You are set up for a DCP at a frame rate of {} fps. This frame rate is not "
"supported by all projectors. You may want to consider changing your frame "
@@ -2107,7 +2039,7 @@ msgstr ""
"ロジェクターで対応している訳ではりません。DCPのフレームレートを{} fpsに変更す"
"ることをお勧めします。"
-#: src/lib/hints.cc:205
+#: src/lib/hints.cc:202
msgid ""
"You are set up for a DCP frame rate of 30fps, which is not supported by all "
"projectors. Be aware that you may have compatibility problems."
@@ -2116,7 +2048,7 @@ msgstr ""
"トされているわけではありません。互換性の問題が発生する可能性がありますのでご"
"注意ください。"
-#: src/lib/hints.cc:325
+#: src/lib/hints.cc:322
msgid ""
"You are using 3D content but your DCP is set to 2D. Set the DCP to 3D if "
"you want to play it back on a 3D system (e.g. Real-D, MasterImage etc.)"
@@ -2124,8 +2056,7 @@ msgstr ""
"3Dコンテンツを使用していますがDCP設定が2Dになっています。RealD・MasterImageな"
"どの3Dシステムで再生する場合はDCP設定を3Dに設定してください。"
-#: src/lib/hints.cc:128
-#, c++-format
+#: src/lib/hints.cc:125
msgid ""
"You are using {}'s stereo-to-5.1 upmixer. This is experimental and may "
"result in poor-quality audio. If you continue, you should listen to the "
@@ -2135,7 +2066,7 @@ msgstr ""
"的な機能であり音質が低下する可能性があります。続行する場合、生成されたDCPを映"
"画館で試聴して音質が良好であることを確認してください。"
-#: src/lib/film.cc:1794
+#: src/lib/film.cc:1792
#, fuzzy
msgid ""
"You have more than one piece of Atmos content, and they do not have the same "
@@ -2144,7 +2075,7 @@ msgstr ""
"Atmosコンテンツが複数存在し、それらのフレームレートが異なっています。Atmosコ"
"ンテンツの一部を削除する必要があります。"
-#: src/lib/hints.cc:629
+#: src/lib/hints.cc:612
msgid ""
"You have overlapping closed captions, which are not allowed in Interop "
"DCPs. Change your DCP standard to SMPTE."
@@ -2152,7 +2083,7 @@ msgstr ""
"字幕が重複していますが、これはInterop DCPでは許可されていません。DCP規格を"
"SMPTEに変更してください。"
-#: src/lib/hints.cc:293
+#: src/lib/hints.cc:290
msgid ""
"You have specified a font file which is larger than 640kB. This is very "
"likely to cause problems on playback."
@@ -2160,8 +2091,8 @@ msgstr ""
"640KBを超えるフォントファイルが指定されました。再生時に問題が発生する可能性が"
"高くなります。"
-#: src/lib/hints.cc:309
-#, fuzzy, c++-format
+#: src/lib/hints.cc:306
+#, fuzzy
msgid ""
"You have {} files that look like they are VOB files from DVD. You should "
"join them to ensure smooth joins between the files."
@@ -2173,8 +2104,7 @@ msgstr ""
msgid "You must add some content to the DCP before creating it"
msgstr "DCPを作成する前にコンテンツを追加する必要があります"
-#: src/lib/hints.cc:113
-#, c++-format
+#: src/lib/hints.cc:110
msgid ""
"Your DCP has fewer than 6 audio channels. This may cause problems on some "
"projectors. You may want to set the DCP to have 6 channels. It does not "
@@ -2185,8 +2115,7 @@ msgstr ""
"があります。DCP音声を6チャンネルに設定することをおすすめします。コンテンツの"
"音声チャンネル数は6未満でも問題ありませんが{}は余分な部分を無音で埋めます。"
-#: src/lib/hints.cc:787
-#, c++-format
+#: src/lib/hints.cc:770
msgid ""
"Your DCP has {} audio channels, rather than 8 or 16. This may cause some "
"distributors to raise QC errors when they check your DCP. To avoid this, "
@@ -2196,7 +2125,7 @@ msgstr ""
"給会社がDCPチェック時に品質エラーを報告する可能性があります。これを回避するに"
"は、DCPの音声チャンネルを8chまたは16chに設定してください。"
-#: src/lib/hints.cc:170
+#: src/lib/hints.cc:167
msgid ""
"Your DCP uses an unusual container ratio. This may cause problems on some "
"projectors. If possible, use Flat or Scope for the DCP container ratio."
@@ -2205,8 +2134,7 @@ msgstr ""
"性があります。可能であれば、DCPのコンテナ比率をフラットまたはスコープに設定し"
"てください。"
-#: src/lib/hints.cc:359
-#, c++-format
+#: src/lib/hints.cc:356
msgid ""
"Your audio level is very high (on {}). You should reduce the gain of your "
"audio content."
@@ -2237,7 +2165,7 @@ msgstr ""
msgid "[still]"
msgstr ""
-#: src/lib/dcp_subtitle_content.cc:132 src/lib/fcpxml_content.cc:86
+#: src/lib/dcp_subtitle_content.cc:133 src/lib/fcpxml_content.cc:86
#: src/lib/string_text_file_content.cc:111
msgid "[subtitles]"
msgstr ""
@@ -2245,7 +2173,7 @@ msgstr ""
#. TRANSLATORS: _reel{} here is to be added to an export filename to indicate
#. which reel it is. Preserve the {}; it will be replaced with the reel number.
#: src/lib/ffmpeg_film_encoder.cc:151
-#, fuzzy, c++-format
+#, fuzzy
msgid "_reel{}"
msgstr "_リール{}"
@@ -2254,7 +2182,7 @@ msgstr "_リール{}"
msgid "bits"
msgstr "ビット"
-#: src/lib/dcpomatic_socket.cc:86 src/lib/dcpomatic_socket.cc:116
+#: src/lib/dcpomatic_socket.cc:82 src/lib/dcpomatic_socket.cc:112
#, fuzzy
msgid "connect timed out"
msgstr "接続時間超過"
@@ -2269,7 +2197,6 @@ msgid "content type"
msgstr "コンテンツ種類"
#: src/lib/uploader.cc:79
-#, c++-format
msgid "copying {}"
msgstr ""
@@ -2278,57 +2205,47 @@ msgid "could not find stream information"
msgstr "ストリーム情報が見つかりませんでした"
#: src/lib/reel_writer.cc:408
-#, fuzzy, c++-format
+#, fuzzy
msgid "could not move atmos asset into the DCP ({})"
msgstr "atmosアセットをDCPに移動できませんでした ({})"
#: src/lib/reel_writer.cc:391
-#, c++-format
msgid "could not move audio asset into the DCP ({})"
msgstr "音声AssetをDCPに移動できませんでした({})"
#: src/lib/exceptions.cc:38
-#, c++-format
msgid "could not open file {} for read ({})"
msgstr "{} を読込み用に開けませんでした ({})"
#: src/lib/exceptions.cc:37
-#, c++-format
msgid "could not open file {} for read/write ({})"
msgstr "{} を読書き用に開けませんでした ({})"
#: src/lib/exceptions.cc:38
-#, c++-format
msgid "could not open file {} for write ({})"
msgstr "{} を書込み用に開けませんでした ({})"
#: src/lib/exceptions.cc:57
-#, c++-format
msgid "could not read from file {} ({})"
msgstr "ファイル {} ({}) から読み取れませんでした"
#: src/lib/exceptions.cc:64
-#, c++-format
msgid "could not write to file {} ({})"
msgstr "{} への書き込みができませんでした ({})"
-#: src/lib/dcpomatic_socket.cc:112
-#, c++-format
+#: src/lib/dcpomatic_socket.cc:108
msgid "error during async_connect ({})"
msgstr ""
-#: src/lib/dcpomatic_socket.cc:82
-#, c++-format
+#: src/lib/dcpomatic_socket.cc:78
msgid "error during async_connect: ({})"
msgstr ""
-#: src/lib/dcpomatic_socket.cc:204
-#, c++-format
+#: src/lib/dcpomatic_socket.cc:200
msgid "error during async_read ({})"
msgstr ""
-#: src/lib/dcpomatic_socket.cc:163
-#, c++-format
+#: src/lib/dcpomatic_socket.cc:159
msgid "error during async_write ({})"
msgstr ""
@@ -2348,7 +2265,6 @@ msgid "it has a different frame rate to the film."
msgstr "filmとはフレームレートが異なります。"
#: src/lib/dcp_content.cc:799
-#, c++-format
msgid ""
"it has a different number of audio channels than the project; set the "
"project to have {} channels."
@@ -2462,42 +2378,38 @@ msgstr ""
msgid "unknown"
msgstr "不明"
-#: src/lib/video_content.cc:528
+#: src/lib/video_content.cc:526
msgid "video frames"
msgstr "動画フレーム"
#: src/lib/cross_common.cc:106
-#, c++-format
msgid "{} ({} GB) [{}]"
msgstr "{} ({} GB) [{}]"
#: src/lib/atmos_mxf_content.cc:95
-#, c++-format
msgid "{} [Atmos]"
msgstr "{} [Atmos]"
#: src/lib/dcp_content.cc:381
-#, c++-format
msgid "{} [DCP]"
msgstr "{} [DCP]"
#: src/lib/ffmpeg_content.cc:345
-#, fuzzy, c++-format
+#, fuzzy
msgid "{} [audio]"
msgstr "{} [音声]"
#: src/lib/ffmpeg_content.cc:341
-#, fuzzy, c++-format
+#, fuzzy
msgid "{} [movie]"
msgstr "{} [ムービー]"
#: src/lib/ffmpeg_content.cc:343 src/lib/video_mxf_content.cc:105
-#, fuzzy, c++-format
+#, fuzzy
msgid "{} [video]"
msgstr "{} [ビデオ]"
#: src/lib/job.cc:180 src/lib/job.cc:195
-#, c++-format
msgid ""
"{} could not open the file {} ({}). Perhaps it does not exist or is in an "
"unexpected format."
@@ -2505,8 +2417,7 @@ msgstr ""
"{} はファイル {} ({}) を開けませんでした。ファイルが存在しないか、予期しない"
"形式の可能性があります。"
-#: src/lib/film.cc:1831
-#, c++-format
+#: src/lib/film.cc:1829
msgid ""
"{} had to change your settings for referring to DCPs as OV. Please review "
"those settings to make sure they are what you want."
@@ -2514,8 +2425,8 @@ msgstr ""
"{}はDCPをOVとして参照するために設定を変更する必要がありました。設定を確認し、"
"正しいことを確認してください。"
-#: src/lib/film.cc:1797
-#, fuzzy, c++-format
+#: src/lib/film.cc:1795
+#, fuzzy
msgid ""
"{} had to change your settings so that the film's frame rate is the same as "
"that of your Atmos content."
@@ -2523,8 +2434,8 @@ msgstr ""
"{} は、映画のフレームレートが Atmos コンテンツのフレームレートと同じになるよ"
"うに設定を変更する必要がありました。"
-#: src/lib/film.cc:1844
-#, fuzzy, c++-format
+#: src/lib/film.cc:1842
+#, fuzzy
msgid ""
"{} had to remove one of your custom reel boundaries as it no longer lies "
"within the film."
@@ -2532,8 +2443,8 @@ msgstr ""
"{} は、カスタム リール境界の 1 つがフィルム内に収まらなくなったため、削除する"
"必要がありました。"
-#: src/lib/film.cc:1842
-#, fuzzy, c++-format
+#: src/lib/film.cc:1840
+#, fuzzy
msgid ""
"{} had to remove some of your custom reel boundaries as they no longer lie "
"within the film."
@@ -2542,16 +2453,14 @@ msgstr ""
"それらを削除する必要がありました。"
#: src/lib/ffmpeg_content.cc:114
-#, fuzzy, c++-format
+#, fuzzy
msgid "{} no longer supports the `{}' filter, so it has been turned off."
msgstr "{} は `{}' フィルターをサポートしなくなったため、オフになりました。"
-#: src/lib/config.cc:432 src/lib/config.cc:1245
-#, c++-format
+#: src/lib/config.cc:431 src/lib/config.cc:1241
msgid "{} notification"
msgstr "{} 通知"
#: src/lib/transcode_job.cc:181
-#, c++-format
msgid "{}; {}/{} frames"
msgstr "{}; {}/{} フレーム"
diff --git a/src/lib/po/zh_CN.po b/src/lib/po/zh_CN.po
index a575f752b..db2ab4731 100644
--- a/src/lib/po/zh_CN.po
+++ b/src/lib/po/zh_CN.po
@@ -13,15 +13,15 @@ msgstr ""
"Project-Id-Version: LIBDCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-19 23:03+0200\n"
-"PO-Revision-Date: 2025-10-05 13:31+0800\n"
+"PO-Revision-Date: 2026-05-17 10:45+0800\n"
"Last-Translator: Dian Li <xslidian@gmail.com>\n"
-"Language-Team: Chinese Simplified (Rov8 branch)\n"
+"Language-Team: Chinese Simplified (Hanyuan branch)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 3.7\n"
+"X-Generator: Poedit 3.9\n"
"X-Poedit-SourceCharset: UTF-8\n"
#: src/lib/video_content.cc:515
@@ -207,7 +207,7 @@ msgid "; {} remaining; finishing at {}{}"
msgstr "; 剩余 {} ; 完成于 {}{}"
#: src/lib/analytics.cc:58
-#, fuzzy, c++-format
+#, c++-format
msgid ""
"<h2>You have made {} DCPs with {}!</h2><img width=\"150\" height=\"193\" "
"src=\"memory:me.jpg\" align=\"center\"><font size=\"+1\"><p>Hello. I'm Carl "
@@ -429,7 +429,7 @@ msgstr "中置"
#: src/lib/exceptions.cc:196
#, c++-format
msgid "CPL {} not found"
-msgstr ""
+msgstr "未找到CPL {}"
#: src/lib/job.cc:657
msgid "Cancelled"
@@ -461,6 +461,8 @@ msgid ""
"Check the server settings in the TMS tab of preferences, or un-tick \"Upload "
"DCP to TMS after creation\" if you do not want to upload your DCP."
msgstr ""
+"在首选项的TMS页面中检查服务器设置,或者您不想要上传DCP的话,则取消选中“制作"
+"DCP后上传到TMS)复选框"
#: src/lib/transcode_job.cc:106
msgid "Check their new settings, then try again."
@@ -682,9 +684,8 @@ msgid "Copying DCPs to {}"
msgstr "复制DCP到 {}"
#: src/lib/reel_writer.cc:194
-#, fuzzy
msgid "Copying existing asset"
-msgstr "检查现有的图像数据"
+msgstr "正在拷贝已经存在的资产"
#: src/lib/copy_to_drive_job.cc:58
#, c++-format
@@ -811,9 +812,9 @@ msgid "DCP sample rate"
msgstr "DCP 采样率"
#: src/lib/frame_rate_change.cc:93
-#, fuzzy, c++-format
+#, c++-format
msgid "DCP will contain 1 out of every {} frames of the content.\n"
-msgstr "将使用隔帧打包DCP。\n"
+msgstr "DCP 将包含内容中每 {} 帧中的 1 帧。\n"
#: src/lib/frame_rate_change.cc:103
#, c-format
@@ -904,9 +905,8 @@ msgstr "下载失败 ({} error {})"
#. TRANSLATORS: this is an abbreviation for "end credits", shown next to the pair of markers
#. "FFEC" and "LFEC" ({First, Last} Frame of End Credits)
#: src/lib/layout_markers.cc:145
-#, fuzzy
msgid "EC"
-msgstr "中置"
+msgstr "片尾字幕"
#: src/lib/frame_rate_change.cc:95
msgid "Each content frame will be doubled in the DCP.\n"
@@ -1128,7 +1128,7 @@ msgstr "IEC61966-2-4"
#. "FFOI" and "LFOI" ({First, Last} Frame of Intermission)
#: src/lib/layout_markers.cc:142
msgid "IN"
-msgstr ""
+msgstr "幕间休息"
#: src/lib/hints.cc:198
msgid "If you do use 25fps you should change your DCP standard to SMPTE."
@@ -1231,9 +1231,8 @@ msgstr "左环绕"
#. TRANSLATORS: this is an abbreviation for "moving credits", shown next to the pair of markers
#. "FFMC" and "LFMC" ({First, Last} Frame of Moving Credits)
#: src/lib/layout_markers.cc:148
-#, fuzzy
msgid "MC"
-msgstr "中置"
+msgstr "滚动字幕"
#: src/lib/mid_side_decoder.cc:39
msgid "Mid-side decoder"
@@ -1279,12 +1278,11 @@ msgstr "动态隔行补偿"
#: src/lib/dcp_content.cc:212
msgid "No ASSETMAP or ASSETMAP.xml file found: is this a DCP?"
-msgstr ""
+msgstr "未找到ASSETMAP或ASSETMAP.xml文件,这是一个DCP吗?"
#: src/lib/dcp_examiner.cc:115
-#, fuzzy
msgid "No CPLs found in DCP"
-msgstr "DCP中没有找到CPL文件。"
+msgstr "DCP中没有找到CPL文件"
#: src/lib/dcp_decoder.cc:114
msgid "No CPLs found in DCP."
@@ -1362,15 +1360,15 @@ msgstr "小波降噪"
#: src/lib/colour_conversion.cc:293
msgid "P3 D60 (~6000K)"
-msgstr ""
+msgstr "P3 D60 (~6000K)"
#: src/lib/colour_conversion.cc:292
msgid "P3 D65 (~6500K)"
-msgstr ""
+msgstr "P3 D65 (~6500K)"
#: src/lib/colour_conversion.cc:291
msgid "P3 DCI (~6300K)"
-msgstr ""
+msgstr "P3 DCI (~6300K)"
#: src/lib/util.cc:1111
#, c++-format
@@ -1412,9 +1410,8 @@ msgstr "右声道"
#. TRANSLATORS: this is an abbreviation for "ratings band", shown next to the pair of markers
#. "FFOB" and "LFOB" ({First, Last} Frame of Band)
#: src/lib/layout_markers.cc:136
-#, fuzzy
msgid "RB"
-msgstr "右声道"
+msgstr "评级"
#: src/lib/ffmpeg_content.cc:644
msgid "RGB / sRGB (IEC61966-2-1)"
@@ -1503,9 +1500,8 @@ msgid "SMPTE ST 2084 for 10, 12, 14 and 16 bit systems"
msgstr "SMPTE ST 2084 10, 12, 14和16 bit"
#: src/lib/ffmpeg_content.cc:660
-#, fuzzy
msgid "SMPTE ST 2128, IPT-C2"
-msgstr "SMPTE ST 428-1"
+msgstr "SMPTE ST 2128, IPT-C2"
#: src/lib/ffmpeg_content.cc:636
msgid "SMPTE ST 428-1"
@@ -1589,14 +1585,12 @@ msgstr ""
"这些文件现在将被重新检查,因此您可能需要检查它们的设置。"
#: src/lib/check_content_job.cc:94
-#, fuzzy
msgid ""
"Some files must be re-examined due to a bug fix in DCP-o-matic. You may "
"need to check their settings."
msgstr ""
-"有些文件在添加到项目后发生了更改\n"
-"\n"
-"这些文件现在将被重新检查,因此您可能需要检查它们的设置。"
+"由于 DCP-o-matic 中的一个漏洞修复,某些文件必须重新检查。您可能需要检查它们的"
+"设置。"
#: src/lib/hints.cc:622
#, c++-format
@@ -1622,6 +1616,9 @@ msgid ""
"in doubt, set everything (picture, sound and text) to be either encrypted or "
"not."
msgstr ""
+"你的一些内容是加密的,而有些则不是。虽然一些分销商(例如 Netflix)要求字幕不"
+"能加密(即使画面和声音可以加密),但其他分销商会对由此项目生成的 DCP 标记错"
+"误。如果不确定,请将所有内容(画面、声音和文字)设置为加密或不加密。"
#: src/lib/make_dcp.cc:69
msgid "Some of your content is missing"
@@ -1670,9 +1667,8 @@ msgstr "星期日"
#. TRANSLATORS: this is an abbreviation for "title credits", shown next to the pair of markers
#. "FFTC" and "LFTC" ({First, Last} Frame of Title Credits)
#: src/lib/layout_markers.cc:139
-#, fuzzy
msgid "TC"
-msgstr "中置"
+msgstr "标题字幕"
#: src/lib/dcp_content_type.cc:60
msgid "Teaser"
@@ -1987,11 +1983,11 @@ msgstr "YCOCG"
#: src/lib/ffmpeg_content.cc:661
msgid "YCgCo-R, even addition"
-msgstr ""
+msgstr "YCgCo-R,偶数叠加编码"
#: src/lib/ffmpeg_content.cc:662
msgid "YCgCo-R, odd addition"
-msgstr ""
+msgstr "YCgCo-R,奇数叠加编码"
#: src/lib/filter.cc:98
msgid "Yet Another Deinterlacing Filter"
@@ -2313,11 +2309,10 @@ msgstr "名字"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
#: src/lib/dcp_content.cc:829
-#, fuzzy
msgid ""
"one of its closed caption reels has a non-zero entry point so it must be re-"
"written."
-msgstr "它的一个隐藏字幕有一个非零的时间点,因此必须重写。"
+msgstr "它的一个隐藏字幕卷有一个非零的起始点,因此必须重写。"
#. TRANSLATORS: this string will follow "Cannot reference this DCP: "
#: src/lib/dcp_content.cc:823
diff --git a/src/lib/raw_image_proxy.cc b/src/lib/raw_image_proxy.cc
index 9e819140b..e54163e9e 100644
--- a/src/lib/raw_image_proxy.cc
+++ b/src/lib/raw_image_proxy.cc
@@ -19,6 +19,7 @@
*/
+#include "dcpomatic_assert.h"
#include "raw_image_proxy.h"
#include "image.h"
#include <dcp/util.h>
@@ -47,7 +48,7 @@ using boost::optional;
RawImageProxy::RawImageProxy(shared_ptr<const Image> image)
: _image (image)
{
-
+ DCPOMATIC_ASSERT(image);
}
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index b85b53305..76c1f8124 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -591,6 +591,7 @@ ReelWriter::create_reel_sound(shared_ptr<dcp::Reel> reel, list<ReferencedReelAss
}
+/** @param ensure_closed_captions List of DCPTextTracks that we need to make sure exist in this reel */
void
ReelWriter::create_reel_text(
shared_ptr<dcp::Reel> reel,
@@ -630,17 +631,30 @@ ReelWriter::create_reel_text(
}
}
- for (auto const& i: _closed_caption_assets) {
- auto a = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>(
- i.second, dcp::TextType::CLOSED_CAPTION, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only
+ for (auto iter = ensure_closed_captions.begin(); iter != ensure_closed_captions.end(); ) {
+ /* Find any asset we wrote for this track */
+ auto written_asset = _closed_caption_assets.find(*iter);
+
+ /* Try to make a reel asset out of either written_asset or one of the referenced assets */
+ auto asset = maybe_add_text<dcp::ReelInteropTextAsset, dcp::ReelSMPTETextAsset, dcp::ReelTextAsset>(
+ written_asset == _closed_caption_assets.end() ? shared_ptr<dcp::TextAsset>() : written_asset->second,
+ dcp::TextType::CLOSED_CAPTION, duration, reel, _reel_index, _reel_count, _content_summary, refs, film(), _period, output_dcp, _text_only
);
- DCPOMATIC_ASSERT(a);
- a->set_annotation_text(i.first.name);
- if (i.first.language) {
- a->set_language(i.first.language.get());
+
+ /* Fill in some details for the reel asset if we know them */
+ if (asset && written_asset != _closed_caption_assets.end()) {
+ asset->set_annotation_text(written_asset->first.name);
+ if (written_asset->first.language) {
+ asset->set_language(written_asset->first.language.get());
+ }
}
- ensure_closed_captions.erase(i.first);
+ if (asset) {
+ /* We made a reel asset for this track, so we don't need to worry about it any more */
+ iter = ensure_closed_captions.erase(iter);
+ } else {
+ ++iter;
+ }
}
/* Make empty tracks for anything we've been asked to ensure but that we haven't added */