single.php

ffmpegで vsync オプションで固定フレームレートで出力できない原因

EXTM3U形式(拡張子 .m3u8)を利用して動画変換をしていた時に、固定フレームレートで出力できないことがあったので対処法を備忘録的に投稿しておきます。

VSYNC オプション

エンコードあるあるですが、動画を作成しているとフレームレートなどの差異で映像と音声がズレて再生されてしまうことがあります。

例えば、Premiere Proで表示してみるとこんな感じ。

動画変換時のフレームレートを可変から固定にすると音ズレが解消される場合があります。

FFmpeg でフレームレートを固定にするには[VSYNC]オプションを使います。

HandBrakeなどのアプリを使って固定に変更するには別記事をご覧ください。

例えば、こんな感じ。

.\/bin/ffmpeg -protocol_whitelist file,http,https,tcp,tls -i 'sample.m3u8' -r 30 -vsync cfr 'sample.mp4'

これで、30フレーム固定のmp4ファイルが出力されます。

ただし、[VSYNC]オプションは注意する点があって[-r]オプションで固定するフレーム長を指定する必要があります。

なので、通常は

-r 30 -vsync cfr

みたいな形で使います。

また、出力時に[copy]オプションを使うと何故か固定フレームレートになってくれないので注意が必要です。

例えば、こんな感じで出力しても固定フレームレートになりません。

-r 30 -vsync cfr -c copy 'sample.mp4'

なので、次のような形で出力します。

-r 30 -vsync cfr 'sample.mp4'

[VSYNC]オプションで固定フレームレートで出力されない場合は確認してみてください。

まとめ

今回はEXTM3U形式(拡張子 .m3u8)を利用して動画変換をしていた時に、固定フレームレートで出力できないことがあったので対処法を紹介しました。

[-vsync]オプションで “cfr” を入力すると、固定フレームレートでエンコードすることが可能です。

その際に、固定するフレームレート値を[-r]オプションで指定する必要があります。

また、[-c copy]などのオプションを使っていると固定フレームで出力できない場合があるので注意が必要です。

[FFmpeg]でエンコードする際に固定フレームレートで出力されない人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です