ffmpegでh.264 .MP4ビデオファイルをスマートにトリミング
ライブキャプチャされたh.264ビデオを入力として使用し、黒からフェードアップで開始し、できるだけ少ないエンコードで黒へのフェードで終了するようにトリムします。これらのフェードイン/アウトポイントは、Iフレームの間にある場合があります。再エンコードせずに非Iフレームでトリミングすることはできません。 図を作成しました: 入力ファイルを3つの部分に分割します。パートAは、ポイント1の前のIフレームで始まり、ポイント1で終わります。パートCは、ポイント2のIフレームで始まり、黒へのフェード後の次のIフレームで終わります。それらはすべてIフレーム形式に再エンコードされます。これらの2つのセグメントは10〜30秒と比較的短くなります。パートB(ビデオのほとんど)は、codec:copyを使用してトランスコードできます。 パーツAおよびCは(黒検出を使用して自動的に、または手動で)トリミングされ、その後、ffmpegを使用してビデオ全体が連結されます。 ffmpegを使用したいのは、それが私が最もよく知っていることであり、私のワークフローの残りの部分では排他的に使用されるからです。どのコマンドラインでこれを達成できますか? 好奇心が強い人のために、ライブビデオをエンコードされたセグメントにキャプチャするためのコマンドラインを次に示します。この時点から、不要なビデオを破棄し、トリミングに必要な場合はセグメントを再エンコードするのは簡単です。最後のステップは、セグメントを連結することです。 ffmpeg -f dshow -rtbufsize 702000k -video_size 1920x1080 -framerate 29.97 -pixel_format uyvy422 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 0 -c:v libx264 -s 1280x720 -crf 18 -profile:v main -level 3.1 -pix_fmt yuv420p -c:a libvo_aacenc -b:a 128k -ac 1 -f segment -segment_time 0.01 -reset_timestamps 1 seg%02d.mp4