savsanta icon

encode.py

savsanta | PRO | 10/14/18 01:12:00 PM UTC | 0 ⭐ | 902 👁️ | Never ⏰ | []
Python |

2.53 KB

|

None

|

0 👍

/

0 👎

"""
This python script encodes all files that have the extension mkv in the current
working directory.
 
Sources:
    http://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide
"""
import subprocess, os
 
#-------------------------------------------------------------------------------
# CONFIGURABLE SETTINGS
#-------------------------------------------------------------------------------
 
# controls the quality of the encode
CRF_VALUE = '25'
 
# h.264 profile
PROFILE = 'high'
 
# encoding speed:compression ratio
PRESET = 'slow'
 
# path to ffmpeg bin
FFMPEG_PATH = '/usr/bin/ffmpeg'
 
# font dir
FONT_DIR = '/var/www/.fonts'
 
#-------------------------------------------------------------------------------
# encoding script
#-------------------------------------------------------------------------------
 
def process():
    cwd = os.getcwd()
 
    # get a list of files that have the extension mkv
    filelist = filter(lambda f: f.split('.')[-1] == 'mp4', os.listdir(cwd))
    filelist = sorted(filelist)
 
    # encode each file
    for file in filelist:
        encode(file)
 
 
def encode(file):
    name = ''.join(file.split('.')[:-1])
    #subtitles = 'temp.ass'.format(name)
    output = '{}.mp4'.format(name)
 
    try:
        command = [
            FFMPEG_PATH, '-i', file,
            '-c:v', 'libx264', '-preset', PRESET, '-profile:v', PROFILE, '-crf', CRF_VALUE,
        ]
 
        # create a folder called attachments and symlink it to FONT_DIR
        # extract attachments
        subprocess.call(['mkdir', 'attachments'])
        subprocess.call(['rm', '-f', FONT_DIR])
        subprocess.call(['ln', '-s', '{}/attachments'.format(os.getcwd()), FONT_DIR])
 
        os.chdir('attachments')
 
        subprocess.call([FFMPEG_PATH, '-dump_attachment:t', '', '-i', '../{}'.format(file)])
 
        os.chdir('..')
 
        # extract ass subtitles and and subtitle into command
#        subprocess.call([FFMPEG_PATH, '-i', file, subtitles])
#        if os.path.getsize(subtitles) > 0:
#            command += ['-vf', 'ass={}'.format(subtitles)]
 
        output = "/home/ubuntu/fin2/" + output
 
        command += ['-c:a', 'copy']             # if audio is using AAC copy it - else encode it
        command += ['-threads', '8', output]    # add threads and output
        subprocess.call(command)                # encode the video!
 
    finally:
        # always cleanup even if there are errors
        subprocess.call(['rm', '-fr', 'attachments'])
        subprocess.call(['rm', '-f', FONT_DIR])
#        subprocess.call(['rm', '-f', subtitles])
 
 
if __name__ == "__main__":
    process()

Comments