diff --git a/app.py b/app.py index 4f96d7b..0dbd257 100644 --- a/app.py +++ b/app.py @@ -128,7 +128,8 @@ def process_video(): scale_percentage = data.get('scale_percentage', 100) if scale_percentage != 100: # Scale based on percentage - ffmpeg will apply this after crop - scale_filter = f"scale=iw*{scale_percentage/100}:ih*{scale_percentage/100}" + # Force dimensions divisible by 2 for H.264 compatibility + scale_filter = f"scale=trunc(iw*{scale_percentage/100}/2)*2:trunc(ih*{scale_percentage/100}/2)*2" filters.append(scale_filter) # Apply filters if any diff --git a/templates/index.html b/templates/index.html index 6a8b54c..5cd7383 100644 --- a/templates/index.html +++ b/templates/index.html @@ -845,8 +845,9 @@ const cropWidth = parseInt(document.getElementById('crop-width').value) || videoInfo.width; const cropHeight = parseInt(document.getElementById('crop-height').value) || videoInfo.height; - const outputWidth = Math.round((cropWidth * scalePercentage) / 100); - const outputHeight = Math.round((cropHeight * scalePercentage) / 100); + // Round to nearest even number for H.264 compatibility + const outputWidth = Math.round((cropWidth * scalePercentage) / 100 / 2) * 2; + const outputHeight = Math.round((cropHeight * scalePercentage) / 100 / 2) * 2; outputResolution.textContent = `${outputWidth}x${outputHeight}`; }