このような大きなファイルの一部を切り取るために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
の後に-i
を使用すると、実行が遅くなるという犠牲を払ってより正確にシークできます。参照: FFmpegで検索するカットしたいタイムスタンプを指定するために-to
の代わりに-t
を使うことができます。そのため、-i <input> -ss 30 -t 10
の代わりに-i <input> -ss 30 -to 40
を実行しても同じことができます。
あなたのffmpegが-c
、または-to
をサポートしていないなら、それはおそらく非常に時代遅れです。 自分で新しいバージョン をコンパイルするか、または 彼らのホームページから静的ビルド をダウンロードしてください。本当に複雑ではありません。
他の人が言ったように、-ss
を-i
の前(はるかに速い)または後(より正確)に置くことは大きな違いを生みます。 ffmpeg seekページの「Fast And Accurate seek」セクションでは、両方を取得する方法を説明しています。私はそれを使用しましたが、大きな違いが出てきます。基本的には-ss
の後にANDの前に-i
を置くことになります。別のキーフレームを作るためにカットを開始したい場所の前に十分な時間を空けるようにしてください。例:Video.mp4で9分0秒から10分0秒までの1分のクリップを作成したい場合は、次のようにして素早く正確に両方を行うことができます。
ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4
最初の-ss
は(およそ)8min0secに高速シークし、次に2番目の-ss
は9min0secに正確にシークし、-t 00:01:00
は1min0secのクリップを取り出します。
また、このページの重要な点にも注意してください。「-ss
を-c:v copy
と一緒に使用すると、ffmpegはi-onlyで/ splitのみを使用するように強制されるフレーム」
これは、単にコピーしたい場合や、ビデオが途切れて同期がとれなくなった場合でも、ビデオを再エンコードする必要があることを意味します。最初に-c copy
を試すこともできますが、ビデオに問題がある場合はやり直す必要があります。
私は、-ss
と-c copy
を組み合わせると、開始時に半秒のチョップが発生することを発見しました。
それを避けるためには、-c 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-Frameをカットしたいと思い、ffprobe
を使ってビデオのGOPを見つけたからです。
私のために働いたコマンドラインは次のとおりです。
ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv
ところで、-ss
の前に-i
を入れると、実行時間が大きく変わります。
User 225366と同様に、-tオプションは短いビデオでは機能しませんが、長いビデオでは機能します。短いビデオでは、-frames:vの方が良いようです。これは私のために働いたものです。
ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4
他の答えが示すように、ビデオに音声がある場合は、-acodecコピーを追加する必要があります。