Use ffmpeg copy mode:
ffmpeg -ss 0 -to 00:20:35.4 -i input.mkv -c copy part1.mkv
ffmpeg -ss 00:20:35.4 -i input.mkv -c copy part2.mkv
Apply subtitle correction to part2, then concatenate.
Some users may believe “fsdss880engsub convert020354 min fixed” is a command-line tool. It is not. However, you can create a script named convert_min_fix.sh:
#!/bin/bash
INPUT=$1
TIMECODE="00:20:35.4"
ffmpeg -ss 0 -to $TIMECODE -i $INPUT -c copy part1.mkv
ffmpeg -ss $TIMECODE -i $INPUT -c copy part2.mkv
# Apply subtitle offset to part2 using subtitle edit CLI
subtitleedit /convert part2.srt /offset=+200ms
ffmpeg -i part2.mkv -i part2_fixed.srt -c copy -c:s mov_text part2_fixed.mp4
# Concat
ffmpeg -i part1.mkv -i part2_fixed.mp4 -filter_complex concat=n=2:v=1:a=1 output_fixed.mp4
echo "Fixed at $TIMECODE"
Let us break down every element to understand the user’s intent: fsdss880engsub convert020354 min fixed
| Component | Meaning | |-----------|---------| | fsdss880 | Likely a content ID (e.g., FALENO movie FSDSS-880). | | engsub | English subtitles are present, either hardsubbed (burned in) or soft-subbed (.srt/.ass). | | convert | The file has undergone conversion (codec, container, resolution). | | 020354 | Most likely a timecode: 02 minutes 03 seconds 54 milliseconds? More logically: 00:20:35.4 (20 minutes, 35 seconds, frame 4). | | min fixed | “Minimal fix” or “minute fixed” – a small correction applied to resolve sync, AV desync, or header issue. |
Thus, the full phrase describes a converted video file (possibly from MKV to MP4, or AVI to HEVC) originally labeled FSDSS-880, with English subtitles, where a sync problem around 20 minutes 35 seconds was minimally corrected.
import ffmpeg import pysubs2def extract_and_fix_subs(video_path, sub_path, start_time, duration_minutes): # start_time format: "HH:MM:SS.milliseconds" or seconds duration_sec = duration_minutes * 60 Use ffmpeg copy mode: ffmpeg -ss 0 -to 00:20:35
# 1. Cut video output_video = "output_cut.mp4" ffmpeg.input(video_path, ss=start_time, t=duration_sec).output(output_video).run() # 2. Load subtitles subs = pysubs2.load(sub_path) # 3. Shift and crop subs to match cut start_seconds = ffmpeg.parse_time(start_time) # custom parse function for line in subs: line.start -= start_seconds line.end -= start_seconds subs = [line for line in subs if line.end > 0 and line.start < duration_sec] # 4. Save fixed subs output_sub = "fixed_subs.srt" subs.save(output_sub) return output_video, output_sub
If only a segment after 20:35 is desynced, you must split and re-sync. Apply subtitle correction to part2, then concatenate
Using Aegisub (visual subtitle editor):
Alternatively, using ffmpeg with setpts filter for video and separate subtitle delay is complex; better to cut video into parts.