ffmpeg / avconvは、スケーリングされた出力を2で割り切れるように強制します


10

デスクトップをavconv(別名ffmpeg)で記録し、720pにスケーリングします。

最近スクリプトに追加して、xwininfoでウィンドウを選択できるようにしました。これにより、ウィンドウが明確に記録されます。

ただし、出力形式が2で割り切れない場合、エンコーダーが異常動作し、ビデオを取得できません。

ffmpeg内でこれを修正する方法はあるので、スケール値を設定するためにbashで大量の手動計算を実行する必要はありませんか?

それらが不均一である場合、スケールフィルターに幅/高さを1つ減算/追加させることは可能ですか?(円形?)

これを達成できる元のスケールの後に別のフィルターを適用することは可能ですか?(これにより、入力サイズが不均一でスケーリングのないビデオが丸められます)

#!/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)、最後に適用されるフィルターはすべての問題を一度に解決します。iw動作してihいないようです。

回答:


9

2による除算は奇数の番号で発生することがあるため、次のようになります。

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

これは-1:720構文で必要なことを実行します(元のアスペクト比を維持します)


16:9 480pの場合のように、より高いペア番号を取得するためにceil代わりに使用truncします
フェリペアルカシバル

8

実際、フィルターはそれを直接処理できます。フィルターに渡すのでは-2なく渡すだけです-1:例

-vf scale="-2:720"

3年前のバグレポートでこれを見つけてびっくりしまし


うまくいきませんでした。これをサポートする最小バージョンは何ですか?
letmaik 2014年

3
-2はffmpegバージョン2.3.3で動作します
Lance Nanek

7

多くの実験の結果、他のスケールフィルターが幅と高さを2に丸める後に次のフィルターを適用したように見えます。

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

基本的には除算、丸め、乗算のことで、構文が正しくありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.