Add a new option to not take into account sequences that are shorter than a certain threshold.
This commit is contained in:
		
							
								
								
									
										24
									
								
								removeads.py
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								removeads.py
									
									
									
									
									
								
							| @@ -17,6 +17,8 @@ from tqdm import tqdm, trange | |||||||
| from select import select | from select import select | ||||||
| from math import floor, ceil, log | from math import floor, ceil, log | ||||||
| from shutil import copyfile, which | from shutil import copyfile, which | ||||||
|  | import hexdump | ||||||
|  |  | ||||||
|  |  | ||||||
| # Useful SPS/PPS discussion | # Useful SPS/PPS discussion | ||||||
| # TODO: improve situation of SPS and PPS header mismatch when merging MVK with mkvmerge to remove warnings. | # TODO: improve situation of SPS and PPS header mismatch when merging MVK with mkvmerge to remove warnings. | ||||||
| @@ -1092,12 +1094,18 @@ def main(): | |||||||
|     parser.add_argument("-o", "--output", dest='outputFile', type=str, required=True, help="Output MKV file to produce.") |     parser.add_argument("-o", "--output", dest='outputFile', type=str, required=True, help="Output MKV file to produce.") | ||||||
|     parser.add_argument("-p", "--part", dest='parts', nargs='+', required=False, action='append', metavar="hh:mm:ss[.mmm]-hh:mm:ss[.mmm]", help="Extract this exact part of the original file.") |     parser.add_argument("-p", "--part", dest='parts', nargs='+', required=False, action='append', metavar="hh:mm:ss[.mmm]-hh:mm:ss[.mmm]", help="Extract this exact part of the original file.") | ||||||
|     parser.add_argument("-k", "--keep", action='store_true', help="Do not cleanup temporary files after processing.") |     parser.add_argument("-k", "--keep", action='store_true', help="Do not cleanup temporary files after processing.") | ||||||
|  |     parser.add_argument("--safe", action='store_true', help="Suppress headers and trailers to only keep safe parts of the movie.") | ||||||
|  |     parser.add_argument("-t", "--threshold", action='store', type=int, help="Suppress headers and trailers that are smaller than the threshold.") | ||||||
|  |     parser.add_argument("-f", "--fusion", action='store_true', help="Collapse the trailer of a part with the header of the next (when it makes sense).") | ||||||
|     parser.add_argument("--dump-memory", action='store_true', dest='dump', help="For debug purpose, dump all memory mapping of headers (and trailers) before (after) each part. They are kept in memory only otherwise.") |     parser.add_argument("--dump-memory", action='store_true', dest='dump', help="For debug purpose, dump all memory mapping of headers (and trailers) before (after) each part. They are kept in memory only otherwise.") | ||||||
|     parser.add_argument("-s","--srt", action='store_true', dest='srt', help="Dump subtitles ") |     parser.add_argument("-s","--srt", action='store_true', dest='srt', help="Dump subtitles ") | ||||||
|    |    | ||||||
|     args = parser.parse_args() |     args = parser.parse_args() | ||||||
|     logger.debug("Arguments: %s" % args) |     logger.debug("Arguments: %s" % args) | ||||||
|      |      | ||||||
|  |     if args.threshold == None: | ||||||
|  |         args.threshold = 0 | ||||||
|  |      | ||||||
|     allOptionalTools, paths = checkRequiredTools() |     allOptionalTools, paths = checkRequiredTools() | ||||||
|  |  | ||||||
|     # Flatten args.parts |     # Flatten args.parts | ||||||
| @@ -1252,7 +1260,7 @@ def main(): | |||||||
|          |          | ||||||
|         subparts = [] |         subparts = [] | ||||||
|          |          | ||||||
|         if nbHeadFrames > 0: |         if nbHeadFrames > args.threshold: | ||||||
|             # We extract all frames between the beginning upto the frame that immediately preceeds the I-frame. |             # We extract all frames between the beginning upto the frame that immediately preceeds the I-frame. | ||||||
|             head = extractAllStreams(ffmpeg=paths['ffmpeg'], ffprobe=paths['ffprobe'], inputFile=mkv, begin=ts1, end=headIFrameTS, nbFrames=nbHeadFrames-1, filesPrefix='part-%d-head' % (partnum), streams=streams, width=width, height=height, temporaries=temporaries, dumpMemFD=args.dump) |             head = extractAllStreams(ffmpeg=paths['ffmpeg'], ffprobe=paths['ffprobe'], inputFile=mkv, begin=ts1, end=headIFrameTS, nbFrames=nbHeadFrames-1, filesPrefix='part-%d-head' % (partnum), streams=streams, width=width, height=height, temporaries=temporaries, dumpMemFD=args.dump) | ||||||
|             # Change private codec data of the new file so that it is the same as the one of the original movie |             # Change private codec data of the new file so that it is the same as the one of the original movie | ||||||
| @@ -1269,17 +1277,21 @@ def main(): | |||||||
|         extractMKVPart(mkvmerge=paths['mkvmerge'], inputFile=mkv, outputFile=internal, begin=headIFrameTS, end=tailIFrameTS) |         extractMKVPart(mkvmerge=paths['mkvmerge'], inputFile=mkv, outputFile=internal, begin=headIFrameTS, end=tailIFrameTS) | ||||||
|         subparts.append(internal) |         subparts.append(internal) | ||||||
|          |          | ||||||
|         if nbTailFrames > 0: |         if nbTailFrames > args.threshold: | ||||||
|             # We extract all frames between the I-frame (including it) upto the end. |             # We extract all frames between the I-frame (including it) upto the end. | ||||||
|             tail = extractAllStreams(ffmpeg=paths['ffmpeg'], ffprobe=paths['ffprobe'], inputFile=mkv, begin=tailIFrameTS, end=ts2, nbFrames=nbTailFrames, filesPrefix='part-%d-tail' % (partnum), streams=streams, width=width, height=height, temporaries=temporaries, dumpMemFD=args.dump) |             tail = extractAllStreams(ffmpeg=paths['ffmpeg'], ffprobe=paths['ffprobe'], inputFile=mkv, begin=tailIFrameTS, end=ts2, nbFrames=nbTailFrames, filesPrefix='part-%d-tail' % (partnum), streams=streams, width=width, height=height, temporaries=temporaries, dumpMemFD=args.dump) | ||||||
|             # Change private codec data of the new file so that it is the same as the one of the original movie |             # Change private codec data of the new file so that it is the same as the one of the original movie | ||||||
|             changeCodecPrivateData(paths['mkvinfo'], tail, codecData) |             changeCodecPrivateData(paths['mkvinfo'], tail, codecData) | ||||||
|             subparts.append(tail) |             subparts.append(tail) | ||||||
|          |          | ||||||
|         logger.info('Merging: %s' % subparts) |         if not args.fusion: | ||||||
|         part = mergeMKVs(inputs=subparts, outputName="part-%d.mkv" % partnum) |             logger.info('Merging: %s' % subparts) | ||||||
|         mkvparts.append(part) |             part = mergeMKVs(inputs=subparts, outputName="part-%d.mkv" % partnum) | ||||||
|         temporaries.append(part) |             mkvparts.append(part) | ||||||
|  |             temporaries.append(part) | ||||||
|  |         else: | ||||||
|  |             logging.error("Not yet implemented") | ||||||
|  |             exit(-1) | ||||||
|          |          | ||||||
|         pos = pos+tailIFrameTS-ts1 |         pos = pos+tailIFrameTS-ts1 | ||||||
|      |      | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user