Proyek ini adalah draft dan tidak dimaksudkan untuk digunakan oleh siapa pun.
vtcff adalah perpustakaan untuk transkode antara format video dengan penekanan pada mempertahankan kualitas dan kedalaman warna dalam jaringan pipa produksi video. Dalam tugas studio, detik video mengambil gigabyte dan kompromi kualitas paling tidak diinginkan.
vtcff cenderung memaksimalkan kualitas, mengorbankan kecepatan dan ruang disk.
vtcff sebenarnya adalah pembungkus untuk ffmpeg - alat video paling tidak intuitif yang pernah dibuat.
$ pip3 install vtcffPerintah ini akan menginstal paket, tetapi tidak ffmpeg itu sendiri.
$ 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 ))Objek memungkinkan Anda untuk menentukan argumen FFMPEG secara manual. Argumen yang diberikan dengan cara ini lebih diutamakan daripada argumen yang dihasilkan oleh objek.
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" ]) cmd.custom berisi empat bidang, yang dapat dimodifikasi secara independen.
Argumen yang akan dimasukkan sebelum -i source :
custom.before_i Argumen yang akan dimasukkan setelah -i source :
custom.after_icustom.videocustom.audio ffmpeg memiliki dua filter video untuk konversi ukuran warna dan bingkai:
scale (libswscale) lebih fleksibelzscale (zimg) memberikan kualitas yang lebih mudah diprediksi Secara default, vtcff menggunakan zscale . Terkadang dapat menyebabkan kesalahan "tidak ada jalur antara ruang warna". Jika metode lain tidak membantu, Anda cukup mengganti zscale dengan scale .
cmd.use_zscale == True berarti zscale digunakancmd.use_zscale == False Means scale digunakan 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 , berarti bahwa ZIMG akan digunakan untuk konversi secara eksplisit ditetapkan oleh properti objek. Ini bagus karena konversi ini akan berkualitas tinggi.
Namun, konversi implisit juga mungkin diperlukan. Misalnya, sebelum memproses PNG 16-bit dengan zscale , kita perlu mengonversi format piksel dari rgba64be ke gbrap16le . FFMPEG akan melakukannya secara otomatis dengan libswscale terlepas dari properti 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 ) Secara default, near_lossless diatur untuk memperlambat kemungkinan VcPreset.N10_PLACEBO , karena kami mencoba memaksimalkan kualitas. Anda mungkin ingin memilih preset yang lebih cepat sehingga hasilnya muncul dalam seumur hidup.
Secara default, lossless diatur ke VcPreset.N1_ULTRAFAST tercepat yang mungkin, karena kami tidak kehilangan kualitas apa pun di sini. Ukuran yang dihasilkan akan dibandingkan dengan prores HQ/XQ dan waktu penyandiannya masuk akal.
Aliran media dapat disalin tanpa pengkodean ulang dan tanpa kehilangan kualitas.
Namun, mungkin ada beberapa kehilangan metadata - misalnya, informasi tentang rentang warna dan ruang warna.
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 ()Konversi TimeLapses atau urutan bingkai CGI ke file video 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 ))