9 Commits
1.0.0 ... main

Author SHA1 Message Date
Tkmxqrd
64cde37777 Update build.sh 2024-11-19 10:36:32 +01:00
Tkmxqrd
0b8b922e5d edited build.sh 2024-11-19 10:36:12 +01:00
tkmxqrdxddd
f46e7b4465 fixed ci.yml 2024-10-19 21:57:27 +02:00
tkmxqrdxddd
32ab30b370 fixed ci.yml 2024-10-19 21:55:24 +02:00
tkmxqrdxddd
7dcf7200ca fixed ci.yml 2024-10-19 21:52:24 +02:00
tkmxqrdxddd
c4918446b9 fixed ci.yml 2024-10-19 21:24:12 +02:00
tkmxqrdxddd
a5cda7e500 fixed error log output 2024-10-19 21:20:24 +02:00
tkmxqrdxddd
b4c0399399 fixed problems 2024-10-19 15:57:57 +02:00
Tkmxqrd
ba28ea0c9b Update README.md 2024-10-19 14:58:43 +02:00
5 changed files with 96 additions and 53 deletions

View File

@@ -15,12 +15,19 @@ jobs:
uses: actions/checkout@v2
- name: Install Dependencies
run: sudo apt-get install -y build-essential ffmpeg
run: sudo apt-get install -y build-essential ffmpeg wget
- name: Create Tests Directory
run: mkdir -p tests # Create the tests directory if it doesn't exist
- name: Download Sample Video
run: wget -O tests/sample_video.mp4 https://www.pexels.com/video/3195394/download/
- name: Build
run: make
run: |
g++ -o davinci-convert src/main.cpp -lstdc++fs
- name: Run
run: |
echo "Running the Video Converter..."
./output/davinci-convert
./davinci-convert tests/sample_video.mp4 --output tests/output/video.mov

View File

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

View File

@@ -21,8 +21,8 @@ Before building and running the application, ensure you have the following insta
1. Clone the repository:
```bash
git clone https://github.com/tkmxqrdxddd/DavinciVideoConverter.git
cd DavinciVideoConverter
git clone (https://github.com/tkmxqrdxddd/davinci-video-converter)
cd davinci-video-converter
```
2. Run the build script to install dependencies and build the project:

View File

@@ -26,7 +26,7 @@ install_redhat_dependencies() {
# Function to install dependencies for Arch Linux
install_arch_dependencies() {
echo "Installing dependencies for Arch Linux..."
sudo pacman -Syu --noconfirm base-devel ffmpeg || {
sudo pacman -S --noconfirm base-devel ffmpeg || {
echo "Failed to install dependencies for Arch Linux."
exit 1
}
@@ -90,7 +90,7 @@ fi
# Install the application
echo "Installing the application..."
sudo make install
make install
# 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,53 +2,89 @@
#include <string>
#include <thread>
#include <cstdlib>
#include <cstring>
#include <filesystem>
class VideoConverter {
private:
bool conversionInProgress;
public:
VideoConverter() : conversionInProgress(false) {}
void startConversion(const std::string &inputFile, const std::string &outputFile);
void startConversion(const std::string &inputFile, const std::string &outputFile) {
if (conversionInProgress) {
std::cerr << "Error: Conversion already in progress." << std::endl;
return;
}
if (inputFile.empty() || outputFile.empty()) {
std::cerr << "Error: Please enter both input and output file names." << std::endl;
return;
}
conversionInProgress = true;
std::cout << "Starting conversion..." << std::endl;
std::thread conversionThread([this, inputFile, outputFile]() {
std::string command = "ffmpeg -i \"" + inputFile + "\" -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -c:a alac \"" + outputFile + "\"";
int result = std::system(command.c_str());
conversionInProgress = false;
if (result == 0) {
std::cout << "Video conversion completed successfully." << std::endl;
} else {
std::cerr << "Error: Conversion failed with exit code " << result << std::endl;
}
});
conversionThread.detach(); // Detach the thread to allow it to run independently
}
private:
bool conversionInProgress = false;
};
int main() {
void VideoConverter::startConversion(const std::string &inputFile, const std::string &outputFile) {
if (conversionInProgress) {
std::cerr << "Error: Conversion already in progress." << std::endl;
return;
}
if (inputFile.empty()) {
std::cerr << "Error: Please provide an input file name." << std::endl;
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;
std::cout << "Starting conversion..." << std::endl;
std::thread([this, inputFile, outputPath]() {
std::string command = "ffmpeg -i \"" + inputFile + "\" -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -c:a alac \"" + outputPath.string() + "\" 2> /dev/null";
int result = std::system(command.c_str());
conversionInProgress = false;
if (result == 0) {
std::cout << "Video conversion completed successfully." << std::endl;
} else {
std::cerr << "Error: Conversion failed with exit code " << result << std::endl;
}
}).detach();
}
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;
std::string inputFile, outputFile;
std::cout << "Welcome to the Video Converter!" << std::endl;
std::cout << "Enter the input file path: ";
std::getline(std::cin, inputFile);
std::cout << "Enter the output file path: ";
std::getline(std::cin, outputFile);
if (argc < 2) {
printHelp();
return 1;
}
// 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);