최신 ffmpeg 버전에서는 scale
필터 force_original_aspect_ratio
옵션을 사용할 수 있습니다 . 예를 들어 업 스케일링없이 비디오를 1280 × 720에 맞추려면 (자세한 내용은 이 게시물 참조 ) :
ffmpeg -i input.mp4 -filter:v "scale='min(1280,iw)':min'(720,ih)':force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" output.mp4
여기 scale
에서 입력 비디오가 이보다 큰 경우 필터의 크기는 1280 × 720입니다. 더 작 으면 업 스케일되지 않습니다. pad
필터 목표 크기에서 경우에 1280 × 720의 종횡비 또는 크기 다르다 출력 비디오를 가져올 필요가있다.
구형 ffmpeg 버전에서는 다소 해킹이있는 해결 방법이 있습니다. 먼저 출력의 너비, 높이 및 종횡비를 정의하십시오. 이렇게하면 입력 내용이 저장됩니다.
width=640; height=360
aspect=$( bc <<< "scale=3; $width / $height") # <= floating point division
이제 Jim Worrall이 작성한 매우 복잡한 필터 명령을 적용 해 보겠습니다 .
ffmpeg -i input.mp4 -vf "scale = min(1\,gt(iw\,$width)+gt(ih\,$height)) * (gte(a\,$aspect)*$width + \
lt(a\,$aspect)*(($height*iw)/ih)) + not(min(1\,gt(iw\,$width)+gt(ih\,$height)))*iw : \
min(1\,gt(iw\,$width)+gt(ih\,$height)) * (lte(a\,$aspect)*$height + \
gt(a\,$aspect)*(($width*ih)/iw)) + not(min(1\,gt(iw\,$width)+gt(ih\,$height)))*ih" \
output.mp4
실제로이 모든 기능을 설명하지는 않지만 기본적으로 모든 비디오를 피드 할 수 있으며 업 스케일이 아닌 다운 스케일 만 가능합니다. 당신이 그것을 위해 있다면 필터를 개별 표현으로 분해 할 수 있습니다. 이것을 줄이는 것이 가능할 수도 있지만 그렇게 작동합니다.