Recherche avancée

Médias (3)

Mot : - Tags -/spip

Autres articles (91)

Sur d’autres sites (16689)

  • Use C# to converting apng to webm with ffmpeg from pipe input and output

    30 novembre 2022, par martin wang

    I was using ffmpeg to convert Line sticker from apng file to webm file.
And the result is weird, some of them was converted successed and some of them failed.
not sure what happend with these failed convert.

    


    Here is my c# code to convert Line sticker to webm,
and I use CliWrap to run ffmpeg command line.

    


    async Task Main()
{

    var downloadUrl = @"http://dl.stickershop.LINE.naver.jp/products/0/0/1/23303/iphone/stickerpack@2x.zip";
    var arg = @$"-i pipe:.png -vf scale=512:512:force_original_aspect_ratio=decrease:flags=lanczos -pix_fmt yuva420p -c:v libvpx-vp9 -cpu-used 5 -minrate 50k -b:v 350k -maxrate 450k -to 00:00:02.900 -an -y -f webm pipe:1";

    var errorCount = 0;
    try
    {
        using (var hc = new HttpClient())
        {
            var imgsZip = await hc.GetStreamAsync(downloadUrl);

            using (ZipArchive zipFile = new ZipArchive(imgsZip))
            {
                var files = zipFile.Entries.Where(entry => Regex.IsMatch(entry.FullName, @"animation@2x\/\d+\@2x.png"));
                foreach (var entry in files)
                {
                    try
                    {
                        using (var fileStream = File.Create(Path.Combine("D:", "Projects", "ffmpeg", "Temp", $"{Path.GetFileNameWithoutExtension(entry.Name)}.webm")))
                        using (var pngFileStream = File.Create(Path.Combine("D:", "Projects", "ffmpeg", "Temp", $"{entry.Name}")))
                        using (var entryStream = entry.Open())
                        using (MemoryStream ms = new MemoryStream())
                        {
                            entry.Open().CopyTo(pngFileStream);

                            var result = await Cli.Wrap("ffmpeg")
                                         .WithArguments(arg)
                                         .WithStandardInputPipe(PipeSource.FromStream(entryStream))
                                         .WithStandardOutputPipe(PipeTarget.ToStream(ms))
                                         .WithStandardErrorPipe(PipeTarget.ToFile(Path.Combine("D:", "Projects", "ffmpeg", "Temp", $"{Path.GetFileNameWithoutExtension(entry.Name)}Info.txt")))
                                         .WithValidation(CommandResultValidation.ZeroExitCode)
                                         .ExecuteAsync();
                            ms.Seek(0, SeekOrigin.Begin);
                            ms.WriteTo(fileStream);
                        }
                    }
                    catch (Exception ex)
                    {
                        entry.FullName.Dump();
                        ex.Dump();
                        errorCount++;
                    }
                }
            }

        }
    }
    catch (Exception ex)
    {
        ex.Dump();
    }
    $"Error Count:{errorCount.Dump()}".Dump();

}


    


    This is the failed convert file's error information from ffmpeg :

    


    enter image description here

    


    And the successed convert file from ffmpeg infromation :
enter image description here

    


    It's strange when I was manually converted these failed convert file from command line, and it will be converted successed.
enter image description here

    


    The question is the resource of images are all the same apng file,
so I just can't understan why some of files will convert failed from my c# code
but also when I manually use command line will be converted successed ?

    



    


    I have written same exampe from C# to Python...
and here is python code :

    


    from io import BytesIO
import os
import re
import subprocess
import zipfile

import requests


downloadUrl = "http://dl.stickershop.LINE.naver.jp/products/0/0/1/23303/iphone/stickerpack@2x.zip"
args = [
    'ffmpeg',
    '-i', 'pipe:',
    '-vf', 'scale=512:512:force_original_aspect_ratio=decrease:flags=lanczos',
    '-pix_fmt', 'yuva420p',
    '-c:v', 'libvpx-vp9',
    '-cpu-used', '5',
    '-minrate', '50k',
    '-b:v', '350k',
    '-maxrate', '450k', '-to', '00:00:02.900', '-an', '-y', '-f', 'webm', 'pipe:1'
]


imgsZip = requests.get(downloadUrl)
with zipfile.ZipFile(BytesIO(imgsZip.content)) as archive:
    files = [file for file in archive.infolist() if re.match(
        "animation@2x\/\d+\@2x.png", file.filename)]
    for entry in files:
        fileName = entry.filename.replace(
            "animation@2x/", "").replace(".png", "")
        rootPath = 'D:\\' + os.path.join("Projects", "ffmpeg", "Temp")
        # original file
        apngFile = os.path.join(rootPath, fileName+'.png')
        # output file
        webmFile = os.path.join(rootPath, fileName+'.webm')
        # output info
        infoFile = os.path.join(rootPath, fileName+'info.txt')

        with archive.open(entry) as file, open(apngFile, 'wb') as output_apng, open(webmFile, 'wb') as output_webm, open(infoFile, 'wb') as output_info:
            p = subprocess.Popen(args, stdin=subprocess.PIPE,
                                 stdout=subprocess.PIPE, stderr=output_info)
            outputBytes = p.communicate(input=file.read())[0]

            output_webm.write(outputBytes)
            file.seek(0)
            output_apng.write(file.read())



    


    And you can try it,the result will be the as same as C#.

    


  • How to list all audio devices that are enabled and present for recording the output audio of the pc ?

    23 juin 2023, par Daniel Lip

    I want to record with ffmpeg later the entire desktop including audio.
I want to make that it will find for me automatic the recording audio device.

    


    I'm using MMDeviceEnumerator.

    


    all the other ways I tried returned empty list returned 0 audio devices. I tried with naudio and ffmpeg

    


    public Form1()
        {
            InitializeComponent();

            InitializeRecordingIndicator();

            MMDeviceEnumerator enumerator = new MMDeviceEnumerator();
            foreach (MMDevice device in enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.All))
            {
                StreamWriter w = new StreamWriter(@"d:\audiodev.txt", true);
                cmbAudioDevices.Items.Add(device.FriendlyName);
                w.WriteLine(device.FriendlyName + " " + device.State);
                w.Close();
            }
        }


    


    This is the list of all my audio deviceso n my system.
but they are all not present or disabled. and i have audio on my pc i can hear games videos anything.

    


    so what would i select from this list as audio device for recording the pc output audio ?
or maybe i need to find another way to find the right audio device ?

    


    Front Green In (Realtek(R) Audio) NotPresent
Rear (Realtek(R) Audio) NotPresent
Center (Realtek(R) Audio) NotPresent
Microphone (Realtek(R) Audio) NotPresent
Rear Grey In (Realtek(R) Audio) NotPresent
Side (Realtek(R) Audio) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Rear Pink In (Realtek(R) Audio) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Front (Realtek(R) Audio) NotPresent
Rear Orange In (Realtek(R) Audio) NotPresent
Line In (Realtek(R) Audio) NotPresent
Front Pink In (Realtek(R) Audio) NotPresent
Line In (Realtek(R) Audio) Unplugged
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Microphone (Realtek(R) Audio) Unplugged
Subwoofer (Realtek(R) Audio) NotPresent
Rear Black In (Realtek(R) Audio) NotPresent
Stereo Mix (Realtek(R) Audio) Disabled
Rear Green In (Realtek(R) Audio) NotPresent
Microphone (Realtek(R) Audio) NotPresent
Rear Blue In (Realtek(R) Audio) NotPresent
Front Green In (Realtek(R) Audio) NotPresent
Rear (Realtek(R) Audio) NotPresent
Center (Realtek(R) Audio) NotPresent
Microphone (Realtek(R) Audio) NotPresent
Rear Grey In (Realtek(R) Audio) NotPresent
Side (Realtek(R) Audio) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Rear Pink In (Realtek(R) Audio) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Front (Realtek(R) Audio) NotPresent
Rear Orange In (Realtek(R) Audio) NotPresent
Line In (Realtek(R) Audio) NotPresent
Front Pink In (Realtek(R) Audio) NotPresent
Line In (Realtek(R) Audio) Unplugged
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Microphone (Realtek(R) Audio) Unplugged
Subwoofer (Realtek(R) Audio) NotPresent
Rear Black In (Realtek(R) Audio) NotPresent
Stereo Mix (Realtek(R) Audio) Disabled
Rear Green In (Realtek(R) Audio) NotPresent
Microphone (Realtek(R) Audio) NotPresent
Rear Blue In (Realtek(R) Audio) NotPresent
Front Green In (Realtek(R) Audio) NotPresent
Rear (Realtek(R) Audio) NotPresent
Center (Realtek(R) Audio) NotPresent
Microphone (Realtek(R) Audio) NotPresent
Rear Grey In (Realtek(R) Audio) NotPresent
Side (Realtek(R) Audio) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Rear Pink In (Realtek(R) Audio) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (NVIDIA High Definition Audio) NotPresent
Front (Realtek(R) Audio) NotPresent
Rear Orange In (Realtek(R) Audio) NotPresent
Line In (Realtek(R) Audio) NotPresent
Front Pink In (Realtek(R) Audio) NotPresent
Line In (Realtek(R) Audio) Unplugged
Internal AUX Jack (High Definition Audio Device) NotPresent
Internal AUX Jack (High Definition Audio Device) NotPresent
Microphone (Realtek(R) Audio) Unplugged
Subwoofer (Realtek(R) Audio) NotPresent
Rear Black In (Realtek(R) Audio) NotPresent
Stereo Mix (Realtek(R) Audio) Disabled
Rear Green In (Realtek(R) Audio) NotPresent
Microphone (Realtek(R) Audio) NotPresent
Rear Blue In (Realtek(R) Audio) NotPresent


    


    this is how i tried with naudio but it didn't working it didn't find anything. :

    


    using NAudio.Wave;
...

// Enumerate and list audio input devices
var devices = WaveInEvent.DeviceCount;
for (int deviceId = 0; deviceId < devices; deviceId++)
{
    var deviceInfo = WaveInEvent.GetCapabilities(deviceId);
    Console.WriteLine($"Device ID: {deviceId}, Name: {deviceInfo.ProductName}");
}


    


    before that i tried with ffmpeg but also it didn't return anything :

    


    public static class FFmpegHelper
    {
        public static string[] GetAudioCaptureDevices()
        {
            string ffmpegPath = @"C:\path\to\ffmpeg.exe";
            Process process = new Process();
            process.StartInfo.FileName = ffmpegPath;
            process.StartInfo.Arguments = "-list_devices true -f dshow -i dummy";
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.CreateNoWindow = true;
            process.Start();
            process.WaitForExit();

            string output = process.StandardError.ReadToEnd();
            string[] lines = output.Split('\n');
            var devices = lines.Where(line => line.Contains("audio")).Select(line => line.Trim()).ToArray();
            return devices;
        }
    }


    


    using it :

    


    var audioDevices = FFmpegHelper.GetAudioCaptureDevices();


    


  • Better vertical stabilization when simultaneously cropping to widescreen format

    21 juillet 2016, par Kelley van Evert

    First of all : forgive me for maybe asking a stupid or somewhat uninformed question. I’m totally new to post processing video, stabilization, etc..

    I’m shooting 1920x1080 compressed movie files with my Canon 5D2, and afterwards crop then to cinematic 1920x800 (2.4:1). (With Magic Lantern I use an overlay bitmap when shooting. And yes, I know that with magic lantern I can shoot RAW, but my cards as well as computer are not fast enough to deal with that much data.)

    Before doing any production, I convert the big .MOV files to smaller ones, simultaneously stabilizing the video a bit, and cropping it to 1920x800. I do this with ffmpeg roughly as follows :

    ffmpeg -i f.MOV -vf vidstabdetect -f null -
    ffmpeg -i f.MOV -c:v libx264 -profile:v high -crf 18 -vf "vidstabtransform, crop=in_w:in_h-280" -c:a aac -strict experimental f2.mp4

    However, the fact that a great deal of the vertical resolution is being cropped is not being used to be able to handle the stabilizing transforms better. Often, the image is stretched/skewed vertically, when this is not really needed given the crop used.

    Is it possible in any way to use the crop befenificially in the stabilizing transforms ?

    An example is the frame below. Here, I would rather have that the image is not stretched vertically at all, and just get away with a slight static zoom (crop), because the horizontal black border is the only problem in this frame.

    enter image description here