ffmpegを使用して、異なる幅のビデオのサイズを固定の高さに変更し、アスペクト比を維持します


17

私たちの会社のウェブサイトのために、多くのビデオファイルをフラッシュビデオに変換したいと思います。すべての動画は360p形式である必要があるため、サイズはNx360になります。

FFMpegは-s引数を使用して、ターゲット解像度をW x Hとして指定します。W idthは、ソースファイルのアスペクト比に依存するため、わかりません。ソースが640x480の場合、ターゲットは480x360になります。ソースが848x480の場合、ターゲットは636x360になります。

ffmpegのいくつかのスイッチでそれを行う方法はありますか?アスペクト比を維持し、ターゲットビデオの高さのみを指定しますか?

ffprobeを起動してソースビデオサイズを取得し、アスペクト比を計算してから新しい幅を計算するプログラムを作成することで、簡単に解決できました。

回答:


15

このビデオフィルターを追加してみてください。

-vf "scale=-1:360" 

-1 この場合、変数/不明を意味します。したがって、このフィルターはビデオのサイズを変更して、入力のアスペクト比を維持し、高さを360に保ちます。

私にとって、これはあなたが探しているのと同じ結果を達成しました。



6

既存の回答にコメントするのに十分なポイントはまだありませんが、これはuser65600の回答に従っており、特定のコーデックが2で割り切れる幅/高さを必要とする場合(たとえばlibx264)

-1(変数/不明)を使用すると、奇数#を返すことがあります。偶数#を保証するには、のようなものを使用する必要がありますtrunc(ow/a/2)*2。これは、アスペクト比を維持しながら、最も近い偶数#を自動的に計算します。

-vf "scale=trunc(ow/a/2)*2:360"

ソース:https : //ffmpeg.org/trac/ffmpeg/ticket/309


3

-vf "scale=trunc(ow/a/2)*2:360" 「自己参照」エラーのために機能しません。

代わりに、次のように機能します:

-vf "scale = -1:360、scale = trunc(iw / 2)* 2:360"

したがって、自己参照は2つの連続したスケーリングによって回避され、丸めは2番目のステップで行われます。かわいいでしょ?:)


単純なfiltergraph 'scale = -1:480; scale = trunc(iw / 2)* 2:480 'には、正確に1つの入力と出力がありません。フィルターを開く際にエラーが発生しました!
digitalPBK 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.