Я с трудом пытаюсь понять, как вырезать файл с помощью 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
. Я делаю это неправильно?
UPD Благодаря 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
. И выводить файл иначе. Может ли кто-нибудь объяснить это?
Я думаю, что первоначальная проблема была с форматированием вашей метки времени.
Формат: ЧЧ: ММ: СС
Я не уверен, что понимаю ваш вопрос о порядке выбора опций. Я не думаю, что это имеет значение, если за -i следует имя входного файла, а -ss ЧЧ: ММ: СС и мой -t ЧЧ: ММ: СС
-ss ЧЧ: ММ: СС начальная точка, и -t ЧЧ: ММ: СС - это продолжительность
, поэтому -ss 00:01:00 -t 00:05:00 начнется с отметки в одну минуту и будет работать в течение 5 минут.
В моей системе, используя ffmpeg, порядок не имеет значения (вы можете указать время или входной файл в любом порядке, если за -ss следует продолжительность (-t))
Попробуйте:
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.
REAL ffmpeg находится не в репозиториях Ubuntu, а в PPA:
ppa: jon-severinsson / ffmpeg
. Дополнительную документацию по ffmpeg можно найти на http://ffmpeg.org
Считайте справочные страницы устаревшими
Проблема возникает из-за различного значения -ss
в зависимости от того, где в командной строке он находится. Это перенесено с тех дней, когда avconv
был еще частью проекта ffmpeg
, и я считаю, что это исправлено в более новых версиях.
В старые времена, если вы сказали что-то вроде
ffmpeg -ss 5 -i input
, то, что вы имели в виду, было «перейти к 5-секундной отметке в файле и начать читать там».
Но если вы сказали
ffmpeg -i input -ss 5
Вы имели в виду «открыть входной файл и пропустить все данные до пятисекундной отметки».
Как вы можете понять, первый подход на самом деле часто терпит неудачу, потому что вы пропускаете файл, не читая его. Он хорошо работает только с файлами, в которых есть временные метки, что позволяет вам прочитать кадр и узнать, зашли ли вы уже слишком далеко или нет.
По сути, в ffmpeg он работал так: «Угадай битрейт по первой секунде, а затем предположи, что все остальные секунды одинаковы». Но, конечно, не все секунды одинаковы, и если мы говорим о 52-часовом «дрейфе», ошибка может быть довольно большой.
Так что, если вы используете раннюю версию avconv после разделения, вы всегда должны ставить -ss
после читаемого файла. Но в более новых версиях (насколько мне известно) эта ошибка была исправлена.