find starting number for image sequences automatically

This commit is contained in:
itsmattkc
2019-02-26 10:58:55 -08:00
parent 8ba58acbc3
commit 1ae3b877a1
7 changed files with 54 additions and 13 deletions
+2
View File
@@ -290,6 +290,8 @@ bool LoadThread::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
f->proxy = (attr.value() == "1");
} else if (attr.name() == "proxypath") {
f->proxy_path = attr.value().toString();
} else if (attr.name() == "startnumber") {
f->start_number = attr.value().toInt();
}
}
+9 -1
View File
@@ -524,7 +524,15 @@ void PreviewGenerator::run() {
QString errorStr;
bool error = false;
int errCode = avformat_open_input(&fmt_ctx_, filename, nullptr, nullptr);
AVDictionary* format_opts = nullptr;
// for image sequences that don't start at 0, set the index where it does start
if (footage_->start_number > 0) {
av_dict_set(&format_opts, "start_number", QString::number(footage_->start_number).toUtf8(), 0);
}
int errCode = avformat_open_input(&fmt_ctx_, filename, nullptr, &format_opts);
if(errCode != 0) {
char err[1024];
av_strerror(errCode, err, 1024);
+7 -1
View File
@@ -47,9 +47,15 @@ void ProxyGenerator::transcode(const ProxyInfo& info) {
// set progress to 0
current_progress = 0.0;
// for image sequences that don't start at 0, set the index where it does start
AVDictionary* format_opts = nullptr;
if (footage->start_number > 0) {
av_dict_set(&format_opts, "start_number", QString::number(footage->start_number).toUtf8(), 0);
}
// open input file
AVFormatContext* input_fmt_ctx = nullptr;
avformat_open_input(&input_fmt_ctx, footage->url.toUtf8(), nullptr, nullptr);
avformat_open_input(&input_fmt_ctx, footage->url.toUtf8(), nullptr, &format_opts);
// open output file
AVFormatContext* output_fmt_ctx = nullptr;
+17
View File
@@ -740,7 +740,11 @@ void Project::process_file_list(QStringList& files, bool recursive, Media* repla
if (lastcharindex == 0) lastcharindex++;
// used for image sequences that don't start at "0"
int start_number = 0;
if (found && file[lastcharindex-1].isDigit()) {
bool is_img_sequence = false;
// how many digits are in the filename?
@@ -787,6 +791,17 @@ void Project::process_file_list(QStringList& files, bool recursive, Media* repla
QMessageBox::Yes) == QMessageBox::Yes) {
file = new_filename;
image_sequence_importassequence.append(true);
// try to find the start number for this image sequence
int test_file_number = file_number;
do {
test_file_number--;
} while (QFileInfo::exists(QString("%1%2%3").arg(file.left(digit_test),
QString("%1").arg(test_file_number, digit_count, 10, QChar('0')),
file.mid(lastcharindex))));
start_number = test_file_number + 1;
} else {
image_sequence_importassequence.append(false);
}
@@ -809,6 +824,7 @@ void Project::process_file_list(QStringList& files, bool recursive, Media* repla
m->using_inout = false;
m->url = file;
m->name = get_file_name_from_path(files.at(i));
m->start_number = start_number;
item->set_footage(m);
@@ -1028,6 +1044,7 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only,
stream.writeAttribute("out", QString::number(f->out));
stream.writeAttribute("speed", QString::number(f->speed));
stream.writeAttribute("alphapremul", QString::number(f->alpha_is_premultiplied));
stream.writeAttribute("startnumber", QString::number(f->start_number));
stream.writeAttribute("proxy", QString::number(f->proxy));
stream.writeAttribute("proxypath", f->proxy_path);
+11 -10
View File
@@ -27,16 +27,17 @@
#include "project/clip.h"
Footage::Footage() :
ready(false),
preview_gen(nullptr),
invalid(false),
in(0),
out(0),
speed(1.0),
alpha_is_premultiplied(false),
proxy(false)
{
Footage::Footage() {
ready = (false);
preview_gen = (nullptr);
invalid = (false);
in = (0);
out = (0);
speed = (1.0);
alpha_is_premultiplied = (false);
proxy = (false);
start_number = 0;
ready_lock.lock();
}
+1
View File
@@ -82,6 +82,7 @@ struct Footage {
bool invalid;
double speed;
bool alpha_is_premultiplied;
int start_number;
// proxy config
bool proxy;
+7 -1
View File
@@ -781,12 +781,18 @@ void Cacher::OpenWorker() {
const char* filename = ba.constData();
const FootageStream* ms = clip->media_stream();
// for image sequences that don't start at 0, set the index where it does start
AVDictionary* format_opts = nullptr;
if (m->start_number > 0) {
av_dict_set(&format_opts, "start_number", QString::number(m->start_number).toUtf8(), 0);
}
formatCtx = nullptr;
int errCode = avformat_open_input(
&formatCtx,
filename,
nullptr,
nullptr
&format_opts
);
if (errCode != 0) {
char err[1024];