Как вырезать аудиофайл с помощью avconv?

Как вырезать аудиофайл с помощью avconv?

Мне сложно понять, как вырезать файл с помощью avconv. Вот команда, которую я использую:

avconv -ss 52:13:49 -t 01:13:52 -i RR119Accessibility.wav RR119Accessibility-2.wav 

Но это не работает. Я получаю в результате весь файл. Ну, почти весь файл. Каким-то образом в результирующем файле 1:16:31вместо длительности есть 1:17:23. Также я считаю, что я выполнил эту команду всеми возможными способами: с -ssи -tпосле -i, с -tуказанием конечной точки, с файлами mp3, с указанием аудиокодека, с ffmpeg. Я делаю это неправильно?

ОБНОВЛЕНИЕСпасибо, bodhi.zazenэто работает (я исправил смещение и длительность, сообщенные mp3splt-gtk, они были неверны по той или иной причине, а целью было обрезать mp3-файл)

avconv -i RR119Accessibility.mp3 -ss 00:52:08 -t 00:01:08 RR119Accessibility-2.mp3

Но это не так:

avconv -ss 00:52:08 -t 00:01:08 -i RR119Accessibility.mp3 RR119Accessibility-2.mp3

Результирующий файл начинается с 00:52:08 и продолжается до конца исходного файла. Я думал, -ssчто и -tотносятся к входному файлу, если указано до -i. И к выходному файлу в противном случае. Может кто-нибудь объяснить это?

решение1

Я думаю, что изначальная проблема была в форматировании вашей временной метки.

Формат ЧЧ:ММ:СС

Я не уверен, что понимаю ваш вопрос о порядке опций. Я не думаю, что это имеет значение, пока за -i следует имя входного файла, а за -ss HH:MM:SS следует мой -t HH:MM:SS

-ss HH:MM:SS — это начальная точка, а -t HH:MM:SS — это продолжительность.

поэтому -ss 00:01:00 -t 00:05:00 начнется с отметки в одну минуту и ​​будет длиться 5 минут.

В моей системе, использующей ffmpeg, порядок не имеет значения (вы можете указать время или входной файл в любом порядке, главное, чтобы за -ss следовала длительность (-t) )

решение2

Проблема возникает из-за разного значения в -ssзависимости от того, где в командной строке он находится. Это пережиток тех дней, когда avconvон был еще частью ffmpegпроекта, и я считаю, что он будет исправлен в новых версиях.

В старые времена, если бы вы сказали что-то вроде

 ffmpeg -ss 5 -i input

Вы имели в виду «перейти к 5-секундной отметке в файле и начать читать оттуда».

Но если бы вы сказали,

ffmpeg -i input -ss 5

Вы имели в виду «открыть входной файл и пропустить все данные до пятисекундной отметки».

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

По сути, в ffmpeg это работало так: "Угадай битрейт по первой секунде, а затем предположи, что все остальные секунды одинаковы". Но, конечно, не все секунды одинаковы, и если мы говорим о 52 часах "дрейфа", то ошибка может быть довольно большой.

Так что если вы используете раннюю версию avconv post-split, то вы всегда должны ставить -ssпосле файла, который читается. Но в новых версиях (насколько мне известно) эта ошибка была исправлена.

решение3

Пытаться:

avconv -i RR119Accessibility.wav -ss 52:13:49 -t 01:13:52 RR119Accessibility-2.wav

Параметры ffmpeg и avconv чувствительны к положению.

В вашем примере ffmpeg начинает чтение файла и начинает вывод с timestamp -ss
(с чем ffmpeg справляется хорошо на моей системе, а avconv - нет, называйте это своего рода регрессией).

В приведенном мной примере avconv (или ffmpeg, если на то пошло) сначала ищет правильное смещение, а затем начинает считывать и выводить. Это работает для обоих.

Дополнительную документацию по avconv можно найти наhttp://libav.org Эти ребята создали ответвление ffmpeg и также отвечают за чрезвычайно старую версию ffmpeg в Ubuntu.

НАСТОЯЩИЙ ffmpeg находится не в репозиториях Ubuntu, а в PPA:
ppa:jon-severinsson/ffmpeg
Дополнительную документацию о ffmpeg можно найти наhttp://ffmpeg.org

Считайте страницы руководства устаревшими

Связанный контент