Created
April 26, 2015 01:12
-
-
Save Scthe/e86bfcebd4fc8b359ed0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env python | |
| # -*- coding: utf-8 -*- | |
| ''' | |
| ffmpeg docs: | |
| https://ffmpeg.org/ffmpeg.html | |
| -y : yes to all | |
| -i filename (input) | |
| -r | |
| -f fmt (input/output) | |
| -c[:stream_specifier] codec (input/output,per-stream) / -codec[:stream_specifier] codec (input/output,per-stream) | |
| -t duration (input/output) | |
| -s WxH : resize | |
| -ss position (input/output) : seek | |
| other process call: | |
| http://stackoverflow.com/questions/10400556/how-do-i-use-ffmpeg-with-python-by-passing-file-objects-instead-of-locations-to | |
| http://zulko.github.io/blog/2013/09/27/read-and-write-video-frames-in-python-using-ffmpeg/ | |
| TODO crossfade begining/end | |
| need: fps,total_frame_count | |
| ~55 frames | |
| ~24fps | |
| =blend last 0.5 s -> 12 frames | |
| first: | |
| # ffmpeg -y -ss 2 -i eugene.avi -i eugene2.avi -filter_complex "color=white,fade=out:start_time=1:duration=1[alpha];[0:v][alpha]alphamerge[am];[1:v][am]overlay=0:0" -r 20 -pix_fmt rgb8 out_cross.gif | |
| executing: | |
| ffmpeg -y -ss 2 -i eugene.avi -i eugene2.avi -filter_complex "color=white,fade=out:45:15[alpha];[alpha]scale=800:448[alpha1];[0:v][alpha1]alphamerge[am];[1:v][am]overlay=0:0" -r 20 -pix_fmt rgb8 out_cross.avi | |
| ffmpeg -y -i eugene.avi -i SSPP-gif.avi -filter_complex "color=white,fade=out:45:15[alpha];[alpha]scale=800:448[alpha1];[0:v][alpha1]alphamerge[am];[1:v][am]overlay=0:0" -r 20 -pix_fmt rgb8 out_cross.avi | |
| filter_ = ';'.join([ | |
| # 'color=white,fade=out:%d:%d[alpha]' % (len2-SSPPsec,SSPPsec), # (start,duration) | |
| # 'color=white,fade=out:30:10[alpha]', # (start,duration) | |
| 'color=white,fade=out:10:10[alpha]', # (start,duration) | |
| '[alpha]scale=%d:%d[alpha1]' % (w,h), | |
| '[1:v]scale=%d:%d[over]' % (w,h), | |
| '[over][alpha1]alphamerge[am]', | |
| '[0:v][am]overlay=50:0' # 2nd over first | |
| # '[0:v][over]overlay=50:0' | |
| # '[0:v][alpha1]overlay=50:0' | |
| ]) | |
| TODO use ffserver instead of separate service ? (https://ffmpeg.org/ffserver.html) | |
| OR: https://github.com/vbence/stream-m | |
| looping webms: https://support.mozilla.org/en-US/questions/993718 | |
| to gif: | |
| ffmpeg -y -i IN_FILE -r 20 -pix_fmt rgb8 OUT_FILE | |
| f.e. ffmpeg -y -i SSPP-gif.avi -r 20 -s 960x540 -pix_fmt rgb8 out_resized.gif | |
| to webm: | |
| ffmpeg -y -i IN_FILE -c:v libvpx -crf 4 -b:v 2M OUT_FILE | |
| TODO lower bitrate | |
| ffmpeg -f vfwcap -r 16 -i 0 -i http://localhost:8089/ -g 52 -acodec libvorbis -ab 64k -vcodec libvpx -vb 448k -f matroska http://example.com:8080/publish/first?password=secret | |
| ffmpeg -r 16 -i out.webm -g 52 -acodec libvorbis -ab 64k -vcodec libvpx -vb 448k -f matroska http://localhost:8080/publish/first?password=secret | |
| ''' | |
| # https://ffmpeg.org/ffmpeg-filters.html#fade | |
| # https://ffmpeg.org/ffmpeg-filters.html#overlay | |
| from subprocess import call | |
| import os | |
| FFMPEG_DIR = 'C:\\Users\\Marcin\\Desktop\\ffmpeg-20150215-git-2a72b16-win64-static\\bin' | |
| os.chdir(FFMPEG_DIR) | |
| FFMPEG_BIN = 'ffmpeg' | |
| OUT_FILE = 'out_cross.avi' | |
| len1,len2 = 55,20 | |
| # fade_start, fade_len = 50,5 | |
| fade_start, fade_len = 45,10 | |
| w,h = 800,448 | |
| filter_ = ';'.join([ | |
| 'color=white,fade=in:%d:%d[alpha]' % (fade_start, fade_len), # (start,duration) | |
| '[alpha]scale=%d:%d[alpha1]' % (w,h), | |
| '[1:v]scale=w=%d:h=%d:sws_flags=bicubic[over]' % (w,h), | |
| '[over][alpha1]alphamerge[am]', # TODO apply to repeated first frame | |
| '[0:v][am]overlay=x=0:y=0:repeatlast=0' # 2nd over first | |
| # '[0:v][over]overlay=50:0' | |
| # '[0:v][alpha1]overlay=50:0' | |
| ]) | |
| cmd = [FFMPEG_BIN, | |
| '-y', # allow override | |
| '-i', 'eugene.avi', | |
| # '-i', 'eugene.avi', | |
| '-loop', '1','-i', 'img.jpg', | |
| # '-i', 'SSPP-gif.avi', | |
| '-filter_complex', '"'+filter_+'"', | |
| #'-r', '20', # frames per second | |
| '-preset', 'slow', | |
| '-pix_fmt', 'rgb8', | |
| '-b:v', '2M', | |
| OUT_FILE | |
| ] | |
| cmd = ' '.join(cmd) | |
| print( cmd) | |
| print('*'*15) | |
| call(cmd, shell=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment