Я хотел бы иметь возможность разделить мой аудио (mp3 или эквивалент.) или видеофайл на основе нескольких временных метров. Точно так же для тех, кто использовал любое программное обеспечение для редактирования, вы можете обрезать файл на основе выбора времени начала и времени.
[HttpPost]
public async Task ProcessFullAudio([FromBody] ProcessFullAudioRequest processFullAudioRequest)
{
if (processFullAudioRequest == null || processFullAudioRequest.StartEndTimes == null || processFullAudioRequest.StartEndTimes.Length == 0)
{
throw new ArgumentException("Invalid request: StartEndTimes cannot be null or empty.");
}
var timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
var fileName = $"{Guid.NewGuid()}_{timestamp}.mp3";
var outputFilePath = Path.Combine(customFolder, fileName);
int amntOfTimeStamps = processFullAudioRequest.StartEndTimes.Length;
int step = 0;
string lineOfCodeForFirstTime = " \"aselect='not(between(t,,)";
string lineOfCodeForRestOfTimes = "+between(t,,)";
string argument = "";
string result = null;
string filterComplex = GenerateAtrims(processFullAudioRequest.StartEndTimes);
while (step != amntOfTimeStamps)
{
step++;
if (step == 1)
{
result = ReplacePlaceholders(lineOfCodeForFirstTime, HhMmSsToSeconds(processFullAudioRequest.StartEndTimes[step - 1].Start).ToString() , HhMmSsToSeconds(processFullAudioRequest.StartEndTimes[step - 1].End).ToString());
argument += result;
}
else
{
result = ReplacePlaceholders(lineOfCodeForRestOfTimes, HhMmSsToSeconds(processFullAudioRequest.StartEndTimes[step - 1].Start).ToString() , HhMmSsToSeconds(processFullAudioRequest.StartEndTimes[step - 1].End).ToString());
argument += result;
}
}
var FFMPEG_PATH = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "ffmpeg.exe");
if (!System.IO.File.Exists(FFMPEG_PATH))
{
return "ffmpeg.exe IS NULL";
}
var arguments = $"-i {processFullAudioRequest.InputFilePath} -af {argument})' ,asetpts=N/SR/TB\" -acodec libmp3lame {outputFilePath}";
await ProcessAsyncHelper.ExecuteShellCommand(FFMPEG_PATH, arguments, Timeout.Infinite);
return outputFilePath;
}
< /code>
Код, я надеюсь, является самостоятельным объяснительным.
переменной < /strong> должна понравиться что -то подобное: < /p>
-i C:\Users\User\Desktop\AudioEditorBackEnmd\AudioEditorAPI\wwwroot\mp3\TestAudio_123.mp3 -af "aselect='not(between(t,120,240))' ,asetpts=N/SR/TB" -acodec libmp3lame C:\Users\User\Desktop\AudioEditorBackEnmd\AudioEditorAPI\wwwroot\mp3\aa887f21-0a90-4ec5-80ba-2b265cb445b4_20250219_123804.mp3
< /code>
После возвращения выходного пути для недавно обработанного отредактированного звука я передаю его в свою функцию загрузки: < /p>
[HttpGet]
public async Task DownloadProcessedFile([FromQuery] string fileName)
{
if (string.IsNullOrWhiteSpace(fileName))
{
return BadRequest("File name is required.");
}
var filePath = Path.Combine(customFolder, fileName);
if (!System.IO.File.Exists(filePath))
{
return NotFound(new { fileName });
}
try
{
var fileBytes = await System.IO.File.ReadAllBytesAsync(filePath);
return File(fileBytes, "audio/mpeg", fileName);
}
catch (Exception ex)
{
throw;
}
}
< /code>
Все работает, в том смысле, что я могу получить обработанный файл, который короче исходного звука. Однако проблема заключается в том, что временные метки не сняты. Звук, который я передаю, - 01:06:53, однако обработанная аудио возвращает мне 1:05:22, что не исключено, поскольку я должен получить 01:04:53. < /P>
Надоедливая вещь в том, что я получал желаемый выход в один момент. Я не уверен, какие изменения заставили временные метки отключиться. Единственные изменения, которые я сделал, - это изменение местоположения файлов в мою папку wwwroot. Я всегда получаю 1:05:22. Из команд, которые я устал: < /p>
var arguments = $"-i {processFullAudioRequest.InputFilePath} -af {argument})' , asetpts=N/SR/TB\" -c:a libmp3lame -q:a 2 {outputFilePath}";
< /code>
Я попробовал еще много, но я просто не могу вспомнить. И теперь я чувствую, что достиг твердой стены, придумывая решение для этого. Я пытался дать как можно больше деталей, но, если что -нибудь останется, дайте мне знать.
Подробнее здесь: https://stackoverflow.com/questions/794 ... sing-ffmpe
Как разделить аудио / видеофайл на основе нескольких временных метров с помощью FFMPEG (предпочтительно) ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как удалить конкретный сегмент из аудиофайла с использованием временных метров? [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-