I have a video and a list of timestamps that I want to filter.
[
{
"timestamp": [10, 20],
"state": true
},
{
"timestamp": [30, 40],
"state": false
},
{
"timestamp": [50, 60],
"state": true
},
{
"timestamp": [70, 80],
"state": true
}
]
I have a script like this to trim based on state.
video_path = Path(video_in.name)
video_file_name = video_path.stem
timestamps_to_cut = [
(timestamps_var[i]['timestamp'][0], timestamps_var[i]['timestamp'][1])
for i in range(len(timestamps_var)) if timestamps_var[i]['state']]
between_str = '+'.join(
map(lambda t: f'between(t,{t[0]},{t[1]})', timestamps_to_cut))
if timestamps_to_cut:
video_file = ffmpeg.input(video_path)
video = video_file.video.filter(
"select", f'({between_str})').filter("setpts", "N/FRAME_RATE/TB")
audio = video_file.audio.filter(
"aselect", f'({between_str})').filter("asetpts", "N/SR/TB")
output_video = f'./videos_out/{video_file_name}.mp4'
ffmpeg.concat(video, audio, v=1, a=1).output(
output_video).overwrite_output().global_args('-loglevel', 'quiet').run()
How can I smooth out this trimming like adding a fade or smoothing transition each time state is false?
source https://stackoverflow.com/questions/77848550/trim-with-transition-fade-using-ffmpeg-given-a-list-of-timestamps
Comments
Post a Comment