MKV in Stücke kleiner als 4 GB aufteilen?

MKV in Stücke kleiner als 4 GB aufteilen?

Ich muss ein in FAT32 formatiertes Gerät verwenden, um Filme zu speichern/freizugeben (mithilfe der Filesharing-Funktion meines Routers. Leider unterstützt mein Router kein ExFat, nur FAT32.). FAT32 hat eine Dateigrößebeschränkung von 4 GB. Eine einstündige Blu-ray-Disc ist normalerweise 4,5 GB groß, daher habe ich hier ein Problem.

Allerdings scheint VLC die nahtlose Wiedergabe von Dateien zu unterstützen, wenn diese nummeriert sind (zumindest ein Film, den ich hatte und der auf zwei CDs kam).Film CD1.aviUndFilm CD2.avihat gut funktioniert), also war mein Plan, meine zu großen Dateien einfach in Teile aufzuteilen, die etwas kleiner als 4 GB sind. Da ich sie nicht neu kodieren muss oder so, sollte das relativ schnell gehen.

ich lesediese Frageüber die Verwendung von Handbrake zum Trimmen von Videos, aber das ist nicht genau das, was ich tun möchte. Ich möchte Handbrake oder einer anderen ähnlichen Software (vorzugsweise in der Mac-Version verfügbar, aber ich habe auch Zugriff auf Win7 und Linux) sagen: „Teilen Sie diese 10 GB MKV in so viele MKVs auf, wie nötig, die maximal 3,5 GB groß sind“ (z. B. 2 x 3,5 GB und 1 x 3 GB,Film1.mkv, Film2.mkv, Film3.mkv).

Gibt es eine einfache Möglichkeit, dies in Handbrake (oder einer anderen Software) zu erreichen?

Antwort1

Hier ist ein einfaches Programm mit Python. FFmpeg und FFprobe

Kurzbeschreibung. Das Programm akzeptiert die einzige Eingabe „Dateiname“. Der Kürze halber gibt es nur eine minimale Fehlerprüfung. Bearbeiten Sie das Skript, um den gewünschten Schwellenwert vor der Segmentierung und Segmenterweiterung (üblicherweise „Teil“, „CD“, „Datenträger“) festzulegen.

Es erfolgt keine Neukodierung, sondern nur ein Remux in Segmente gleicher Länge (Dauer).

Standardausgaben sind „Dateiname.Teilenummer.mkv“

import os, sys, subprocess

fthreshMB = 3900 # threshhold size in MB
fthresh = fthreshMB * 1024*1024
segext = '.part'
segstartnum = 1

# main
fp = sys.argv[1]
if not os.path.isfile(fp):
    print('Invalid file',fp)
    sys.exit(1)

fsize = os.path.getsize(fp)
if fsize < fthresh:
    print('File is below threshhold of',fthreshMB,'MB')
    sys.exit(0)
    
# get file duration
ffcmd = 'ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "' + fp + '"'
result = subprocess.run(ffcmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
fdur = float(result.stdout)

# number of segments
segs = 1
while (fsize / segs) > fthresh:
    segs += 1
segdur = int(fdur / segs)
print('duration',fdur,'seconds. divide into',segs,'segments of',segdur,'seconds. segment start number',segstartnum)

# split file
fn, fext = os.path.splitext(fp)
ffcmd = 'ffmpeg -hide_banner -y -i "' + fp + '" -c copy -map 0 -segment_time ' + str(segdur) + ' -f segment ' + \
        '-reset_timestamps 1 -segment_start_number ' + str(segstartnum) + ' "' + fn + segext + '%d' + fext + '"'
result = subprocess.run(ffcmd,capture_output=True)
if result.returncode == 0: print('success')
else: print('error')

verwandte Informationen