ffmpeg
U&L を検索しているときに、次のようなコマンド ラインの生成をスクリプト化する方法を尋ねる質問がかなりあることに気付きました。
ffmpeg -i video.mp4 -ss 00:00:00 -t 00:10:00 -c copy 01.mp4
ffmpeg -i video.mp4 -ss 00:10:00 -t 00:10:00 -c copy 02.mp4
ffmpeg -i video.mp4 -ss 00:20:00 -t 00:10:00 -c copy 03.mp4
この解決策を調べていたところ、ffmpeg
問題追跡システムで次のタイトルのチケットを見つけました:入力ビデオを複数の出力ビデオチャンクに分割する。
このチケットでは、次のような単一のコマンド ラインを使用して、ビデオを小さなセクションに分割するための時間ポイントのリストを最終的に提供できるようにするパッチについて説明します。
$ ffmpeg -i input.avi -f segment -segment_times 10,20,40,50,90,120,180 \
-vcodec copy output02%d.avi
パッチは、コード リポジトリのこのリビジョンでリリースされたようです。
commit 2058b52cf8a4eea9bf046f72b98e89fe9b36d3e3
Author: Stefano Sabatini <[email protected]>
Date: Sat Jan 28 22:36:38 2012 +0100
lavf/segment: add -segment_times option
Address trac ticket #1504.
静的にビルドされたこのバージョンをダウンロードしましたffmpeg
。ffmpeg.static.64bit.2013-10-05.tar.gzからffmpeg サイト、しかし、どうやらそのスイッチは含まれていなかったようです。
$ ./ffmpeg --help |& grep segment
$
この新しいスイッチを動作させることができた人はいますか?
答え1
行方不明だからでしょうか-map
オプションは、入力ストリームを出力ファイルのソースとして指定します。私は ffmpeg 2.6.1 を使用しており、次のようにビデオを分割できます-segment_times
。
ffmpeg -i foo.mp4 -segment_times 10,20,30,40 -c copy -map 0 -f segment %03d.mp4
より複雑な分割が必要な場合は、OpenCV を使用して元のビデオを読み取り、必要なフレームを新しい分割に書き込むことができます。以下を確認してください。「OpenCV でビデオを作成する」そして「複数の開始フレーム インデックスと終了フレーム インデックスに従ってビデオを複数のチャンクに分割する」