PyVideoKit-GUI 0.2.0__py3-none-any.whl → 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyvideokit_gui/convert_panel.py +11 -4
- pyvideokit_gui/fade_panel.py +1 -8
- {pyvideokit_gui-0.2.0.dist-info → pyvideokit_gui-0.3.0.dist-info}/METADATA +138 -1
- {pyvideokit_gui-0.2.0.dist-info → pyvideokit_gui-0.3.0.dist-info}/RECORD +8 -8
- {pyvideokit_gui-0.2.0.dist-info → pyvideokit_gui-0.3.0.dist-info}/WHEEL +0 -0
- {pyvideokit_gui-0.2.0.dist-info → pyvideokit_gui-0.3.0.dist-info}/entry_points.txt +0 -0
- {pyvideokit_gui-0.2.0.dist-info → pyvideokit_gui-0.3.0.dist-info}/licenses/LICENSE +0 -0
- {pyvideokit_gui-0.2.0.dist-info → pyvideokit_gui-0.3.0.dist-info}/top_level.txt +0 -0
pyvideokit_gui/convert_panel.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
|
-
from PySide6.QtWidgets import QLabel, QSpinBox, QVBoxLayout
|
|
3
|
+
from PySide6.QtWidgets import QCheckBox, QHBoxLayout, QLabel, QSpinBox, QVBoxLayout
|
|
4
4
|
|
|
5
5
|
from pyvideokit_gui._base_panel import BasePanel
|
|
6
6
|
from pyvideokit_libs import convert_to_ffv1
|
|
@@ -10,11 +10,17 @@ class ConvertPanel(BasePanel):
|
|
|
10
10
|
def _build_ui(self, layout: QVBoxLayout):
|
|
11
11
|
self._input = self._input_row(layout, "Input file")
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
fps_row = QHBoxLayout()
|
|
14
|
+
self._fps_override = QCheckBox("Override FPS")
|
|
14
15
|
self._fps = QSpinBox()
|
|
15
16
|
self._fps.setRange(1, 240)
|
|
16
17
|
self._fps.setValue(60)
|
|
17
|
-
|
|
18
|
+
self._fps.setEnabled(False)
|
|
19
|
+
self._fps_override.toggled.connect(self._fps.setEnabled)
|
|
20
|
+
fps_row.addWidget(self._fps_override)
|
|
21
|
+
fps_row.addWidget(self._fps)
|
|
22
|
+
fps_row.addStretch()
|
|
23
|
+
layout.addLayout(fps_row)
|
|
18
24
|
|
|
19
25
|
self._output = self._output_row(layout, "Output MKV (optional)")
|
|
20
26
|
|
|
@@ -24,4 +30,5 @@ class ConvertPanel(BasePanel):
|
|
|
24
30
|
self._status.setText("❌ Select an input file.")
|
|
25
31
|
return
|
|
26
32
|
output = self._output.text().strip() or None
|
|
27
|
-
self.
|
|
33
|
+
fps = self._fps.value() if self._fps_override.isChecked() else None
|
|
34
|
+
self._start_worker(convert_to_ffv1, Path(path), fps=fps, output=output)
|
pyvideokit_gui/fade_panel.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
|
-
from PySide6.QtWidgets import QDoubleSpinBox, QHBoxLayout, QLabel,
|
|
3
|
+
from PySide6.QtWidgets import QDoubleSpinBox, QHBoxLayout, QLabel, QVBoxLayout
|
|
4
4
|
|
|
5
5
|
from pyvideokit_gui._base_panel import BasePanel
|
|
6
6
|
from pyvideokit_libs import fade_video
|
|
@@ -30,12 +30,6 @@ class FadePanel(BasePanel):
|
|
|
30
30
|
row.addLayout(fo_col)
|
|
31
31
|
layout.addLayout(row)
|
|
32
32
|
|
|
33
|
-
layout.addWidget(QLabel("FPS"))
|
|
34
|
-
self._fps = QSpinBox()
|
|
35
|
-
self._fps.setRange(1, 240)
|
|
36
|
-
self._fps.setValue(60)
|
|
37
|
-
layout.addWidget(self._fps)
|
|
38
|
-
|
|
39
33
|
self._output = self._output_row(layout, "Output (optional)")
|
|
40
34
|
|
|
41
35
|
def _run(self):
|
|
@@ -54,6 +48,5 @@ class FadePanel(BasePanel):
|
|
|
54
48
|
Path(path),
|
|
55
49
|
fade_in=fi,
|
|
56
50
|
fade_out=fo,
|
|
57
|
-
fps=self._fps.value(),
|
|
58
51
|
output=output,
|
|
59
52
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PyVideoKit-GUI
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: GUI for PyVideoKit — FFmpeg-based video processing
|
|
5
5
|
Author-email: Evilchuck666 <carlos.martinez.medina1992@gmail.com>
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -687,3 +687,140 @@ License-File: LICENSE
|
|
|
687
687
|
Requires-Dist: PySide6>=6.0
|
|
688
688
|
Requires-Dist: PyVideoKit-Libs
|
|
689
689
|
Dynamic: license-file
|
|
690
|
+
|
|
691
|
+
# 🎬 PyVideoKit-GUI
|
|
692
|
+
|
|
693
|
+

|
|
694
|
+

|
|
695
|
+
|
|
696
|
+
Graphical interface for PyVideoKit — FFmpeg-based video processing. Provides the same operations as [PyVideoKit-CLI](../PyVideoKit-CLI) through a PySide6 desktop application with real-time progress tracking.
|
|
697
|
+
|
|
698
|
+
---
|
|
699
|
+
|
|
700
|
+
## ✨ Features
|
|
701
|
+
|
|
702
|
+
- 📼 **VHS effect** — retro visual noise, color bleed, and audio degradation
|
|
703
|
+
- ✂️ **Trim** — cut a segment by start/end time with stream copy (no re-encoding)
|
|
704
|
+
- 🔗 **Concatenate** — join multiple videos with drag-and-drop reordering
|
|
705
|
+
- 🎬 **Fade** — fade-in and/or fade-out on an FFV1 master
|
|
706
|
+
- 🔊 **Extract audio** — dump the audio track to uncompressed WAV (PCM 16-bit)
|
|
707
|
+
- 🎞️ **Convert to FFV1** — create a lossless MKV master for editing
|
|
708
|
+
- 📺 **Prepare for YouTube** — encode to ProRes 422 HQ MOV, upscaled to 4K
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
## 📦 Requirements
|
|
713
|
+
|
|
714
|
+
- **Python** ≥ 3.10
|
|
715
|
+
- **PySide6** ≥ 6.0
|
|
716
|
+
- **FFmpeg** and **FFprobe** available in `PATH`
|
|
717
|
+
- **SoX** available in `PATH` (required by VHS effect)
|
|
718
|
+
- **PyVideoKit-Libs** — installed automatically as a dependency
|
|
719
|
+
|
|
720
|
+
---
|
|
721
|
+
|
|
722
|
+
## 🔧 Installation
|
|
723
|
+
|
|
724
|
+
### 🏗️ Arch Linux (AUR)
|
|
725
|
+
|
|
726
|
+
```bash
|
|
727
|
+
yay -S python-pyvideokit-gui
|
|
728
|
+
```
|
|
729
|
+
|
|
730
|
+
FFmpeg, FFprobe, SoX, PySide6, and PyVideoKit-Libs are installed automatically as pacman dependencies.
|
|
731
|
+
|
|
732
|
+
### 🐍 Other systems (pip)
|
|
733
|
+
|
|
734
|
+
```bash
|
|
735
|
+
pip install PyVideoKit-GUI
|
|
736
|
+
```
|
|
737
|
+
|
|
738
|
+
Make sure **FFmpeg**, **FFprobe**, and **SoX** are available in your `PATH`.
|
|
739
|
+
|
|
740
|
+
---
|
|
741
|
+
|
|
742
|
+
## 🖥️ Desktop Integration
|
|
743
|
+
|
|
744
|
+
Arch Linux users get the launcher entry and icon automatically via the AUR package. For all other systems, create them manually:
|
|
745
|
+
|
|
746
|
+
**1. Save the icon:**
|
|
747
|
+
|
|
748
|
+
```bash
|
|
749
|
+
mkdir -p ~/.local/share/icons/hicolor/scalable/apps
|
|
750
|
+
cat > ~/.local/share/icons/hicolor/scalable/apps/pvk-gui.svg << 'EOF'
|
|
751
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48">
|
|
752
|
+
<rect x="4" y="14" width="40" height="30" rx="3" fill="#2d3561"/>
|
|
753
|
+
<rect x="10" y="19" width="28" height="20" rx="2" fill="#1a2038"/>
|
|
754
|
+
<polygon points="18,21 18,37 33,29" fill="#ff6b6b"/>
|
|
755
|
+
<rect x="4" y="6" width="40" height="8" rx="2" fill="#ff6b6b"/>
|
|
756
|
+
<rect x="11" y="6" width="6" height="8" fill="#ffffff"/>
|
|
757
|
+
<rect x="23" y="6" width="6" height="8" fill="#ffffff"/>
|
|
758
|
+
<rect x="35" y="6" width="5" height="8" fill="#ffffff"/>
|
|
759
|
+
</svg>
|
|
760
|
+
EOF
|
|
761
|
+
```
|
|
762
|
+
|
|
763
|
+
**2. Create the `.desktop` entry:**
|
|
764
|
+
|
|
765
|
+
```bash
|
|
766
|
+
mkdir -p ~/.local/share/applications
|
|
767
|
+
cat > ~/.local/share/applications/pvk-gui.desktop << 'EOF'
|
|
768
|
+
[Desktop Entry]
|
|
769
|
+
Version=1.0
|
|
770
|
+
Type=Application
|
|
771
|
+
Name=PyVideoKit
|
|
772
|
+
GenericName=Video Processing Tool
|
|
773
|
+
Comment=FFmpeg-based video processing GUI
|
|
774
|
+
Exec=pvk-gui
|
|
775
|
+
Icon=pvk-gui
|
|
776
|
+
Categories=AudioVideo;Video;AudioVideoEditing;
|
|
777
|
+
Terminal=false
|
|
778
|
+
Keywords=video;ffmpeg;trim;fade;vhs;youtube;convert;
|
|
779
|
+
EOF
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
**3. Refresh the icon cache** *(may be required on some desktop environments)*:
|
|
783
|
+
|
|
784
|
+
```bash
|
|
785
|
+
gtk-update-icon-cache ~/.local/share/icons/hicolor/
|
|
786
|
+
```
|
|
787
|
+
|
|
788
|
+
PyVideoKit will now appear in your application launcher.
|
|
789
|
+
|
|
790
|
+
---
|
|
791
|
+
|
|
792
|
+
## 🚀 Usage
|
|
793
|
+
|
|
794
|
+
```bash
|
|
795
|
+
pvk-gui
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
The application opens a tabbed window. Each tab corresponds to one operation:
|
|
799
|
+
|
|
800
|
+
| Tab | Operation |
|
|
801
|
+
|---|---|
|
|
802
|
+
| 🎞️ Convert to FFV1 | Convert any video to a lossless FFV1/MKV master |
|
|
803
|
+
| ✂️ Trim | Cut a segment by start/end time (no re-encoding) |
|
|
804
|
+
| 🔗 Concat | Join multiple videos (drag to reorder) |
|
|
805
|
+
| 🎬 Fade | Add fade-in and/or fade-out |
|
|
806
|
+
| 📼 VHS Effect | Apply retro VHS visual and audio effect |
|
|
807
|
+
| 🔊 Extract Audio | Export audio track to WAV |
|
|
808
|
+
| 📺 YouTube | Encode to ProRes 422 HQ MOV for upload |
|
|
809
|
+
|
|
810
|
+
All operations run in a background thread and display a real-time progress bar.
|
|
811
|
+
|
|
812
|
+
---
|
|
813
|
+
|
|
814
|
+
## 🔄 Typical Workflow
|
|
815
|
+
|
|
816
|
+
```
|
|
817
|
+
🎞️ Convert to FFV1 → ✂️ Trim / 🎬 Fade / 📼 VHS Effect → 📺 YouTube
|
|
818
|
+
```
|
|
819
|
+
|
|
820
|
+
> Operations that re-encode (Fade, VHS Effect, YouTube) expect an FFV1 `.mkv` as input.
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
## ⚖️ License
|
|
825
|
+
|
|
826
|
+
This project is licensed under the GPLv3 License — see the [LICENSE](LICENSE) file for details.
|
|
@@ -4,15 +4,15 @@ pyvideokit_gui/_main.py,sha256=-iyypcAoThr7Ysa4rvrJ7hYq-cd8h8RqYxL77_lkDqM,331
|
|
|
4
4
|
pyvideokit_gui/_main_window.py,sha256=Pls03EJ9CoREhV1eiYavVg9oK0Z8JmXyAUFTGHc0pAU,1032
|
|
5
5
|
pyvideokit_gui/_worker.py,sha256=1f151Q0F2JzpHFxczl4ex0mP6Vf1h-c2ZQuJL5CGv9o,574
|
|
6
6
|
pyvideokit_gui/concat_panel.py,sha256=FSg0-FQpALW4fD9rBIxX89DlkVq56h2VJDJnN3kEg7A,1734
|
|
7
|
-
pyvideokit_gui/convert_panel.py,sha256=
|
|
7
|
+
pyvideokit_gui/convert_panel.py,sha256=7HaDpuhatgOw1TvTvYNXPWcwwNb4QQwWwYXmMzQYYx4,1224
|
|
8
8
|
pyvideokit_gui/extract_audio_panel.py,sha256=NADJT0rkNhO61dKDebYZdQhZUvjmW833OHygCU8746Q,665
|
|
9
|
-
pyvideokit_gui/fade_panel.py,sha256=
|
|
9
|
+
pyvideokit_gui/fade_panel.py,sha256=8h6T4O-56qs8BMA3SH0tOfbL_2ym3LZ95NzLFUi9vrw,1634
|
|
10
10
|
pyvideokit_gui/trim_panel.py,sha256=yjdVhwxmfaSp2aflOywWlmW4WwFgtVKfGzqhUxac0UI,1425
|
|
11
11
|
pyvideokit_gui/vhs_panel.py,sha256=DMCcXIB1_bZD8RvmXujJwb27ODOlF_e8NOL-QEv1wZs,680
|
|
12
12
|
pyvideokit_gui/youtube_panel.py,sha256=4LogFd2Cc4Fj2xRM5RQsYBW4M9aW_pb-BJrGlBM4Hc0,671
|
|
13
|
-
pyvideokit_gui-0.
|
|
14
|
-
pyvideokit_gui-0.
|
|
15
|
-
pyvideokit_gui-0.
|
|
16
|
-
pyvideokit_gui-0.
|
|
17
|
-
pyvideokit_gui-0.
|
|
18
|
-
pyvideokit_gui-0.
|
|
13
|
+
pyvideokit_gui-0.3.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
14
|
+
pyvideokit_gui-0.3.0.dist-info/METADATA,sha256=8rpdzn1ag15rh0UD-nTwycx0qx_K9ovkzqJASe3IZV4,45053
|
|
15
|
+
pyvideokit_gui-0.3.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
16
|
+
pyvideokit_gui-0.3.0.dist-info/entry_points.txt,sha256=svm4llnRZU8Y0-2ThznB9avSUowxpuDxZc2rBfedrX0,54
|
|
17
|
+
pyvideokit_gui-0.3.0.dist-info/top_level.txt,sha256=SDnrDTKTriy3iVrM4dlbpb2fDHWjnzLK9bZ05nzRl0U,15
|
|
18
|
+
pyvideokit_gui-0.3.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|