60 lines
2.0 KiB
Python
Executable File
60 lines
2.0 KiB
Python
Executable File
#! /usr/bin/python
|
|
|
|
import subprocess, argparse
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Call ffmpeg for converting small video files to mp4 or webp')
|
|
parser.add_argument('input', help='input file or url')
|
|
parser.add_argument('output', help='output filename')
|
|
parser.add_argument('-s', '--start', help='start time, if not 00:00')
|
|
parser.add_argument('-t', '--to', help='end time, if not end of file')
|
|
parser.add_argument('-q', '--quality', help='quality of output, as a percentage')
|
|
parser.add_argument('-S', '--silent', action='store_true', help='no audio')
|
|
parser.add_argument('-c', '--crop', help='Crop')
|
|
args = parser.parse_args()
|
|
f_args = []
|
|
|
|
if "https" in args.input:
|
|
# get direct urls from youtube-dl
|
|
urls = subprocess.run(["yt-dlp", "--get-url", args.input], capture_output=True, encoding='utf-8')
|
|
for url in urls.stdout.split('\n'):
|
|
if len(url) > 10:
|
|
f_args += ["-i", url]
|
|
else:
|
|
# local file, or single local http stream
|
|
f_args += ["-i", args.input]
|
|
|
|
vfilter = "scale=-2:'min(720,ih)'"
|
|
if args.crop:
|
|
vfilter += f",crop={args.crop}"
|
|
f_args += ["-vf", vfilter]
|
|
|
|
if args.start:
|
|
f_args += ["-ss", args.start]
|
|
if args.to:
|
|
f_args += ["-to", args.to]
|
|
if args.silent:
|
|
f_args += ["-an"]
|
|
f_args += ["-sn"]
|
|
f_args += ["-dn"]
|
|
f_args += ["-map_metadata:c", "-1"]
|
|
|
|
if ".webp" in args.output:
|
|
f_args += ["-vcodec", "libwebp"]
|
|
f_args += ["-preset", "default"]
|
|
f_args += ["-loop", "0", "-an", "-vsync", "0"]
|
|
f_args += ["-qscale", args.quality if args.quality else "70"]
|
|
else:
|
|
f_args += ["-c:v", "libx264"]
|
|
f_args += ["-preset", "veryfast"]
|
|
f_args += ["-crf", "26"]
|
|
f_args += ["-c:a", "aac"]
|
|
f_args += ["-b:a", "128k"]
|
|
f_args += ["-pix_fmt", "yuv420p"]
|
|
print(f_args)
|
|
|
|
subprocess.run(["ffmpeg", "-y"] + f_args + [args.output if args.output else "output.mp4"])
|
|
|
|
if __name__ == "__main__":
|
|
main()
|