ffmpeg に入力した一連のフレーム範囲に従って、大きなビデオを分割しようとしています。-f segment -segment_frames オプションと、期待される結果/生成される結果に関していくつか質問があります。実行している内容は次のとおりです。
ffmpeg -i full_movie.mov -f segment -segment_frames 123 -reset_timestamps 1 -c:a copy -map 0 "/Users/sjan/Desktop/%03d_test.mov"
ffmpeg -i full_movie.mov -f segment -segment_frames 124, 163 -reset_timestamps 1 -c:a copy -map 0 "/Users/sjan/Desktop/%03d_test.mov"
最初の ffmpeg コマンドは 0 から 123 までですか、それとも 1 から 123 までですか?
-segment_frames オプションを指定した ffmpeg は、QT ムービーを読み込むときに 0 から開始していますか? このムービーを QT で開くと 0 から始まることを考慮すると、0 から始まるのでしょうか? 0 から始まる場合は 1 を減算して、これを考慮してフレーム範囲を入力する必要がありますか? 適切な範囲で一貫性のない結果が見られますが、これはおそらくこれが原因です。
答え1
はい、segment_frames は 0 から始まります。経験則として、ffmpeg のほぼすべてのインデックス カウンターは 0 から始まります。
したがって、-segment_times 124,163
ffmpeg にフレーム 0 ~ 123、124 ~ 162、および 163 ~ END ごとにセグメントを作成するように指示します。ただし、これらの開始フレームがキーフレームでない場合、ffmpeg はこれらのフレームの後に見つかった最初のキーフレームでセグメントを開始します。
指定のフレームにセグメント化を強制するには、追加します-break_non_keyframes 1
。ただし、セグメントがスタンドアロンで再生される場合、キーフレームが見つかるまで最初のフレームは正しくデコードされない可能性があります。ビデオをエンコードしている場合は、セグメントポイントにキーフレームを追加して強制することができます。-force_key_frames expr:eq(n\,124)+eq(n\,163)