Flashビルダー(アクションスクリプト3)でffmpegを使用して、ビデオをビデオのタイムラプスに変換しています。これを行うためにsetptsを使用する方法を考え出しましたが、結果の出力ファイルは入力と同じ長さです(時間の経過後に最後のフレームのみが表示されます)。渡された設定に基づいて期間を変更しますffmpegへ。
私は最初にコマンドラインから以下を試しています:
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
どんな助けでも大歓迎です!
問題が解決しました。私はオーディオを削除していなかったので、おそらくビデオのフルタイムのほぼ空のオーディオファイルを再生していました。
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -an output.mp4
-an
は、ビデオからオーディオを削除します。
オーディオの高速化に関する詳細については、こちらをご覧ください。あなたは2倍まで行うことができますが、あなたはそれをさらにスピードアップするようにだますことができます( source ):
オーディオのスピードアップ/スローダウン
アテンポオーディオフィルターを使用すると、audioを加速または減速できます。オーディオの速度を2倍にするには:
ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
アテンポフィルターは、0.5〜2.0の値の使用に制限されています(そのため、元の速度の半分以上に遅くなり、入力の2倍以下に高速化できます)。必要に応じて、複数のアテンポフィルターをつなぎ合わせることで、この制限を回避できます。以下は、オーディオ速度を4倍にします。
ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv
複雑なフィルターグラフを使用すると、ビデオとオーディオを同時に高速化できます。
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv