Compare commits
2
Commits
e1d7474e00
...
814c64cc52
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
814c64cc52 | ||
|
|
c17ccb6563 |
+50
-46
@@ -153,6 +153,8 @@ def cut_recording(media: PreparedMedia, options: ProcessingOptions,
|
||||
except InvalidMediaError:
|
||||
raise InvalidMediaError("Impossible to retrieve timestamp of final i-frame.")
|
||||
|
||||
assert head_iframe_ts <= tail_iframe_ts
|
||||
|
||||
checks.append(pos+head_iframe_ts-ts1)
|
||||
|
||||
subparts = []
|
||||
@@ -199,61 +201,63 @@ def cut_recording(media: PreparedMedia, options: ProcessingOptions,
|
||||
if h264_head_ts is not None:
|
||||
h264_ts.append(h264_head_ts)
|
||||
|
||||
# Creating MKV file that corresponds to current part between I-frames
|
||||
# Internal video with all streams (video, audio and subtitles)
|
||||
internal_mkv_name = f'part-{partnum:d}-internal.mkv'
|
||||
# Internal video stream as a raw H264 stream
|
||||
internal_h264_name = f'part-{partnum:d}-internal.h264'
|
||||
# Internal video timestamps
|
||||
internal_h264_ts_name = f'part-{partnum:d}-internal-ts.txt'
|
||||
# Internal video with only audio and subtitles streams
|
||||
internal_novideo_mkv_name = f'part-{partnum:d}-internal-novideo.mkv'
|
||||
if head_iframe_ts < tail_iframe_ts:
|
||||
|
||||
try:
|
||||
internal_mkv = open(internal_mkv_name, 'wb+')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: {internal_mkv_name}") from e
|
||||
# Creating MKV file that corresponds to current part between I-frames
|
||||
# Internal video with all streams (video, audio and subtitles)
|
||||
internal_mkv_name = f'part-{partnum:d}-internal.mkv'
|
||||
# Internal video stream as a raw H264 stream
|
||||
internal_h264_name = f'part-{partnum:d}-internal.h264'
|
||||
# Internal video timestamps
|
||||
internal_h264_ts_name = f'part-{partnum:d}-internal-ts.txt'
|
||||
# Internal video with only audio and subtitles streams
|
||||
internal_novideo_mkv_name = f'part-{partnum:d}-internal-novideo.mkv'
|
||||
|
||||
try:
|
||||
internal_novideo_mkv = open(internal_novideo_mkv_name, 'wb+')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: \
|
||||
{internal_novideo_mkv_name}") from e
|
||||
try:
|
||||
internal_mkv = open(internal_mkv_name, 'wb+')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: {internal_mkv_name}") from e
|
||||
|
||||
try:
|
||||
internal_h264 = open(internal_h264_name, 'wb+')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: {internal_h264_name}") from e
|
||||
try:
|
||||
internal_novideo_mkv = open(internal_novideo_mkv_name, 'wb+')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: \
|
||||
{internal_novideo_mkv_name}") from e
|
||||
|
||||
try:
|
||||
internal_h264_ts = open(internal_h264_ts_name, 'w+', encoding='utf8')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: {internal_h264_ts_name}") from e
|
||||
try:
|
||||
internal_h264 = open(internal_h264_name, 'wb+')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: {internal_h264_name}") from e
|
||||
|
||||
# logger.info('Merge header, middle and trailer subpart into: %s' % internal_mkv_name)
|
||||
# Extract internal part of MKV
|
||||
extract_mkv_part(mkvmerge_path=options.tools_paths['mkvmerge'], input_file=media.movie,
|
||||
output_file=internal_mkv, begin=head_iframe_ts, end=tail_iframe_ts)
|
||||
try:
|
||||
internal_h264_ts = open(internal_h264_ts_name, 'w+', encoding='utf8')
|
||||
except OSError as e:
|
||||
raise TemporaryFileError(f"Impossible to create file: {internal_h264_ts_name}") from e
|
||||
|
||||
# Extract video stream of internal part as a raw H264 and its timestamps.
|
||||
logger.info('Extract video track as raw H264 file.')
|
||||
extract_track_from_mkv(mkvextract_path=options.tools_paths['mkvextract'],
|
||||
input_file=internal_mkv, index=0, output_file=internal_h264,
|
||||
timestamps=internal_h264_ts)
|
||||
# logger.info('Merge header, middle and trailer subpart into: %s' % internal_mkv_name)
|
||||
# Extract internal part of MKV
|
||||
extract_mkv_part(mkvmerge_path=options.tools_paths['mkvmerge'], input_file=media.movie,
|
||||
output_file=internal_mkv, begin=head_iframe_ts, end=tail_iframe_ts)
|
||||
|
||||
# Remove video track from internal part of MKV
|
||||
logger.info('Remove video track from %s', internal_mkv_name)
|
||||
remove_video_tracks_from_mkv(mkvmerge_path=options.tools_paths['mkvmerge'],
|
||||
input_file=internal_mkv, output_file=internal_novideo_mkv)
|
||||
# Extract video stream of internal part as a raw H264 and its timestamps.
|
||||
logger.info('Extract video track as raw H264 file.')
|
||||
extract_track_from_mkv(mkvextract_path=options.tools_paths['mkvextract'],
|
||||
input_file=internal_mkv, index=0, output_file=internal_h264,
|
||||
timestamps=internal_h264_ts)
|
||||
|
||||
temporaries.add(internal_mkv)
|
||||
temporaries.add(internal_h264)
|
||||
temporaries.add(internal_h264_ts)
|
||||
temporaries.add(internal_novideo_mkv)
|
||||
# Remove video track from internal part of MKV
|
||||
logger.info('Remove video track from %s', internal_mkv_name)
|
||||
remove_video_tracks_from_mkv(mkvmerge_path=options.tools_paths['mkvmerge'],
|
||||
input_file=internal_mkv, output_file=internal_novideo_mkv)
|
||||
|
||||
h264parts.append(internal_h264)
|
||||
h264_ts.append(internal_h264_ts)
|
||||
subparts.append(internal_novideo_mkv)
|
||||
temporaries.add(internal_mkv)
|
||||
temporaries.add(internal_h264)
|
||||
temporaries.add(internal_h264_ts)
|
||||
temporaries.add(internal_novideo_mkv)
|
||||
|
||||
h264parts.append(internal_h264)
|
||||
h264_ts.append(internal_h264_ts)
|
||||
subparts.append(internal_novideo_mkv)
|
||||
|
||||
if (not options.coarse) and (nb_tail_frames > options.threshold):
|
||||
# We extract all frames between the I-frame (including it) upto the end.
|
||||
|
||||
@@ -241,7 +241,7 @@ def extract_all_streams(ffmpeg_path:str, ffprobe_path:str, input_file:IO[bytes],
|
||||
video_codec_params.extend([f'-c:v:{video_id:d}', codec, f'-level:v:{video_id:d}',
|
||||
level, '-pix_fmt', pixel_format])
|
||||
video_codec_params.extend(interlaced_options)
|
||||
video_codec_params.extend([f'-colorspace:v:{video_id}', color_space,
|
||||
video_codec_params.extend([f'-colorspace:v:{video_id:d}', color_space,
|
||||
f'-color_primaries:v:{video_id:d}', color_primaries,
|
||||
f'-color_trc:v:{video_id:d}', color_transfer,
|
||||
f'-color_range:v:{video_id:d}', color_range])
|
||||
|
||||
Reference in New Issue
Block a user