web-dev-qa-db-ja.com

H.264ビデオを再エンコードせずにフレームをスキップする

Iフレームのみを含むmp4/h.264ビデオがあります。ビデオ全体を再エンコードせずに、これらのIフレームの1つをスキップしたいと思います。私はこれを試しました:

ffmpeg -i "file.mp4" -vf select='not(eq(n\,10))' "out.mp4"

しかしもちろん、これは実際には再エンコードを行います。

ソリューションでffmpegを使用することをお勧めしますが、Linuxで実行されるプログラムであれば問題ありません。

明確にするために、ビデオにはPまたはBフレームが含まれていません。

1
jellyjoe

単一のIフレームを削除する場合は、ビットストリームをAnnex B形式に抽出する必要があります(例:ffmpeg -i input.mp4 -c:v copy -an output.h264、次に バイトを検索 NALユニットを表す)削除するフレームが含まれています。次の開始コードまでそれらのバイトを削除し、ストリームを保存します。

または、-frames:vオプションを使用して最初のnフレームを抽出することにより、ビデオをスプライスすることができます。

 ffmpeg -i input.h264 -c:v copy -frames:v n output.h264 

次に、-ssパラメータを使用して、最初からやり直したい位置を探し、そこから同じ方法で切り取ることができます。 n + 1にフレームレートを掛けることで位置を見つけることができます。

再エンコードしたくない場合、私が知っている簡単な方法はありません。

2
slhck