fix: pass source fps to ffmpeg export via fps filter

This commit is contained in:
2026-04-07 13:54:38 +02:00
parent 1256819dde
commit fc9287a5a6
+8 -1
View File
@@ -45,6 +45,7 @@ def build_ffmpeg_command(
portrait_ratio: str | None = None,
crop_center: float = 0.5,
image_sequence: bool = False,
fps: float | None = None,
) -> list[str]:
# -ss before -i: fast input-seeking. Safe here because we always re-encode
# (libx264/aac), so there is no keyframe-alignment issue from pre-input seek.
@@ -66,6 +67,8 @@ def build_ffmpeg_command(
filters.append(
f"scale='if(lt(iw,ih),{short_side},-2)':'if(lt(iw,ih),-2,{short_side})':flags=lanczos"
)
if fps is not None:
filters.append(f"fps={fps}")
if filters:
cmd += ["-vf", ",".join(filters)]
@@ -305,7 +308,8 @@ class ExportWorker(QThread):
short_side: int | None = None,
portrait_ratio: str | None = None,
crop_center: float = 0.5,
image_sequence: bool = False):
image_sequence: bool = False,
fps: float | None = None):
super().__init__()
self._input = input_path
self._start = start
@@ -314,6 +318,7 @@ class ExportWorker(QThread):
self._portrait_ratio = portrait_ratio
self._crop_center = crop_center
self._image_sequence = image_sequence
self._fps = fps
def run(self):
try:
@@ -325,6 +330,7 @@ class ExportWorker(QThread):
portrait_ratio=self._portrait_ratio,
crop_center=self._crop_center,
image_sequence=self._image_sequence,
fps=self._fps,
)
result = subprocess.run(cmd, capture_output=True, text=True, timeout=120)
if result.returncode == 0:
@@ -1552,6 +1558,7 @@ class MainWindow(QMainWindow):
portrait_ratio=portrait_ratio,
crop_center=self._crop_center,
image_sequence=image_sequence,
fps=self._fps,
)
self._export_worker.finished.connect(self._on_export_done)
self._export_worker.error.connect(self._on_export_error)