トランスコードせずに、大きなファイルから1分間のクリップをスプライスできますか?
-
08-07-2019 - |
質問
さまざまな形式(avi、mp4、mkv、flv)で大きなビデオファイルをアップロードできるサイトがあります。 1分間の「サンプル」を生成する必要があります。アップロードされた大きなファイルから取得します。サンプルは同じ形式である必要があり、元のファイルと同じフレームサイズとビットレートを持っています。ファイルのセクションを新しいファイルに単純に切り取る方法はありますか?できればffmpeg(またはffmpegが不可能な場合は他のツール)で。
解決
最初に、ビデオファイルが実際にどのように機能するかを理解する必要があります。これを説明する一連のチュートリアルを次に示します。過度にインターネットビデオの簡単なガイド。
その後、サンプルの切り出しに役立つさまざまなツールを試すことができます。 1つはflvtool(入力がFLVの場合)または FFmpeg です。 FFmpegを使用すると、開始時間と終了時間を指定できます。要求されたものだけをカットしようとします(ただし、スライスを開始するために最も近いキーフレームを見つける必要があります)。
これは、input.flvというファイルを読み取り、15秒間ビデオを開始し、次の60秒間をカットするFFmpegコマンドです。出力ファイル:
ffmpeg -i input.flv -ss 15 -t 60 -acodec copy -vcodec copy output.flv
最後に、CまたはC ++(FFmpegのlibavライブラリを使用)またはJava()を使用してプログラムでこれを実行しますが、ユースケースではかなり高度です。
他のヒント
私と同じように自動とビデオの同期を維持できない場合は、次の方法が役立つ場合があります(別のWebサイトにあります):
ffmpeg -sameq -i file.flv -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.flv
Evanが指摘しているように、受け入れられた答えのアプローチは、A / V同期が失われる可能性があります。ただし、 -sameq
が削除されたため、彼の解決策は正しくありません。
https://trac.ffmpeg.org/wiki/Seeking で述べられているように、< code> -ss オプションは、 -i
の後ではなく前に来る必要があります。これで問題が解決しました。
次のオプションは、 -fs
スイッチを使用することです。例:
ff -i ip.mkv -fs 500M -c copy ~/Movies/reservoir/carbohydrates.mkv
選択したソースから500メガバイト(500&#215; 1000&#215; 1000バイト+&#8216;多重化オーバーヘッド&#8217;)を抽出します。 &#8211;わかるように、ファイルサイズに基づいて
1つの愛。そして尊敬。