Ich fürchte, ich bin schon zu lange raus aus dem Thema, hab daher nicht mehr so viel Detailwissen… Aber Versuch macht kluch… zumindest ein paar Encoder-Parameter können sicher nicht schaden
Hier die wichtigen Parameter:
-q int
Das ist "quality scale". Laut Apple Doku ist bis 25 niedrig, bis 50 normal, bis 75 gut und bis 100 nahezu lossless. Ein sehr gutes Ergebnis liefert 60
-bf 1
nutzt pyramid b-frames. Unbedingt verwenden. Immer.
-prio_speed 1
prioritize speed. Erhöht die enocder Geschwindigkeit deutlich, also richtig deutlich. Die Größe nimmt je nach Quellmaterial nur wenig zu, ab und an gar fast gar nicht.
-g int
setz die GOP size. Standardmäßig ist auto aktiv. Wenn du das setzt, ist eine Größe von 10 mal fps zu empfehlen, also bei BluRays mit 24fps
-g 240
. Das ergibt ca. 3%-5% weniger Dateigröße
-vtag hvc1
unbedingt verwenden bei hevc/h265. Apple Geräte / Software erwartet das, besonders das AppleTV. Das standardmäßige hevc von ffmpeg kann zu Inkompatibilitäten besonders in mp4-Containern führen.
Also: Umkodieren einer BluRay, FullHD, croppen auf 1920x800, Audio passtrough:
Code:
ffmpeg -i input.mkv -c:v hevc_videotoolbox -bf 1 -vtag hvc1 -q:v 60 -prio_speed 1 -g 240 -vf crop=1920:800:0:140 -c:a copy output.mp4
Geschwindigkeit: mit prio_speed 1 bei obiger Befehlszeile auf einem M1 Mini rd. 420 fps, ohne prio_speed ca. 250 fps. Auf einem Mac Studio Max mit prio_speed 1 ca. 560 fps.
Eine DVD (also 720x576) ohne crop nach hevc zu codieren und Audio auf Dolby ProLogic II downmixen und in AAC codieren, läuft auf meinem mac Studio mit prio_speed 1 bei ca. 1020 fps. Der Studio wird auch nach Stunden nicht warm, geschweige denn der Lüfter dreht auf.
Edit:
Ach ja, nimm unbedingt eine native Apple-Silicon-Version von ffmpeg. Intel-binaries verwenden nicht alle hardware-encoder-Funktionen. Findest du keines, musst du ffmpeg selbst kompilieren. Natürlich auf einem M1. Ist aber recht einfach.