ffmpeg / avconv 힘 스케일 출력을 2로 나눌 수 있음 못합니다. ffmpeg 내에서 이것을 고칠 수있는 방법이

avconv (일명 ffmpeg)로 데스크탑을 녹화 한 다음 720p로 확장합니다.

나는 최근에 xwininfo가있는 창을 선택할 수 있도록 스크립트에 추가했으며 구체적으로 기록합니다.

그러나 출력 형식을 2로 나눌 수 없으면 인코더가 기절하여 비디오를 얻지 못합니다.

ffmpeg 내에서 이것을 고칠 수있는 방법이 있습니까? 그래서 스케일 값을 설정하기 위해 bash에서 수동 수학을 많이 할 필요가 없습니까?

스케일 필터가 고르지 않은 경우 너비 / 높이를 빼거나 더할 수 있습니까? (일주?)

이것을 달성 할 수있는 원래 스케일 이후에 다른 필터를 적용 할 수 있습니까? (입력 크기가 고르지 않고 크기가 조정되지 않은 비디오는 둥글게됩니다)

#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@

일부 오래된 메일 링리스트는 round()필터에서 사용할 수 있는 기능을 제안 하지만 구문이 맞지 않는 것 같습니다. 그것이 작동 scale=round(iw,2):round(ih,2)하면 끝에 적용된 필터는 한 번에 모든 문제를 해결할 것입니다. iwih작동하지 않습니다.



답변

2로 나누면 홀수가 발생하기 때문에 다음과 같아야합니다.

-vf scale="trunc(oh*a/2)*2:720"

이것은 -1:720구문으로 원하는 것을 수행 합니다 (원래 종횡비 유지)


답변

실제로 필터는 직접 처리 할 수 ​​있습니다. 필터 -2대신 전달해야합니다 -1. 예 :

-vf scale="-2:720"

3 년 전의 버그 보고서 에서이 사실을 알게되어 놀랐습니다 .


답변

많은 실험을 한 후 다른 스케일 필터가 너비와 높이를 2로 반올림 한 후에 적용되는 다음 필터처럼 보입니다.

scale=trunc(in_w/2)*2:trunc(in_h/2)*2

기본적으로 나누기, 반올림, 곱하기입니다. 구문이 맞지 않았습니다.