Skip to content

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)
  • OpenCV 4+ (for image processing)

Optional: LibRaw (for RAW image processing)

Runtime Dependencies (optional):

  • FFmpeg (for video and audio 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 build dependencies required, needs the runtime dependencies)
  • Windows: Download fconvert-vX.X.X-windows-x86_64.zip (no build dependencies required, needs the runtime dependencies)
  • macOS: There is no official release of fconvert for macOS. Try building it manually following the CMake build instructions.

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 run fconvert. If you are executing the binary locally from the build folder, run ./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 valid.

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

Dependency-Hell

Linux: Arch Based

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

# Runtime:
$ sudo pacman -Syyu ffmpeg 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 opencv-devel LibRaw-devel

# Runtime:
$ sudo dnf install ffmpeg-free 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 libopencv-dev libraw-dev

# Runtime:
$ sudo apt install ffmpeg 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 opencv4 libraw

# Runtime:
> vcpkg install ffmpeg 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 opencv libraw

# Runtime:
$ brew install ffmpeg 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

Note: The official Arch Linux repos have moved to OpenCV5. If you have manually build/installed OpenCV4, it is recommended that you build fconvert with OpenCV4. OpenCV5 works fine, it is just more bloated with AI vision functionallity that fconvert doesn't really need.

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

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages