Skip to content

Eraldo-Bako/fconvert

Repository files navigation

fconvert is a fast, intentional, and hardware-agnostic C++ command-line utility. Designed for Arch Linux and other Unix-like systems, it provides a seamless way to convert images, videos, and audio files using a smart "Sandbox" directory logic.


Key Features

  • Smart Routing: Automatically detects intent. Extract audio from a video by running: fconvert -f movie.mp4 -mp3.
  • Sandbox Workflow: Automatically monitors the input_file/ directory and outputs to output_file/ directory to keep your system clean.
  • Conflict Resolution: Handles existing files gracefully (auto-renaming or prompt-to-overwrite).
  • CLI & Interactive: Use rapid flags for automation or the guided menu for ease of use.
  • Hardware Agnostic: Optimized for high-quality CPU encoding, ensuring portability across different environments.

Supported Formats

Type Category Extensions Operation
IMAGES STANDARD IMAGES jpg, jpeg, png, webp, tiff, bmp OpenCV
CAMERA RAW cr2, nef, arw, dng, crw LibRAW + OpenCV
VECTOR/COMPOSITE psd, svg, pdf, gif, ico, xcf, eps, ai ImageMagick + Ghostscript
MODERN COMPRESSED heic, heif ImageMagick + OpenCV
AUDIO UNCOMPRESSED wav, aiff, pcm, dsd FFmpeg
LOSSLESS COMPRESSED flac, alac, wavpack FFmpeg
LOSSY COMPRESSED mp3, ogg, aac, m4a, opus, wma FFmpeg
VIDEO COMPRESSED/DELIVERY mp4, mkv, mov, m4v FFmpeg
WEB OPTIMIZED webm, ogg FFmpeg
EDITING/INTERMEDIATE prores, dnxhr, dnxhd FFmpeg
HARDWARE/ACQUISITION avchd, mpeg2 FFmpeg
LEGACY avi, wmv, flv, f4v, 3gp, 3g2 FFmpeg
eBOOK DOCUMENTS pdf, epub, html, txt, docx Pandoc

Note: Inputting a video file with an audio target extension (e.g.: .mp4 to -mp3) will automatically trigger a high-quality audio extraction.


Installation

Prerequisites

Ensure you have the following installed on your system:

Build Dependencies:

  • C++17 compatible compiler (GCC/Clang)
  • FFmpeg (for video and audio processing)
  • OpenCV 4+ (for image processing)

Runtime Dependencies (optional):

  • LibRaw (for RAW image processing)
  • ImageMagick (for vector/composite)
  • Ghostscript (for vector/composite)
  • Pandoc (for experimental document processing)
  • Typst, Weasyprint, or Xelatex (as a PDF engine)

Installation (Universal)

Download the latest release in the Releases Page of the repository.

  • Linux: Download fconvert-vX.X.X-x86_64.AppImage (no dependencies required, contains the full program)
  • Windows: Download fconvert-vX.X.X-windows-x86_64.zip (no dependencies required, contains the full program)
  • macOS: There is no official release of fconvert for macOS. Try building it manually following the build instructions below.

Installation (Arch Linux)

Clone the repo and use makepkg to install system-wide:

$ git clone https://github.com/Eraldo-Bako/fconvert
$ cd fconvert
$ makepkg -si

Note: You could use a package helper like yay or paru since the package is in the AUR: yay -S fconvert or paru -S fconvert

Usage

Note: If you installed the package system-wide, you can simply use fconvert. If you are running the binary locally from the build folder, use ./fconvert.

Quick Convert (CLI Mode)

Convert a file instantly without entering the menu:

fconvert -f image.png -webp
fconvert -f music.wav -flac
fconvert -f video.mp4 -mov
fconvert -f video.mp4 -mp3  # Automatically extracts high-quality audio
fconvert -f video.mp4 .mp3  # Valid form, added in version 2.0.3

Interactive Mode

Simply run fconvert in your terminal or the executable to enter the guided interface:

$ fconvert
   __                              _   
  / _|                            | |  
 | |_ ___ ___  _ ____   _____ _ __| |_ 
 |  _/ __/ _ \| '_ \ \ / / _ \ '__| __|
 | || (_| (_) | | | \ V /  __/ |  | |_ 
 |_| \___\___/|_| |_|\_/ \___|_|   \__|

 ---------------------------- File Converter ----------------------------
 ----- A fast CLI converter for Images, Videos, Audios, and Ebooks! -----
 ------------------------------------------------------------------------
    
Convert [I]mage / [V]ideo / [A]udio / [E]book / [Q]uit: 

Sandbox Logic

  1. Place your files in the input_file/ folder.
  2. Run fconvert.
  3. Find your processed files in the output_file/ folder.

Flags

  • -v, --version : Show package version and licensing information.
  • -h, --help : Show the help message and supported formats.
  • -l, --list : Show a list of the supported formats.
  • -d, --debug: Enable debug mode for detailed path-resolution logging.
  • -cc, --clear-cache: Clear the saved cache and log files of fconvert

  • -f <file> -<ext>: Execute a quick conversion.
  • -f <file> .<ext>: Alternatively, using .<ext> is a valid usage.

  • -i, -intr, -interactive: Explicitly start in CLI interactive mode.

Dependency-Hell

Linux: Arch Based

# Build:
$ sudo pacman -Syyu base-devel cmake ffmpeg opencv

# Runtime:
$ sudo pacman -Syyu libraw imagemagick ghostscript libheif libde265 x265
$ sudo pacman -Syyu pandoc typst 

NOTE: For Arch-based distributions typst is recommended, but you can use:

Weasyprint: $ sudo pacman -S python-weasyprint

Xelatex: $ sudo pacman -S texlive-xetex

Linux: Fedora Based

# Build:
$ sudo dnf check-update && sudo dnf upgrade
$ sudo dnf install @development-tools && sudo dnf install cmake ffmpeg-free opencv-devel

# Runtime:
$ sudo dnf install LibRaw-devel ImageMagick ghostscript libheif-devel libde265-devel x265-devel
$ sudo dnf install pandoc weasyprint

NOTE: If you want to use typst as the PDF engine, for Fedora-based distributions, use copr:

Enable the community Copr repository: $ sudo dnf copr enable -y claaj/typst

Install via DNF normally: $ sudo dnf install typst

Linux: Debian Based(Ubuntu)

# Build:
$ sudo apt update && sudo apt install build-essential cmake ffmpeg libopencv-dev

# Runtime:
$ sudo apt install libraw-dev imagemagick ghostscript libheif-dev libde265-dev libx265-dev
$ sudo apt install pandoc weasyprint

Windows (winget for tools, vcpkg for libraries)

# Build:
> winget install Microsoft.VisualStudio.2022.BuildTools --override "--add Microsoft.VisualStudio.Workload.VCTools"
> winget install Kitware.CMake
> vcpkg install ffmpeg opencv4

# Runtime:
> vcpkg install libraw graphicsmagick libheif libde265 x265
> winget install JohnMacFarlane.Pandoc 
> winget install Typst.Typst

NOTE: If you installed the optional packages(graphicsmagick/imagemagick), get and install ghostscript for Windows: gs00000w64.exe

macOS

# Build (Requires Xcode Command Line Tools installed):
$ xcode-select --install
$ brew install cmake ffmpeg opencv

# Runtime:
$ brew install libraw imagemagick ghostscript libheif libde265 x265
$ brew install pandoc typst

Build Instructions

For universal compatibility use CMake:

$ cd fconvert
$ cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DWITH_LIBRAW=ON 
# set -DWITH_LIBRAW=OFF if not needed
$ cmake --build build --config Release

Note: If you built it locally using CMake, the executable will be inside the build/ directory (run with ./build/fconvert on Linux/macOS or .\build\Release\fconvert.exe on Windows).

Building with GCC - For the majority of up-to-date Linux distributions, use one of the following g++ commands:

$ cd fconvert
# Linux
$ g++ -std=c++17 -O3 -s main.cpp classes/*.cpp classes/program/*.cpp -o fconvert $(pkg-config --cflags --libs opencv4 libraw) $CXXFLAGS $LDFLAGS
# Arch Based
$ g++ -std=c++17 -O3 -s main.cpp classes/*.cpp classes/program/*.cpp -o fconvert $(pkg-config --cflags --libs opencv5 libraw) $CXXFLAGS $LDFLAGS
# omit libraw if not needed

Contributing

Contributions are welcome! If you find a bug or have a feature request, please open an issue and then submit a pull request with your version of the fix/feature. Before contributing, you are expected to have read & understood and to follow our Guidelines and Code of Conduct.

License

Disclaimer

Please use this utility responsibly and comply with relevant copyright laws. The authors are not responsible for any misuse of this software.

About

fconvert is a CLI file converter powered by a high-performance C++ engine. It seamlessly converts between a wide variety of formats, including images, video, audio, and documents. The utility offers a user-friendly standard interface alongside an advanced mode tailored for debugging and command-line power users.

Topics

Resources

License

Code of conduct

Contributing

Stars

1 star

Watchers

1 watching

Forks

Packages

 
 
 

Contributors