Resolve Converter
Batch-convert video both ways between MP4 and MOV — a native PyQt6 desktop app for Linux:
- MP4 → MOV — turn standard
H.264/H.265 + AACvideos into DaVinci-safeMJPEG video + PCM 16-bit audioinside a QuickTime.mov, so the free tier of DaVinci Resolve can import them. - MOV → MP4 — convert those DaVinci-safe
.movs back into compact, broadly playableH.264 + AAC.mp4files for normal playback and sharing.
# forward: into DaVinci Resolve
ffmpeg -i input.mp4 -c:v mjpeg -q:v 3 -c:a pcm_s16le output.mov
# reverse: back to a shareable file
ffmpeg -i input.mov -c:v libx264 -crf 18 -c:a aac output.mp4
| Direction | Video | Audio | Why |
|---|---|---|---|
| MP4 → MOV | MJPEG (-q:v 3) |
PCM s16le | DaVinci free reads both natively |
| MOV → MP4 | H.264 (-crf 18) |
AAC 192k | compact, plays anywhere |
DaVinci Resolve's free version on Linux cannot decode H.264/H.265 — the codecs almost every phone / camera / recorder produces. Drop in a folder of
.mp4s to get them into Resolve, then send the finished.movs back through the app for shareable.mp4s again.
Features
- Add
.mp4and.movfiles — batch, individually, or mixed in one queue. Each file's direction is picked from its own format (.mp4→.mov,.mov→.mp4), so there's nothing to configure - Add via buttons, a whole folder, or drag & drop
- Queue table with per-file status and live progress bars
- Runs up to 2 ffmpeg jobs in parallel without ever freezing the UI
- Global progress weighted by file size, plus a live ffmpeg console pane
- Dark, distraction-free theme that fits Hyprland/Omarchy setups
Install
pip install resolve-converter # or: pipx install resolve-converter
Runtime dependency: ffmpeg and ffprobe on your PATH.
sudo pacman -S ffmpeg # Arch / Omarchy
sudo apt install ffmpeg # Debian / Ubuntu
sudo dnf install ffmpeg # Fedora
Register with your desktop launcher
resolve-converter --install-desktop-entry
This installs the .desktop entry and icon into ~/.local/share/... and
refreshes the desktop database, so the app shows up in Quickshell, GNOME, KDE,
etc. Re-run it after moving to a different Python environment.
Usage
- + Add Files… or + Add Folder… (or drag
.mp4/.movfiles onto the window) — a mixed list is fine, each file converts to its counterpart. - Output — leave blank to write each file into a
Converted/subfolder next to its source; or pick one destination folder for everything. - ▶ Start Conversion — up to 2 parallel ffmpeg jobs; the UI never freezes.
- ■ Stop terminates running jobs and marks the rest as cancelled.
Status colors: Pending gray · Processing cyan · Completed green ·
Failed red · Cancelled amber · Skipped dim (when "Overwrite existing
files" is off and the output file already exists).
Development
git clone <your-repo-url> && cd resolve-converter
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
python -m unittest discover -s tests
Building & publishing
pip install build twine
python -m build
python -m twine check dist/*
python -m twine upload --repository testpypi dist/* # try TestPyPI first
python -m twine upload dist/* # then PyPI
Notes & caveats
- Forward output is big. MJPEG is a JPEG per frame and PCM is uncompressed —
a DaVinci-safe
.movis typically 5–10× its.mp4source. Import straight to Resolve, edit, then use the MOV → MP4 pass to get a compact, shareable file back. - Reverse output is small.
libx264+ AAC shrink that MJPEG/PCM.movdramatically — expect a file close to the original.mp4's size. - Encoding defaults live in the
RESOLVE_MODE/PLAYBACK_MODEobjects (encode_args) insrc/resolve_converter/__init__.py. Forward quality is-q:v 3(2 = better, 4+ = smaller); reverse is libx264-crf 18(lower = better quality, larger file) with-movflags +faststartfor streaming. - Files whose output already exists are overwritten by default — uncheck Overwrite existing files to skip instead.
License
MIT — see LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file resolveconverter-1.1.0.tar.gz.
File metadata
- Download URL: resolveconverter-1.1.0.tar.gz
- Upload date:
- Size: 19.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09a3dc8a41dc79a9f42c0208b8356d862c0f8e10ed4862e3300d3cb9f8d00900
|
|
| MD5 |
39888df5de2a6dd6b82acaa755641076
|
|
| BLAKE2b-256 |
5f9413c6e1bfeed54293e1afc82c5f53db7a75f09870c5ebfbf867a89301efc4
|
Provenance
The following attestation bundles were made for resolveconverter-1.1.0.tar.gz:
Publisher:
workflow.yml on CloudSnapManage/resolveconverter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resolveconverter-1.1.0.tar.gz -
Subject digest:
09a3dc8a41dc79a9f42c0208b8356d862c0f8e10ed4862e3300d3cb9f8d00900 - Sigstore transparency entry: 2767923226
- Sigstore integration time:
-
Permalink:
CloudSnapManage/resolveconverter@5c5890a505ac9521d65c569aed2225cccc161217 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/CloudSnapManage
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@5c5890a505ac9521d65c569aed2225cccc161217 -
Trigger Event:
push
-
Statement type:
File details
Details for the file resolveconverter-1.1.0-py3-none-any.whl.
File metadata
- Download URL: resolveconverter-1.1.0-py3-none-any.whl
- Upload date:
- Size: 16.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b86f79c2bf96b441031b845a4c47108eec2912d3eebd9cf0563e488eb64c75fc
|
|
| MD5 |
9a36460190d61478fca3c13c349d4418
|
|
| BLAKE2b-256 |
7a4a90d9728ae6c41a0308df108fbbeecf2a01aa5194719b0dafe4f726774577
|
Provenance
The following attestation bundles were made for resolveconverter-1.1.0-py3-none-any.whl:
Publisher:
workflow.yml on CloudSnapManage/resolveconverter
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resolveconverter-1.1.0-py3-none-any.whl -
Subject digest:
b86f79c2bf96b441031b845a4c47108eec2912d3eebd9cf0563e488eb64c75fc - Sigstore transparency entry: 2767923264
- Sigstore integration time:
-
Permalink:
CloudSnapManage/resolveconverter@5c5890a505ac9521d65c569aed2225cccc161217 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/CloudSnapManage
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@5c5890a505ac9521d65c569aed2225cccc161217 -
Trigger Event:
push
-
Statement type: