Вопрос или проблема
У меня есть команда 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, и корректно настроены пути к исполняемым файлам.