Обрезать аудиофайл, используя время начала и окончания

Вопрос или проблема

У меня есть команда FFmpeg для обрезки аудио:

ffmpeg -ss 01:43:46 -t 00:00:44.30 -i input.mp3 output.mp3

Проблема заключается в том, что опция -t требует продолжительности (в секундах) от 01:43:46. Я хочу обрезать аудио, используя начальные и конечные временные отметки, например, между 01:43:46 и 00:01:45.02.

Это возможно?

Похоже, что в FFmpeg появилась новая опция -to в документации:

-to позиция (вход/выход)
Остановить запись вывода или чтение входа в позиции. позиция
должна быть спецификацией продолжительности времени, см (ffmpeg-utils)раздел о продолжительности времени в руководстве ffmpeg-utils(1).

-to и -t не могут использоваться одновременно, и -t имеет приоритет.

Пример команды с двумя форматами времени

ffmpeg -i file.mkv -ss 20 -to 40 -c copy file-2.mkv
ffmpeg -i file.mkv -ss 00:00:20 -to 00:00:40 -c copy file-2.mkv

Это должно создать копию (file-2.mkv) файла file.mkv с 20-й секунды до 40-й секунды.

ffmpeg -ss 00:01:43.46 -to 00:01:45.02 -i input.mp3 output.mp3

должно предоставить желаемый результат.

Если у вас установлен PHP, сделайте это скриптом:

Содержимое TimeDiff.php:

<?php
// Создание объектов даты и времени
$dt1 = new DateTime($argv[1]);
$dt2 = new DateTime($argv[2]);

// Преобразование разности в секунды
$dt3 = $dt2->format('U') - $dt1->format('U');

// echo $dt3."\n";
$h = (int)($dt3 / 3600);
$dt3 %= 3600;
$m = (int)($dt3 / 60);
$dt3 %= 60;
$s = $dt3;

// Вывод в формате Ч:М:С
echo $h . ":" . $m . ":" . $s;

?>

Содержимое audiochop.sh:

#!/bin/bash
INFILE=$1
START=$2
STOP=$3
OUTFILE=$4

OFFSET=`php TimeDiff.php "$START" "$STOP"`

echo "Разделение $INFILE начиная с $START до $STOP (длительность $OFFSET)"
ffmpeg -ss "$START" -t "$OFFSET" -i "$INFILE" "$OUTFILE"

Использование:

./audiochop.sh [input.mp3] [startchop] [stopchop] [output.mp3]

Где [startchop] и [stopchop] — это абсолютные временные метки с начала трека.

Примечание: Скрипты могут потребовать настройки в зависимости от версии платформы и т.д…

Ответ или решение

Для обрезки аудиофайлов с использованием начальных и конечных временных меток с помощью FFmpeg, можно воспользоваться новой опцией -to, которая позволяет указывать конечную позицию для обрезки. Ваша команда обрезки, которая использует опцию -t, требует указания продолжительности от начального времени, что может быть неудобно, если у вас есть конкретные начальные и конечные временные метки.

Использование FFmpeg для обрезки аудио

Для вашего случая, когда вы хотите обрезать аудиофайл от времени 01:43:46 до 01:45:02, корректная команда будет выглядеть следующим образом:

ffmpeg -ss 01:43:46 -to 01:45:02 -i input.mp3 output.mp3

Параметры команды:

  • -ss: Указывает начальную позицию обрезки. FFmpeg будет начинать обрезку аудиофайла с этой метки времени.
  • -to: Указывает конечную позицию обрезки. FFmpeg завершит процесс обрезки на этой метке времени.
  • -i: Определяет исходный файл, который вы хотите обрезать.
  • output.mp3: Это имя конечного файла, куда будет сохранен результат обрезки.

Дополнительный скрипт для автоматизации процесса

Если вы хотите автоматизировать процесс обрезки аудиофайлов, вы можете использовать небольшой скрипт на PHP и Bash. Вот пример того, как это сделать:

Скрипт на PHP для вычисления продолжительности (TimeDiff.php):

<?php
// Создание объектов DateTime
$dt1 = new DateTime($argv[1]);
$dt2 = new DateTime($argv[2]);

// Преобразование разницы во времени в секунды
$dt3 = $dt2->format('U') - $dt1->format('U');

$h = (int)($dt3 / 3600);
$dt3 %= 3600;
$m = (int)($dt3 / 60);
$dt3 %= 60;
$s = $dt3;

// Вывод в формате H:M:S
echo $h . ":" . $m . ":" . $s;
?>

Скрипт на Bash для обрезки аудио (audiochop.sh):

#!/bin/bash
INFILE=$1
START=$2
STOP=$3
OUTFILE=$4

OFFSET=`php TimeDiff.php "$START" "$STOP"`

echo "Обрезка $INFILE с $START по $STOP (длительность $OFFSET)"
ffmpeg -ss "$START" -t "$OFFSET" -i "$INFILE" "$OUTFILE"

Использование скрипта

Чтобы использовать скрипт, выполните следующую команду в терминале:

./audiochop.sh [input.mp3] [startchop] [stopchop] [output.mp3]

Здесь [startchop] и [stopchop] — это абсолютные временные метки от начала трека, которые вы хотите использовать для обрезки.

Заключение

Использование FFmpeg с параметрами -ss и -to предоставляет гибкий и эффективный способ обрезки аудиофайлов. Скрипт на PHP и Bash поможет вам автоматизировать процесс и уменьшить количество ручных операций, что особенно полезно при обработке множества файлов. Убедитесь, что у вас установлены соответствующие версии PHP и FFmpeg, и корректно настроены пути к исполняемым файлам.

Оцените материал
Добавить комментарий

Капча загружается...