web-dev-qa-db-ja.com

ビデオを1.5倍高速化しますが、すべてのフレームを保持します

だから私はすべてのテレビエピソードをスピードアップしようとしています(それらのいくつかは本当に遅いペースであるため)。ソースは30fpsです。そして、すでに次のコマンドでこれを実行しようとした場合:( setpts値を作成する方が簡単なのでx1.6を実行しています(そうでない場合は0.66666666666 ...)

ffmpeg -i VideoOriginal.mkv -r 48 -filter:v "setpts=0.625*PTS" VideoSpeedup.mkv

ただし、ここでのファイルサイズははるかに小さくなります(品質のプリセットも使用する必要がありますか?)。ファイルの長さは40分で、10分後にほとんど壊れます(VLCはタイムスタンプを誤って解釈し始め、プレーヤーはほとんど失敗します)。

また、この方法ではオーディオが高速化されません。

これを改善するためのヒントはありますか?

(「すべてのフレームを保持」したい理由。x1.6を使用するので、48 fpsしか実行できないため、実際に失われたり、新しいフレームを生成したりする必要はありません。)

編集:私の元のファイルのfpsが23.97612であることに気づきました....それは物事をより複雑にするでしょう...?

2

ビデオ速度を変更する場合、通常は-rを設定する必要はありませんが、ffmpegにフレームのタイムスタンプを変更させるだけです。これによりフレームドロップが発生する可能性があります。もちろん、試したとおりに適切なフレームレートを設定することで回避できますが、設定する必要がありますafter入力仕様。

ビデオとオーディオの両方を高速化するには:

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.625*PTS[v];[0:a]atempo=1.6[a]" -map "[v]" -map "[a]" output.mkv

オーディオテンポは、フレームのタイムスタンプを変更する係数の逆数です。そしてフレームレートの変更で:

ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.625*PTS[v];[0:a]atempo=1.6[a]" -r 48 -map "[v]" -map "[a]" output.mkv

しかし、ここのファイルサイズははるかに小さいです

これは、すべてが再エンコードされるためです。通常、libx264はビデオエンコーディングに使用されます。デフォルトの品質は良好なはずですが、たとえば-crfオプションを使用して変更できます。詳細については、 H.264エンコーディングガイド を参照してください。

Playbackメニューから再生を高速化するようにVLCに指示することもできます。これにより、速度変更の不要な変換とハードコーディングが回避されます。

5
slhck

(質問でVLCについて言及したため...)

VLCで、Playbackメニューに移動し、_Speed/Faster_またはSpeed/Faster (fine)を選択します。

編集:そして@slhckは同意するので、私は正しくなければなりません:-)

2
mcalex