ffmpegを使用して、次のような大きなファイルのセクションを切り取ります。
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
-ss
一部が正常に動作しますが、-t
無視されます。で指定された最初の指定された秒を正しく削除し-ss
ますが、コピーで入力の最後まで進みます。
ffmpegを使用して、ビデオを再コーディングせずに終了する方法はありますか?
ffmpegを使用して、次のような大きなファイルのセクションを切り取ります。
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
-ss
一部が正常に動作しますが、-t
無視されます。で指定された最初の指定された秒を正しく削除し-ss
ますが、コピーで入力の最後まで進みます。
ffmpegを使用して、ビデオを再コーディングせずに終了する方法はありますか?
回答:
-ss
オプションを使用して開始タイムスタンプを指定し、オプションを使用し-t
てエンコード期間を指定できます。タイムスタンプは、HH:MM:SS.xxx
形式または秒(s.msec
)である必要があります。
次の例では、最初の30秒がクリップされ、その後10秒であるすべてのものがクリップされます。
ffmpeg -ss 00:00:30.0 -i input.wmv -c copy -t 00:00:10.0 output.wmv
ffmpeg -ss 30 -i input.wmv -c copy -t 10 output.wmv
-t
は出力オプションであり、常にの後 に指定する必要があることに注意してください-i
。
いくつかのヒント:
-ss
after を使用する-i
と、実行速度が遅くなりますが、より正確にシークできます。参照:FFmpegを使用したシーク-to
代わりに使用-t
して、カットするタイムスタンプを指定できます。そのため、同じことを達成するために-i <input> -ss 30 -t 10
あなたの代わりに行うこともできます-i <input> -ss 30 -to 40
。
ffmpegが-c
、またはをサポートしていない場合、-to
非常に古い可能性があります。自分で新しいバージョンをコンパイルするか、ホームページから静的ビルドをダウンロードします。本当に複雑ではありません。
ffmpeg -i input.wmv -c copy -t 35 output.wmv
frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
-c copy
、最初の黒い画面が削除されました。詳細については、彼の答えを参照してください。
他の人が言ったように、-ss
前に置く(はるかに高速)または後に(より正確に)置く-i
ことは大きな違いになります。ffmpegのシークページの「高速かつ正確なシーク」セクションでは、両方を取得する方法を説明しています。私はそれを使用しましたが、大きな違いをもたらします。基本的に、の-ss
前後に配置する-i
だけで、別のキーフレームを作成するためにカットを開始する場所の前に十分な時間を置いてください。例:Video.mp4で9min0secから10min 0secまでの1分間のクリップを作成する場合は、次を使用してすばやく正確に行うことができます。
ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4
最初-ss
は(約)8分0秒まで高速にシークし、2番目-ss
は9分0秒まで正確にシークし、-t 00:01:00
1分0秒のクリップを取り出します。
また、そのページのこの重要な点に注意してください。「で使用-ss
する場合-c:v copy
、ffmpegはiフレームでのみ使用/分割を強制されるため、結果のビットストリームが途切れたり、再生できなかったり、オーディオストリームと同期しなくなることがあります。 」
これは、単にコピーしたい場合でも、ビデオを再エンコードする必要があることを意味します。-c copy
最初に試すこともできますが、動画がうまくいかない場合は、やり直す必要があります。
-c:a copy
このシーク方法にも同じ警告が適用されます。
フレームアドバンスごとにフレーム化するメディアプレーヤーでファイルを開き、次のようなデータを含むAVISynthファイルを再生します。
DirectShowSource(("C:\Downloads\Video\Do you want him.flv"), Pixel_Type="yuy2").Crop(0,0,-0,-0)
Subtitle("C:\Downloads\Video\Do you want him.flv", font="Arial", size=24, text_color=$ff0000, align=3)
ShowFrameNumber(scroll=true, x=336, y=27, font="Arial", size=24, text_color=$ff0000)
ShowTime(x=398, y=44, font="Arial", size=24, text_color=$ff0000)
次に、正確な時間形式でカットします。
ffmpeg -i "Path\do you want him.flv" \
-ss 00:00:05.240 -to 00:00:08.360 \
-vcodec libx264 -acodec libvo_aacenc \
"Path\Do you want him1.flv"
そして
ffmpeg -i "Path\do you want him.flv" \
-ss 00:00:10.240 -to 00:00:14.360 \
-vcodec libx264 -acodec libvo_aacenc \
"Path\Do you want him2.flv"
次のような内容のビデオファイルを含むtxtファイルを作成します。
file 'C:\Downloads\Video\Do you want him1.flv'
file 'C:\Downloads\Video\Do you want him2.flv'
ffmpegを実行します。
ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv"
私にとって-t
オプションは機能しませんでしたが、-vframes
機能しました。を使用することを好みます#frames
。なぜなら、私はむしろI-Framesでカットし、ビデオを使用するGOPを見つけたからffprobe
です。
私のために働いたコマンドラインは次のとおりです:
ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv
ちなみに、-ss
先頭に置く-i
と実行時間に大きな違いが生じます。
-vframes
(または-frames:v
)後になるはず-i
です。
user225366と同様に、-tオプションは短いビデオでは機能しませんが、長いビデオでは機能します。短い動画の場合、-frames:vの方が優れているようです。これは私のために働いたものです。
ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4
他の回答が示すように、ビデオに音声がある場合は、-acodecコピーを追加する必要があります。
これに言及している人はあまりいませんが(私は専門家ではないので、キャッチがあるかもしれません)、ファイルに字幕などの他のストリームやチャプターなどのメタデータがある場合、すべてのストリームをカット/トリムして保持することができます次のコマンド
ffmpeg -to 60 -i input.mkv -map 0 -c copy output.mkv
では-map 0
、あなたは、ファイル内のすべてのストリームを取る、として-c copy
、彼らがそうであるように、あなたはそれらすべてをコピーします。開始ビア
を-to
省略する-ss
と、入力ビデオが開始から2番目の60にカットされます。
いじるは、map
特定のストリームのみをカットに保持する場合にも役立ちます(ファイル内のすべてのオーディオソースや一部の字幕のみが必要ない場合があります)。
FAT32ストレージに保存できない大きなMKVファイルを分割する必要がある場合に使用します。