martedì 23 maggio 2017

Come convertire un file .wav (o un audio qualsiasi) in un filmato .mp4 o un altro formato video

A cosa serve convertire un audio in un filmato?
Non ho trovato altre motivazioni se non caricare un file audio su YouTube.
Ci sono applicazioni desktop e web che già fanno questa conversione, ma se si deve farlo a riga di comando le API di Windows sono di grande aiuto
Ecco il codice di una applicazione console che usa l'oggetto MediaComposition

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Media.Editing;
using Windows.Media.MediaProperties;
using Windows.Media.Transcoding;
using Windows.Storage;


namespace Audio2Video
{
class Program
{
static private string filePath;

static void Main(string[] args)
{

if (args.Length != 1)
{
Console.WriteLine("Usage: Audio2Video ");
return;
}

filePath = args[0];
if (!File.Exists(filePath))
{
Console.WriteLine("The file {0} doesn't exist", filePath);
return;
}

Audio2Video().GetAwaiter().GetResult();

}

static async Task Audio2Video()
{
MediaComposition composition = new MediaComposition();

StorageFile inputFile = await StorageFile.GetFileFromPathAsync(filePath);
var audioproperties = await inputFile.Properties.GetMusicPropertiesAsync();
string video = Path.ChangeExtension(filePath, ".wmv");
File.Create(video).Dispose();
StorageFile outputFile = await StorageFile.GetFileFromPathAsync(video);

var backgroundTrack = await BackgroundAudioTrack.CreateFromFileAsync(inputFile);
composition.BackgroundAudioTracks.Add(backgroundTrack);

var clip = MediaClip.CreateFromColor(Windows.UI.Color.FromArgb(0,0,0,0), audioproperties.Duration);
composition.Clips.Add(clip);

var profile = MediaEncodingProfile.CreateWmv(VideoEncodingQuality.Qvga);

// Call RenderToFileAsync
var saveOperation = await composition.RenderToFileAsync(outputFile, MediaTrimmingPreference.Fast, profile);

}
}
}