Full timeline for playlists #1231
Replies: 6 comments 6 replies
-
This reminds me a little of blenders watchtower and I absolutely loved it. Having to check the 'hookups' between shots faily often, this and being able to scrub seamlessly between shots would 100% be super helpful. Currently shot transitions are not always smooth - will this pre-encode or cache the whole timeline to smooth it? |
Beta Was this translation helpful? Give feedback.
-
The PR is open but the transition checkingss are tedious to manage while keeping the progress bar properly synced. It seems that FFMPEG adds frames sometimes at transitions. |
Beta Was this translation helpful? Give feedback.
-
Can you post your testvideos? I am running ffmpeg to stitch videos in another context and I could try looking into that issue.
|
Beta Was this translation helpful? Give feedback.
-
I'm not sure what you tested etc, so please forgive me if I am posting exactly what you already tried here :D Here's the part of my code generating the ffmpeg commands: Step 1: Conform videosI do this for every clip. You'll probably want to set some kind of output codec etc here. Maybe even convert it into an image sequence so you're sure there are no extra frames. Get fps:out = subprocess.check_output([ffprobe_bin,str(self.clip_path),"-v","0","-select_streams","v","-print_format","flat","-show_entries","stream=r_frame_rate"], text=True)
rate = out.split('=')[1].strip()[1:-1].split('/') Get duration:out = subprocess.check_output([ffprobe_bin,str(self.clip_path),"-v", "error","-select_streams","v","-print_format","flat","-show_entries","stream=duration"],text=True)
duration = float(out.split('=')[1].strip()[1:-1]) You won't need the filter and 'duration' and 'out_fps' are gathered with ffprobe in a previous step "{ffmpeg_bin} -y -hide_banner -stats -loglevel error "
"-filter_complex {filter_string} "
"-t {duration} "
"-r {out_fps} "
"{output_name}" Step 2:Build the 'final' edit by splicing the conformed videos ( or using the image sequence ). Re-encoding:ffmpeg_cmd = (
"{ffmpeg_bin} -y -hide_banner -stats -loglevel error "
"{input} "
"-filter_complex \"{concatfilter}[0];[0]{sequencemaskfilter}\" "
#"-movflags faststart "
"{output_name}"
).format(
ffmpeg_bin=ffmpeg_bin,
input=inputlist,
concatfilter=concatfilter,
sequencemaskfilter=sequencemask.generateFilterString(),
output_name=outputpath
) Edit:The This generates two strings - one that is basically all input files in a list like: inputlist=''
concatfilterlist=''
for i, clip in enumerate(self.edit):
inputlist+= '-i "{}" '.format(clip.converted_clip_path)
concatfilterlist+='[{index}:0] '.format(index=i)
concatfilter='{concatfilterlist}concat=n={clipnum}:v=1:a=0'.format(concatfilterlist=concatfilterlist, clipnum=len(self.edit)) Splicing:ffmpeg_cmd = (
"{ffmpeg_bin} -y -hide_banner -stats -loglevel error "
"-f concat -safe 0 "
"-i {input} "
"-c copy "
"{output_name}"
).format(
ffmpeg_bin=ffmpeg_bin,
input=editfile,
output_name=outputpath
) For me, this results in no extra frames ( as long as the input-fps for all clips is the same and matching the output-fps) |
Beta Was this translation helpful? Give feedback.
-
I forgot to mention here that the development is available but works only for new videos because it needs extra information that was not stored in the previous versions of Kitsu. For the previous videos a command is necessary:
The processing can be very long depending on the number of previews for which movie metadata and tiles are computed. |
Beta Was this translation helpful? Give feedback.
-
Some feedback from the Normaal studio:
|
Beta Was this translation helpful? Give feedback.
-
Would reviewers be interested in having a timeline for the entire playlist?
This timeline would allow to:
I attached a screenshot of the timeline below:
Please let me know what you think about it.
Beta Was this translation helpful? Give feedback.
All reactions