ffmpeg を使用して 30 秒 240 fps ビデオを 2 分 60 fps ビデオに変換する

ffmpeg を使用して 30 秒 240 fps ビデオを 2 分 60 fps ビデオに変換する

GoPro Hero10 で 30 秒の 240fps 動画を撮りました。これを 1/4 の速度でスローモーションにしたいのですが、出力は 2 分 @ 60fps になります。(サウンドも変換する必要があります。これにより低音になりますが、問題ありません)

少し調べた結果、次のことがわかりました。

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=4.0*PTS[v];[0:a]atempo=0.5,atempo=0.5[a]" -map "[v]" -map "[a]" output-0.25.mp4

しかし、確認してみるとffmpeg -i output-0.25.mp4、fps はまだ 240 です (長さは正しく、スローモーションで、サウンドも問題ありませんが、ファイル サイズが非常に大きく、前述のように、対象デバイスで再生するには fps が高すぎます)。

そこで再度検索して追加することにした-r 60ので、次のようになりました:

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=4.0*PTS[v];[0:a]atempo=0.5,atempo=0.5[a]" -map "[v]" -map "[a]" -r 60 output-0.25.mp4

チェックでは正しい fps も表示されますが、「スローモーションが少なくなった」ようで、サウンドがギザギザしています。

何をすればいいですか?

私が欲しいのは「元のフレームをすべて取り出してファイルにまとめ、それを「通常速度」で再生します」

答え1

setpts モードと、raw モードへの変換があります。

setpts を使用すると次のようになります。

ffmpeg input.mkv -map_metadata -1 -filter_complex "[0:v:0]setpts=PTS*4[v];[0:a:0]atempo=0.5,atempo=0.5[a]" -map [v] -map [a] -c:v libx265 -vtag hvc1 -c:a libmp3lame -shortest "output.mp4"
  • H.265 (libx265) のようなファイルサイズを縮小する優れたコーデックを使用する
  • 元のビデオのメタデータには 240 FPS と表示されており、変換中にメタデータが削除されないため、出力ビデオも 240 fps と表示されますが、実際は 60 FPS であると思われます。-map_metadata -1 オプションを使用すると、メタデータが削除されます。

RAW モードへの変換を使用すると、次のようになります。

この例では、元のビデオが H.264 コーデックであると想定しています。

ffmpeg -i input.mp4 -map 0:v -c:v copy -bsf:v h264_mp4toannexb raw.h264
ffmpeg -fflags +genpts -r 60 -i "raw.h264" -i input.mp4 -map 0:v -map 1:a -filter:a "atempo=0.5,atempo=0.5" -c:v libx265 -vtag hvc1 "output.mp4"

最初のコマンドでは、元のビデオが RAW に変換され、2 番目のコマンドでは新しいタイムスタンプが生成されてビデオの再生速度が 4 倍遅くなり、元のビデオのオーディオが RAW ビデオに追加され、オーディオ速度が 4 倍遅くなり、最後に RAW ビデオが H.265 に変換されてファイル サイズが小さくなります。

答え2

ビデオを再エンコードしない解決策は次のとおりです。

  • ビデオ ストリームを HEVC (H.265)「raw」ビデオ ストリームに抽出します。
    ffmpeg -y -an -i testfile.mp4 -c copy input_video.h265
  • ビットストリーム フィルターを使用して、を「1 秒あたりのティック数」tick_rateに変更します。60hevc_metadata
    ffmpeg -y -i input_video.h265 -c copy -bsf:v hevc_metadata=tick_rate=60:num_ticks_poc_diff_one=1 input_video2.h265
  • input_video2.h265「スローダウン」したオーディオと結合します。
    ffmpeg -y -i input_video2.h265 -vn -i testfile.mp4 -map_metadata -1 -af "atempo=0.5,atempo=0.5" -c:v copy -vtag hvc1 -c:a aac -shortest "output.mp4"

「遅くなった」オーディオは奇妙に聞こえますが、2 回使用するより良い解決策が見つかりませんatempo

関連情報