Ce projet est un projet et n'est destiné à être utilisé par personne.
vtcff est une bibliothèque pour le transcodage entre les formats vidéo en mettant l'accent sur le maintien de la qualité et de la profondeur des couleurs dans les pipelines de production vidéo. Dans les tâches de studio, les secondes vidéo prennent les gigaoctets et les compromis de qualité sont les moins souhaitables.
vtcff a tendance à maximiser la qualité, la vitesse de sacrification et l'espace disque.
vtcff est en fait un wrapper pour ffmpeg - l'outil vidéo le moins intuitif jamais créé.
$ pip3 install vtcffCette commande installera le package, mais pas ffmpeg lui-même.
$ 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 ))L'objet vous permet de spécifier manuellement les arguments FFMPEG. Les arguments donnés de cette manière ont priorité sur les arguments générés par l'objet.
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" ]) Le cmd.custom contient quatre champs, qui peuvent être modifiés indépendamment.
Arguments à insérer avant -i source :
custom.before_i Arguments à insérer après -i source :
custom.after_icustom.videocustom.audio ffmpeg a deux filtres vidéo pour les conversions de couleur et de taille:
scale (libswscale) est plus polyvalentezscale (ZIMG) donne une qualité plus prévisible Par défaut, vtcff utilise zscale . Parfois, cela peut entraîner une erreur "Aucun chemin entre les espaces couleurs". Si d'autres méthodes n'aident pas, vous pouvez simplement remplacer zscale par scale .
cmd.use_zscale == True signifie que zscale est utiliséecmd.use_zscale == False a une échelle d' scale utilisée 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 , signifie que ZIMG sera utilisé pour les conversions définies explicitement par les propriétés d'objet. C'est bien car ces conversions seront de haute qualité.
Cependant, des conversions implicites peuvent également être nécessaires. Par exemple, avant de traiter PNG 16 bits avec zscale , nous devons convertir le format Pixel de rgba64be en gbrap16le . FFMPEG le fera automatiquement avec libswscale quelle que soit la propriété 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 ) Par défaut, le near_lossless est défini sur le plus lent possible VcPreset.N10_PLACEBO , car nous essayons de maximiser la qualité. Vous voudrez peut-être choisir un préréglage plus rapide afin que le résultat apparaisse dans une vie.
Par défaut, le lossless est défini sur VcPreset.N1_ULTRAFAST le plus rapide, car nous ne perdons aucune qualité ici. La taille résultante sera à peu près comparable à PROres HQ / XQ et le temps d'encodage est raisonnable.
Les flux multimédias peuvent être copiés sans réencoder et sans perte de qualité.
Cependant, il peut y avoir une perte de métadonnées - par exemple, des informations sur les gammes de couleurs et les espaces de couleurs.
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 ()Convertir des calendriers ou des séquences de trame CGI en fichier vidéo PRORES.
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 ))