fixed problems

This commit is contained in:
tkmxqrdxddd
2024-10-19 15:57:57 +02:00
parent ba28ea0c9b
commit b4c0399399
3 changed files with 82 additions and 46 deletions

View File

@@ -3,25 +3,25 @@
# 'make clean' removes all .o and executable files # 'make clean' removes all .o and executable files
# #
# define the Cpp compiler to use # Define the C++ compiler to use
CXX = g++ CXX = g++
# define any compile-time flags # Define any compile-time flags
CXXFLAGS = -std=c++17 -Wall -Wextra -g CXXFLAGS = -std=c++17 -Wall -Wextra -g
# define output directory # Define output directory
OUTPUT = output OUTPUT = output
# define source directory # Define source directory
SRC = src SRC = src
# define the main executable name # Define the main executable name
MAIN = davinci-convert MAIN = davinci-convert
# define the C source files # Define the C source files
SOURCES = $(wildcard $(SRC)/*.cpp) SOURCES = $(wildcard $(SRC)/*.cpp)
# define the C object files # Define the C object files
OBJECTS = $(SOURCES:.cpp=.o) OBJECTS = $(SOURCES:.cpp=.o)
OUTPUTMAIN = $(OUTPUT)/$(MAIN) OUTPUTMAIN = $(OUTPUT)/$(MAIN)

View File

@@ -93,4 +93,4 @@ echo "Installing the application..."
sudo make install sudo make install
# Inform the user about the executable # Inform the user about the executable
echo "You can run the application using davinci-convert" echo "You can run the application using 'davinci-convert'"

View File

@@ -2,30 +2,45 @@
#include <string> #include <string>
#include <thread> #include <thread>
#include <cstdlib> #include <cstdlib>
#include <cstring>
#include <filesystem>
class VideoConverter { class VideoConverter {
private:
bool conversionInProgress;
public: public:
VideoConverter() : conversionInProgress(false) {} void startConversion(const std::string &inputFile, const std::string &outputFile);
void startConversion(const std::string &inputFile, const std::string &outputFile) { private:
bool conversionInProgress = false;
};
void VideoConverter::startConversion(const std::string &inputFile, const std::string &outputFile) {
if (conversionInProgress) { if (conversionInProgress) {
std::cerr << "Error: Conversion already in progress." << std::endl; std::cerr << "Error: Conversion already in progress." << std::endl;
return; return;
} }
if (inputFile.empty() || outputFile.empty()) { if (inputFile.empty()) {
std::cerr << "Error: Please enter both input and output file names." << std::endl; std::cerr << "Error: Please provide an input file name." << std::endl;
return; return;
} }
// Determine the output path
std::filesystem::path outputPath;
if (outputFile.empty()) {
// If no output file is specified, create one in the current directory
outputPath = std::filesystem::current_path() / (std::filesystem::path(inputFile).stem().string() + ".mov");
} else {
outputPath = std::filesystem::path(outputFile);
if (outputPath.extension() != ".mov") {
outputPath += ".mov";
}
}
conversionInProgress = true; conversionInProgress = true;
std::cout << "Starting conversion..." << std::endl; std::cout << "Starting conversion..." << std::endl;
std::thread conversionThread([this, inputFile, outputFile]() { std::thread([this, inputFile, outputPath]() {
std::string command = "ffmpeg -i \"" + inputFile + "\" -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -c:a alac \"" + outputFile + "\""; std::string command = "ffmpeg -i \"" + inputFile + "\" -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -c:a alac \"" + outputPath.string() + "\" 2> ffmpeg_error.log";
int result = std::system(command.c_str()); int result = std::system(command.c_str());
conversionInProgress = false; conversionInProgress = false;
@@ -34,21 +49,42 @@ public:
} else { } else {
std::cerr << "Error: Conversion failed with exit code " << result << std::endl; std::cerr << "Error: Conversion failed with exit code " << result << std::endl;
} }
}); }).detach();
conversionThread.detach(); // Detach the thread to allow it to run independently
} }
};
int main() { void printHelp() {
std::cout << "Usage: davinci-convert /path/to/video [--output /path/to/output/folder]\n";
std::cout << "Options:\n";
std::cout << " /path/to/video Path to the input video file.\n";
std::cout << " --output /path/to/output/folder Path to the output video file (optional).\n";
std::cout << " --help Show this help message.\n";
}
int main(int argc, char *argv[]) {
VideoConverter converter; VideoConverter converter;
std::string inputFile, outputFile; std::string inputFile, outputFile;
std::cout << "Welcome to the Video Converter!" << std::endl; if (argc < 2) {
std::cout << "Enter the input file path: "; printHelp();
std::getline(std::cin, inputFile); return 1;
std::cout << "Enter the output file path: "; }
std::getline(std::cin, outputFile);
// The first argument is the input file
inputFile = argv[1];
// Parse the remaining arguments
for (int i = 2; i < argc; i++) {
if (std::strcmp(argv[i], "--output") == 0 && i + 1 < argc) {
outputFile = argv[++i];
} else if (std::strcmp(argv[i], "--help") == 0) {
printHelp();
return 0;
} else {
std::cerr << "Unknown option: " << argv[i] << std::endl;
printHelp();
return 1;
}
}
converter.startConversion(inputFile, outputFile); converter.startConversion(inputFile, outputFile);