# ffmpeg

cut

# from/to timestamp in format `hh:mm:ss.x`
ffmpeg -ss <from> -to <to> -i infile -acodec copy -vcodec copy outfile

height not divisible by 2

-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"

swap and rename streams

ffmpeg -i input.m4v \
    -map 0:v:0 \                    # take first video stream
    -map 0:a:1 \                    # take second audio stream (*)
    -map 0:a:0 \                    # take first audio stream  (#)
    -map 0:s:0 \                    # take first subtitle stream
    -metadata:s:1 language=eng \    # set second stream (*) to `eng`
    -metadata:s:2 language=deu \    # set third stream (#) to `deu`
    -disposition:a:0 default \      # set default tag in first audio stream
    -disposition:a:1 0 \            # set default tag in second audio stream
    -c copy \                       # don't reencode anything
    output.m4v

shift subtitle

ffmpeg -itsoffset 3 -i input.srt output.srt