В ряде проектов, в которых я принимал участие – ставилась задача, автоматизировать процесс получения видео файла из произвольного пользовательского контента: изображение + видео файлы + звук.
Данный пост посвящён двум мощнейшим консольным кроссплатформенным инструментам ffmpeg и avisynth.
FFMPEG
описание
FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec – the leading audio/video codec library.
Мощный инструмент для конвертирования видео из разных форматов.
примеры использования
Сборка последовательность изображений в видео
For creating a video from many images:
The syntax foo-%03d.jpeg specifies to use a decimal number composed of three digits padded with zeroes to express the sequence number. It is the same syntax supported by the C printf function, but only formats accepting a normal integer are suitable.
слабые стороны
- плохо приспособлен для изменения контента, кропы, ресайзы, сдвиги – целая проблема
ссылки
AVISYNTH
описание
AviSynth is a powerful tool for video post-production. It provides ways of editing and processing videos. AviSynth works as a frameserver, providing instant editing without the need for temporary files.
Фактически это целый язык для описания нелинейного видео ряда.
Поддерживает огромное колличестово операций над входным контентом, в том числе:
- Media file filters
- Color conversion and adjustment filters
- Overlay and Mask filters
- Geometric deformation filters
- Pixel restoration filters
- Timeline editing filters
примеры использования
чтение изображений
ImageSource()
# Read files “100.jpeg” through “199.jpeg” into an NTSC clip
ImageSource(“%d.jpeg”, 100, 199, 29.97)
# Note: floating-point fps available in v2.56
# Read files “00.bmp” through “50.bmp” bypassing AviSynth’s internal BMP reader
ImageSource(“%01d.bmp”, end = 50, use_DevIL = true)
# Read a single image, repeat 300 times
ImageSource(“static.png”, end = 300, use_DevIL=true)
# Much, much faster in v2.56
# Read a greyscale (8-bit) jpg:
ImageSource(“GoldPetals-8bit.jpg”, use_DevIL=true)
# Read a greyscale (8-bit) BMP (using AviSynth’s internal BMP reader):
ImageSource(“GoldPetals-8bit.bmp”)
# Read a YV24 BMP (created with ImageWriter):
ImageSource(“GoldPetals-24bit.ebmp”)
сборка слайдшоу
# First set of 26 images
a=ImageReader(“C:\JimiL\001.bmp”).trim(1,120)
b=ImageReader(“C:\JimiL\002.bmp”).trim(1,120)
c=ImageReader(“C:\JimiL\003.bmp”).trim(1,120)
d=ImageReader(“C:\JimiL\004.bmp”).trim(1,120)
e=ImageReader(“C:\JimiL\005.bmp”).trim(1,120)
f=ImageReader(“C:\JimiL\006.bmp”).trim(1,120)
g=ImageReader(“C:\JimiL\007.bmp”).trim(1,120)
h=ImageReader(“C:\JimiL\008.bmp”).trim(1,120)
i=ImageReader(“C:\JimiL\009.bmp”).trim(1,120)
j=ImageReader(“C:\JimiL\010.bmp”).trim(1,120)
k=ImageReader(“C:\JimiL\011.bmp”).trim(1,120)
l=ImageReader(“C:\JimiL\012.bmp”).trim(1,120)
m=ImageReader(“C:\JimiL\013.bmp”).trim(1,120)
n=ImageReader(“C:\JimiL\014.bmp”).trim(1,120)
o=ImageReader(“C:\JimiL\015.bmp”).trim(1,120)
p=ImageReader(“C:\JimiL\016.bmp”).trim(1,120)
q=ImageReader(“C:\JimiL\017.bmp”).trim(1,120)
r=ImageReader(“C:\JimiL\018.bmp”).trim(1,120)
s=ImageReader(“C:\JimiL\019.bmp”).trim(1,120)
t=ImageReader(“C:\JimiL\020.bmp”).trim(1,120)
u=ImageReader(“C:\JimiL\021.bmp”).trim(1,120)
v=ImageReader(“C:\JimiL\022.bmp”).trim(1,120)
w=ImageReader(“C:\JimiL\023.bmp”).trim(1,120)
x=ImageReader(“C:\JimiL\024.bmp”).trim(1,120)
y=ImageReader(“C:\JimiL\025.bmp”).trim(1,120)
z=ImageReader(“C:\JimiL\026.bmp”).trim(1,120)
#Transitions
aa=TransAccord(a,b,60,”hor”)
ba=TransBubbles(b,c,120)
ca=TransCentral(c,d,60)
da=TransCrumple(d,e,120,”fan”)
ea=TransDisco(e,f,60,60)
fa=TransFlipPage(f,g,120)
ga=TransFlipTurn(g,h,60)
ha=TransFunnel(h,i,120,”down”)
ia=TransMarbles(i,j,60)
ja=TransPaint(j,k,120,”bricks”)
ka=TransPeel(k,l,60,”right”,10,shade=-120)
la=TransPush(l,m,120)
ma=TransRipple(m,n,60,32)
na=TransScratch(n,o,120,”fount”)
oa=TransSlantRollIn(o,p,120)
pa=TransSlantRollOut(p,q,60)
qa=TransSlantWipe(q,r,120,”nw”)
ra=TransSlideIn(r,s,60,”center”)
sa=TransSlideOut(s,t,120,”center”)
ta=TransSprite(t,u,60,”down”)
ua=TransSwing(u,v,120,true,4,2)
va=TransSwirl(v,w,60,”anti”,16)
wa=TransTwinDoors(w,x,120)
xa=TransVenetianBlinds(x,y,60,type=”hor”)
ya=TransWeave(y,z,120,”jigsaw”)
za=TransWipe(z,a,60)
#join all the clips
vid=aa+ba+ca+da+ea+fa+ga+ha+ia+ja+ka+la+ma+na+oa+pa+qa+ra+sa+ta+ua+va+wa+xa+ya+za
# change the framerate and resize the clips – for youtube.com
newvid=vid.ChangeFPS(30000.0/1001.0).Spline36Resize(320,240)
# the final step
newvid
недостатки
- пугает своей навороченностью
- последнюю версию тяжело соирать под линукс
(постоянно возникают пролемы с версиями библиотек)
0 Responses to “СБОРКА ВИДЕО НА СТОРОНЕ СЕРВЕРА С ПОМОЩЬЮ FFMPEG & AVISYNTH”