FFmpegの現在のバージョンを使用する方法は次のとおりです。これは、最初のファイルの後で入力のPTSを再スケーリングしない連結デマルチプレクサに依存しますが、固定オフセットを適用するだけです。15360
(FFmpeg出力の典型的な)タイムスケールの30 fpsストリームがあるとします。つまり、フレームに0
はPTSが0
あり、フレームに30
はPTSがあり15360
ます。23040
PTS値に影響を与えずにタイムスケールをに変更できれば、これは45 fpsストリームになります。
基本的に、それは以下の方法が行うことです。
1。ソースプロパティを識別します。
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s,
30 fps, 30 tbr, 15360 tbn (default)
ソースのプロパティ、特に解像度とを書き留めておきtbn
ます。
図2(a) 。(オプション)計算を簡単にするために、タイムスケールを便利なものに変更します。
ffmpeg -i in.mp4 -c copy -an -video_track_timescale 30 in-v30.mp4
これは私たちを取得します
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s, \
30 fps, 30 tbr, 30 tbn (default
この手順を実行する場合、新しいタイムスケールは元のフレームレートと等しいか、元のフレームレートの整数倍にする必要があります。
図2b。必要なタイムスケールを計算します。これにより、ターゲットフレームレートで、ソースのx
フレーム#のPTSがx
新しいフレームレートと同じになるようにしますtbn
。ステップ2aを実行した場合、これは非常に簡単で、単に新しいフレームレートになります。したがって、ターゲットfpsの45
場合、new tbn
はになります45
。
3。ダミービデオを生成します。
ffmpeg -f lavfi -i color=s=1280x720:r=45:d=1 -profile:v main -video_track_timescale 45 0.mp4
最良の結果を得るには、解像度、H.264プロファイル、ピクセル形式、参照カウントなどのすべてのプロパティを同じにする必要があります。
4ビデオを連結します。
まずテキストファイルを作成
file '0.mp4'
file 'in-v30.mp4'
次に、連結
ffmpeg -f concat -i list.txt -c copy -video_track_timescale 45 45fps.mp4
出力ファイルでは、2番目のビデオが45 fpsで再生されます。
5。さて、ダミープリロールを切り離します
ffmpeg -ss 1.1 -i 45fps.mp4 -c copy -avoid_negative_ts make_zero in45.mp4
そしてあなたは持っています
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1757 kb/s, \
45 fps, 45 tbr, 11520 tbn (default)
これは複雑であると私は言った!
-r
はストリームコピーと互換性がなく、フレームレートを変更するためのビットストリームフィルターはありません。