fix: pass source fps to ffmpeg export via fps filter
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user