Я хочу объединить два файла m4a , один длиной 20:49, другой длиной 10:23. После этой страницы , первый вариант:

ffmpeg -i 'concat:file1.m4a|file2.m4a' -c copy output.m4a

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

size=   10921kB time=00:20:48.69

и выходной файл 20 минут, как первый файл.

Второй вариант:

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.m4a

где mylist.txt :

file 'file1.m4a'
file 'file2.m4a'

Эта команда использует оба файла, поскольку стандартный вывод показывает:

size=   16339kB time=00:33:56.73

но продолжительность неправильная, как и должно быть 31:42. Кроме того, выходной файл имеет длительность 32:06 при воспроизведении из операционной системы (macOS).

Как я могу заставить FFMPEG объединить два файла с учетом их продолжительности?

1 ответ1

1

Конкатенация файлов иногда не очень интуитивно понятна - это связано с тем, что многие форматы содержат метки времени, которые могут начинаться или не начинаться с нуля, быть непрерывными и т.д., В зависимости от истории создания и редактирования этого файла.

Это одна из причин, почему в правиле форматов вещательного мира это можно просто объединить: MPEGTS (с необходимостью следить за счетчиками непрерывности) или RAW (необработанный PCM или необработанный h.264).

Если перекодировка является опцией, я рекомендую вам конвертировать ваши исходные файлы в формат raw PCM в соответствии с

ffmpeg -i file1.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file1.pcm
ffmpeg -i file2.m4a -c:a pcm_s16le -ac 2 -ar 48000 -f s16le file2.pcm

Это создаст 2 необработанных файла PCM, с 2 каналами (Stereo, -ac 2) каждый и частотой дискретизации 48 кГц (-ar 48000)

Теперь вы можете объединить эти файлы, например, через cat file2.pcm >> file1.pcm - это создаст новое необработанное представление файла без временных отметок, только простые аудиосэмплы .

Чтобы перекодировать результат в AAC, вы идете по линии

ffmpeg -f s16le -ac 2 -ar 48000 -i file1.pcm -c:a aac -b:a 192K -ac 2 output.m4a

Давайте разберем это:

  • Сначала я сообщаю ffmpeg открыть файл формата raw PCM (подписанный 16- битный low-endian -f s16le), содержащий 2 аудиоканала (-ac 2) с частотой дискретизации 48 кГц (-ar 48000) и сохраненный в file1.pcm (как обычно с ffmpeg) важен порядок параметров)
  • затем перекодировать с AAC (-c:a) и пропускной способностью 192 Кбит / с (-ba:a) снова в стерео (-ac 2)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .