FFmpeg Allocator

using System;
using System.IO;
using System.Diagnostics;
using System.Collections.Generic;
using System.Threading;

namespace FFmpegAllocator
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 2)
            {
                var donePath = Path.Combine(args[1], "done");
                var rawPath = Path.Combine(args[1], "raw");
                if (!Directory.Exists(donePath)) Directory.CreateDirectory(donePath);
                if (!Directory.Exists(rawPath)) Directory.CreateDirectory(rawPath);
                foreach (var x in Directory.EnumerateFiles(args[1]))
                {
                    var filename = Path.GetFileName(x);
                    var newFilename = Path.Combine(donePath, filename);
                    var cmd = File.ReadAllText(args[0]).Replace("$$input$$", x).Replace("$$output$$", newFilename);
                    Console.WriteLine($"[*] {x} => {newFilename}\n\tffmpeg {cmd}");
                    var ffmpeg = new Process
                    {
                        StartInfo = new ProcessStartInfo("ffmpeg.exe", cmd)
                        {
                            UseShellExecute = true,
                            CreateNoWindow = false
                        }
                    };
                    ffmpeg.Start();
                    ffmpeg.WaitForExit();
                    ffmpeg.Close();
                    File.Move(x, Path.Combine(rawPath, filename));
                }
            }
            if (args.Length == 3)
            {
                var donePath = Path.Combine(args[2], "done");
                var rawPath = Path.Combine(args[2], "raw");
                if (!Directory.Exists(donePath)) Directory.CreateDirectory(donePath);
                if (!Directory.Exists(rawPath)) Directory.CreateDirectory(rawPath);
                var count = int.Parse(args[1]);
                var threads = new List<Thread>();
                var lck = new Semaphore(count, count);
                foreach (var x in Directory.EnumerateFiles(args[2]))
                {
                    threads.Add(new Thread(() => 
                    {
                        lck.WaitOne();
                        var newFilename = Path.Combine(donePath, Path.GetFileName(x));
                        var cmd = File.ReadAllText(args[0]).Replace("$$input$$", x).Replace("$$output$$", newFilename);
                        Console.WriteLine($"[*] {x} => {newFilename}\n\tffmpeg {cmd}");
                        var ffmpeg = new Process
                        {
                            StartInfo = new ProcessStartInfo("ffmpeg.exe", cmd)
                            {
                                UseShellExecute = true,
                                CreateNoWindow = false
                            }
                        };
                        ffmpeg.Start();
                        ffmpeg.WaitForExit();
                        ffmpeg.Close();
                        File.Move(x, Path.Combine(rawPath, Path.GetFileName(x)));
                        lck.Release();
                    }));
                }
                foreach (var t in threads) t.Start();
                foreach (var t in threads) t.Join();
            }
            else
            {
                Console.Error.WriteLine("ConfigPath (Semaphore) DirectoryPath");
                Environment.Exit(1);
            }
        }
    }
}

anima,avc,yuv420p10le,ultrafast,qp0,upto60fps

-i "$$input$$" -c copy -c:v libx264 -filter:v "minterpolate='fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:me=epzs:vsbmc=1:scd=fdiff'" -preset ultrafast -qp 0 -pix_fmt yuv420p10le "$$output$$"

anima,avc,yuv420p10le,压制,colorspace=bt709

-i "$$input$$" -c copy -c:v libx264 -preset veryslow -crf 16.5 -pix_fmt yuv420p10le -colorspace 1 -x264-params "mbtree=1:aq-mode=3:psy-rd='0.6:0.15':aq-strength=0.8:rc-lookahead=180:qcomp=0.75:deblock='-1:-1':keyint=600:min-keyint=1:bframes=8:ref=13:me=tesa:no-fast-pskip=1" "$$output$$"

anima,avc,yuv420p10le,压制

-i "$$input$$" -c copy -c:v libx264 -preset veryslow -crf 16 -pix_fmt yuv420p10le -x264-params "mbtree=1:aq-mode=3:psy-rd='0.6:0.15':aq-strength=0.8:rc-lookahead=180:qcomp=0.75:deblock='-1:-1':keyint=600:min-keyint=1:bframes=8:ref=13:me=tesa:no-fast-pskip=1" "$$output$$"

generic,avc,yuv420p10le,crf15,veryslow,smpte170m

-i "$$input$$" -c copy -c:v libx264 -preset veryslow -crf 15 -pix_fmt yuv420p10le -colorspace 6 -color_trc 6 -color_primaries 6 "$$output$$"

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注