Dieses Projekt ist ein Entwurf und soll von niemandem verwendet werden.
vtcff ist eine Bibliothek für die Transkodierung zwischen Videoformaten mit Schwerpunkt auf der Aufrechterhaltung der Qualität und der Farbtiefe in Pipelines der Videoproduktion. Bei Studioaufgaben nehmen Video Sekunden Gigabyte auf und Qualitätskompromisse sind am wenigsten wünschenswert.
vtcff neigt dazu, Qualität zu maximieren, Geschwindigkeit und Scheibenraum zu opfern.
vtcff ist eigentlich ein Wrapper für ffmpeg - das am wenigsten intuitive Videotool, das jemals erstellt wurde.
$ pip3 install vtcffDieser Befehl installiert das Paket, aber nicht ffmpeg selbst.
$ pip3 install git+https://github.com/rtmigo/vtcff_py@staging#egg=vtcff import subprocess
from vtcff import FfmpegCommand , Scale , Transpose , Hevc
cmd = FfmpegCommand ()
cmd . src_file = '/path/to/source.mov'
cmd . dst_file = '/path/to/target.mov'
# set set some filters
cmd . scale = Scale ( 1920 , 1080 )
cmd . transpose = Transpose . CLOCKWISE
# set compression format
cmd . dst_codec_video = Hevc ( mbps = 100 )
# run command
subprocess . check_call ( list ( cmd )) import subprocess , os
from vtcff import FfmpegCommand , Prores
cmd = FfmpegCommand ()
cmd . src_file = 'source.mov'
cmd . dst_file = 'target.mov'
cmd . dst_codec_video = Prores ()
print ( str ( cmd ))
# ffmpeg -i source.mov -codec:v prores_ks target.mov
print ( list ( cmd ))
# ['ffmpeg', '-i', 'source.mov', '-codec:v', 'prores_ks', 'target.mov']
# running in different ways:
os . system ( str ( cmd ))
subprocess . run ( list ( cmd ))Mit dem Objekt können Sie FFMPEG -Argumente manuell angeben. Auf diese Weise angegebene Argumente haben Vorrang vor Argumenten, die vom Objekt erzeugt werden.
from vtcff import FfmpegCommand
cmd = FfmpegCommand ()
# set arguments as string
cmd . custom . video . string = "-codec:v libx265"
cmd . custom . video . string += "-x265-params lossless=1"
# or as list
cmd . custom . video . list = [ "-codec:v" , "libx265" ]
cmd . custom . video . list . extend ([ "-x265-params" , "lossless=1" ]) Das cmd.custom enthält vier Felder, die unabhängig voneinander geändert werden können.
Argumente, die vor -i source eingefügt werden sollen:
custom.before_i Argumente, die nach -i source eingefügt werden sollen:
custom.after_icustom.videocustom.audio ffmpeg verfügt über zwei Videofilter für Farb- und Rahmengröße Conversions:
scale (libswscale) ist vielseitigerzscale (ZIMG) gibt eine vorhersehbarere Qualität Standardmäßig verwendet vtcff zscale . Manchmal kann es zu einem Fehler "kein Pfad zwischen Farbenspitzen" führen. Wenn andere Methoden nicht helfen, können Sie zscale einfach durch scale ersetzen.
cmd.use_zscale == True Means zscale wird verwendetcmd.use_zscale == False Means scale wird verwendet from vtcff import FfmpegCommand , Scale
cmd = FfmpegCommand ()
assert cmd . use_zscale == True # by default, it's 'zscale' (zimg)
cmd . use_zscale = False # switching to 'scale' (libswscale)
# properties affected:
cmd . scale = Scale ( 1920 , 1080 )
cmd . src_color_space = 'bt709'
cmd . dst_color_space = 'bt2020ncl'
cmd . src_range_full = True
cmd . dst_range_full = False use_zscale=True bedeutet, dass ZimG für Konvertierungen verwendet wird, die explizit durch Objekteigenschaften festgelegt werden. Dies ist gut, weil diese Conversions von hoher Qualität sein werden.
Es können jedoch auch implizite Konvertierungen erforderlich sein. Vor der Verarbeitung von 16-Bit-PNG mit zscale müssen wir beispielsweise das Pixelformat von rgba64be in gbrap16le konvertieren. FFMPEG erledigt es automatisch mit libswscale unabhängig von der use_zscale .
from vtcff import FfmpegCommand , Scale , Crop
# crop 10 pixels, then scale
a = FfmpegCommand ()
a . crop = Crop ( left = 10 )
a . scale = Scale ( 1920 , 1080 )
# scale, then crop 10 pixels
b = FfmpegCommand ()
b . scale = Scale ( 1920 , 1080 )
b . crop = Crop ( left = 10 ) from vtcff import FfmpegCommand , Scale
cmd = FfmpegCommand ()
# set height to 1080, automatically compute width
cmd . scale = Scale ( - 1 , 1080 )
# set height to 1080, select the width as the closest factor
# of two to the proportional size
cmd . scale = Scale ( - 2 , 1080 ) from vtcff import FfmpegCommand
cmd = FfmpegCommand ()
# Full/Data/PC range to Limited/Video/TV
cmd . src_range_full = True
cmd . dst_range_full = False
# rec.709 to rec.2020
cmd . src_color_space = 'bt709'
cmd . dst_color_space = 'bt2020ncl' from vtcff import FfmpegCommand , Prores , ProresProfile
cmd = FfmpegCommand ()
# by default it will encode to ProRes 4:2:2
cmd . dst_codec_video = Prores ()
# encode to ProRes 4:2:2 HQ instead
cmd . dst_codec_video = Prores ( profile = ProresProfile . HQ ) from vtcff import FfmpegCommand , Hevc , VcPreset
cmd = FfmpegCommand ()
# ideal quality
cmd . dst_codec_video = Hevc ( lossless = True )
# best for bitrate quality
cmd . dst_codec_video = Hevc ( near_lossless = True , mbps = 100 )
# default quality
cmd . dst_codec_video = Hevc ( mbps = 100 )
# all modes can be tweaked with optional speed presets:
cmd . dst_codec_video = Hevc ( mbps = 100 ,
preset = VcPreset . N7_SLOW ) Standardmäßig ist der near_lossless auf den langsamsten möglichen VcPreset.N10_PLACEBO eingestellt, da wir versuchen, die Qualität zu maximieren. Möglicherweise möchten Sie ein schnelleres Voreinstellung auswählen, damit das Ergebnis innerhalb eines Lebens erscheint.
Standardmäßig ist das lossless auf schnellstmögliche VcPreset.N1_ULTRAFAST eingestellt, da wir hier keine Qualität verlieren. Die resultierende Größe ist in etwa mit PRORES HQ/XQ vergleichbar und die Codierungszeit ist angemessen.
Die Medienströme können ohne Neukodierung und ohne Qualitätsverlust kopiert werden.
Es kann jedoch einen gewissen Verlust von Metadaten geben - beispielsweise Informationen zu Farbbereichen und Farbräumen.
from vtcff import FfmpegCommand , VideoCopy , NoAudio
cmd = FfmpegCommand ()
# changing container from mp4 to mov
cmd . src_file = "source.mp4"
cmd . dst_file = "source.mov"
# keeping video, removing audio
cmd . dst_codec_video = VideoCopy ()
cmd . dst_codec_audio = NoAudio ()Konvertieren von Timelapsen oder CGI -Frame -Sequenzen in Prores Videodatei.
import subprocess
from vtcff import FfmpegCommand , Prores , ProresProfile
cmd = FfmpegCommand ()
# input directory will be automatically transformed
# to a pattern like '/my/dir_with_frames/img_%04.png'
cmd . src_file = '/my/dir_with_frames'
cmd . src_fps = 29.97
cmd . dst_file = '/videos/timelapse.mov'
cmd . dst_codec_video = Prores ( profile = ProresProfile . HQ )
# images usually have Full/Data/PC color range,
# but most NLEs assume that videos have Limited/Video/TV range
cmd . src_range_full = True
cmd . dst_range_full = False
# we will treat sRGB like Rec.709,
# although it's a little sad
cmd . src_color_space = 'bt709'
cmd . dst_color_space = 'bt709'
# run command
subprocess . check_call ( list ( cmd ))