In what I'm trying to do, I need to remove some parts of a video file, and create a new one from that.
For example, from a video file like this:
===================
I make two cuts
======||=====||||==
and generate a new smaller video file:
=============
And when I say 2, I mean an arbitrary number of separate cuts, depending on the video file.
If I wanted to cut just one part I would do:
ffmpeg -i video.mp4 -ss 00:00:03.500 -to 00:00:08.500 -async 1 cut.mp4 -y
Which works perfectly. I could perhaps do this many times and then join all the cuts together... But this is very inefficient for larger video files.
To make two cuts I was looking at filter_complex. I've been trying to get it right for hours but I can't seem to get this working :/
If I do something like this I get a video with no audio:
command='ffmpeg -i video.mp4 -filter_complex "[0]trim=start_frame=10:end_frame=20[v0]; [0]trim=start_frame=30:end_frame=40[v1]; [v0][v1]concat=n=2[v5]" -map [v5] -async 1 output.mp4'
If I try to do this, things get all messed up:
ffmpeg -y -i video.mp4 -filter_complex "[0:v]trim=start_frame=10:end_frame=20[v0]; [0:a]atrim=start=10:end=20[a0]; [0:v]trim=start_frame=30:end_frame=40[v1]; [0:a]atrim=start=30:end=40[a1]; [v0][a0][v1][a1]concat=2:v=1:a=1[v5][a]" \ -map [v5] -map [a] -async 1 output.mp4
I even trying to to this in Python with ffmpeg-python https://github.com/kkroening/ffmpeg-python but I also can't get audio to work.
Can anyone give me some help on this? Thank you very much!!
FFmpeg offers different commands that you can use to split up a video. We'll take a look at how to use the seeking parameter -ss , but you can also use other commands such as the trim filter. To cut a specific part of a video, you use the seeking option -ss to get to a specific part that you want to cut.
FFmpeg is a cross-platform solution to record, convert and edit audio and video. It is a command line tool to convert one video file format to another. However, you could also find a FFmpeg GUI for user-friendly video editing.
FFmpeg offers the overlay filter as a way to overlay images (or even other videos) onto video streams. To centre overlay/watermark on a video, use this command: ffmpeg -i inputvideo.avi -i watermarklogo.png -filter_complex \ "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -codec:a copy output.flv.
The select filter is better for this.
ffmpeg -i video \ -vf "select='between(t,4,6.5)+between(t,17,26)+between(t,74,91)', setpts=N/FRAME_RATE/TB" \ -af "aselect='between(t,4,6.5)+between(t,17,26)+between(t,74,91)', asetpts=N/SR/TB" out.mp4
select and its counterpart filter is applied to the video and audio respectively. Segments selected are times 4 to 6.5 seconds, 17 to 26 seconds and finally 74 to 91 seconds. The timestamps are made continuous with the setpts and its counterpart filter..
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With