summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2024-06-24 23:01:13 +0200
committerCarl Hetherington <cth@carlh.net>2024-06-24 23:01:13 +0200
commit6675bba6ab7d5cee50fa4d8c892af69d054c6804 (patch)
treefeee88dc93797235a1b19d02851f93a3161c1851
parentcb6b0865614761df9c0ecc0f9dabc6b41de65659 (diff)
Add ProRes LT export option (#2834).
-rw-r--r--src/lib/export_config.cc6
-rw-r--r--src/lib/ffmpeg_file_encoder.cc8
-rw-r--r--src/lib/ffmpeg_file_encoder.h1
-rw-r--r--src/wx/export_video_file_dialog.cc7
-rw-r--r--test/ffmpeg_encoder_test.cc4
5 files changed, 24 insertions, 2 deletions
diff --git a/src/lib/export_config.cc b/src/lib/export_config.cc
index 4dfbb9027..79042e59c 100644
--- a/src/lib/export_config.cc
+++ b/src/lib/export_config.cc
@@ -65,6 +65,8 @@ ExportConfig::read(cxml::ConstNodePtr node)
_format = ExportFormat::H264_AAC;
} else if (format == "prores-4444") {
_format = ExportFormat::PRORES_4444;
+ } else if (format == "prores-lt") {
+ _format = ExportFormat::PRORES_LT;
} else {
_format = ExportFormat::PRORES_HQ;
}
@@ -89,6 +91,9 @@ ExportConfig::write(xmlpp::Element* element) const
/* Write this but we also accept 'prores' for backwards compatibility */
name = "prores-hq";
break;
+ case ExportFormat::PRORES_LT:
+ name = "prores-lt";
+ break;
case ExportFormat::H264_AAC:
name = "h264-aac";
break;
@@ -138,4 +143,3 @@ ExportConfig::set_x264_crf(int crf)
{
_config->maybe_set(_x264_crf, crf);
}
-
diff --git a/src/lib/ffmpeg_file_encoder.cc b/src/lib/ffmpeg_file_encoder.cc
index 4547a8e8e..dfc0205ac 100644
--- a/src/lib/ffmpeg_file_encoder.cc
+++ b/src/lib/ffmpeg_file_encoder.cc
@@ -241,6 +241,13 @@ FFmpegFileEncoder::FFmpegFileEncoder (
av_dict_set (&_video_options, "profile", "3", 0);
av_dict_set (&_video_options, "threads", "auto", 0);
break;
+ case ExportFormat::PRORES_LT:
+ _sample_format = AV_SAMPLE_FMT_S32;
+ _video_codec_name = "prores_ks";
+ _audio_codec_name = "pcm_s24le";
+ av_dict_set(&_video_options, "profile", "1", 0);
+ av_dict_set(&_video_options, "threads", "auto", 0);
+ break;
case ExportFormat::H264_AAC:
_sample_format = AV_SAMPLE_FMT_FLTP;
_video_codec_name = "libx264";
@@ -292,6 +299,7 @@ FFmpegFileEncoder::pixel_format (ExportFormat format)
case ExportFormat::PRORES_4444:
return AV_PIX_FMT_YUV444P10;
case ExportFormat::PRORES_HQ:
+ case ExportFormat::PRORES_LT:
return AV_PIX_FMT_YUV422P10;
case ExportFormat::H264_AAC:
return AV_PIX_FMT_YUV420P;
diff --git a/src/lib/ffmpeg_file_encoder.h b/src/lib/ffmpeg_file_encoder.h
index 907eca53d..a365f463a 100644
--- a/src/lib/ffmpeg_file_encoder.h
+++ b/src/lib/ffmpeg_file_encoder.h
@@ -48,6 +48,7 @@ enum class ExportFormat
{
PRORES_4444,
PRORES_HQ,
+ PRORES_LT,
H264_AAC,
SUBTITLES_DCP
};
diff --git a/src/wx/export_video_file_dialog.cc b/src/wx/export_video_file_dialog.cc
index 611985602..6e32a8514 100644
--- a/src/wx/export_video_file_dialog.cc
+++ b/src/wx/export_video_file_dialog.cc
@@ -22,6 +22,7 @@
#include "check_box.h"
#include "export_video_file_dialog.h"
#include "file_picker_ctrl.h"
+#include "lib/ffmpeg_file_encoder.h"
#include "wx_util.h"
#include "lib/config.h"
#include <dcp/warnings.h>
@@ -35,30 +36,34 @@ using std::string;
using boost::bind;
-int constexpr FORMATS = 3;
+int constexpr FORMATS = 4;
wxString format_names[] = {
_("MOV / ProRes 4444"),
_("MOV / ProRes HQ"),
+ _("MOV / ProRes LT"),
_("MP4 / H.264"),
};
wxString format_filters[] = {
_("MOV files (*.mov)|*.mov"),
_("MOV files (*.mov)|*.mov"),
+ _("MOV files (*.mov)|*.mov"),
_("MP4 files (*.mp4)|*.mp4"),
};
wxString format_extensions[] = {
"mov",
"mov",
+ "mov",
"mp4",
};
ExportFormat formats[] = {
ExportFormat::PRORES_4444,
ExportFormat::PRORES_HQ,
+ ExportFormat::PRORES_LT,
ExportFormat::H264_AAC,
};
diff --git a/test/ffmpeg_encoder_test.cc b/test/ffmpeg_encoder_test.cc
index b42ff92d8..0a48cd745 100644
--- a/test/ffmpeg_encoder_test.cc
+++ b/test/ffmpeg_encoder_test.cc
@@ -69,6 +69,10 @@ ffmpeg_content_test (int number, boost::filesystem::path content, ExportFormat f
name += "prores-hq";
extension = "mov";
break;
+ case ExportFormat::PRORES_LT:
+ name += "prores-lt";
+ extension = "mov";
+ break;
case ExportFormat::SUBTITLES_DCP:
BOOST_REQUIRE (false);
}