Можно ли использовать ffmpeg для обрезки X секунд от начала видео с неопределенной длиной?

20

Мне нужно обрезать только первые 1 или 2 секунды из серии записей FLV различной, неопределенной длины. Я нашел много ресурсов для извлечения указанной длительности из видео (например, 30-секундных клипов), но не для продолжения до конца видео.

Обе эти попытки просто дают скопированную версию видео без желаемой обрезки:

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

Вторая мысль была такой: возможно, если бы я указал длину, превышающую то, что было возможно, она бы дошла до конца. Нет кости.

Я знаю, что это не проблема с кодеками или использованием секунд вместо временного кода, так как следующее сработало:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

Есть еще идеи? Я открыт для использования других (основанных на Windows) инструментов командной строки, однако я полностью поддерживаю ffmpeg, так как я уже использую его для создания миниатюр и знаком с ним.

Если это поможет, все мои видео будут меньше 2 минут.

ОБНОВИТЬ:

Я переключился на использование Mencoder ( http://www.mplayerhq.hu/ ), так как похоже, что ffmpeg не добьется этого без некоторого дополнительного взлома.

Синтаксис Mencoder для выполнения того, что я намеревался сделать:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv
marcelebrate
источник
Итак, что вы предпочитаете; mencoderпример, выше; или ffmpegпример ниже?
голоса

Ответы:

16

Пытаться:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Я думаю, что входной параметр должен быть первым.

Дейв
источник
Спасибо за ответ. Порядок параметров, который я использовал выше, дает тот же результат, поэтому я не думаю, что это порядок. После отказа от ffmpeg мой интервал ключевых кадров вызывал проблемы с другими инструментами. После повторного рассмотрения этого сейчас это был интервал ключевых кадров. Он был установлен на 5 секунд раньше, и с тех пор я установил его на 1 секунду. Через 5 секунд и ваша команда, и команда, которую я пробовал выше, в начале дали черное пространство (что неудивительно). На 1 секунду все работает как положено.
отмечаем
Это работает и для mp3
geotheory
4
Как объясняется в FFmpeg Seeking , использование -ss в качестве входного параметра (до -i) при копировании или даже транскодировании с более старой версией FFmpeg использует поиск по ключевому кадру . Это намного быстрее, но жертвует точностью. Если вы используете его в качестве выходного параметра, процесс потенциально намного медленнее (вход декодируется кадр за кадром даже для отброшенных частей), но точен. Хотя вопрос старый, я думаю, что это должен быть принятый ответ.
Джонатан Я.
23

Повороты из этой команды будет обрезать видео с 2 -х секунд на, как и ожидалось:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Проблема была с интервалом ключевого кадра в input.flv. Он был установлен на 5 секунд, что дало 3 секунды черного кадра в начале видео (5 - 2 = 3). С тех пор я изменил свой интервал ключевых кадров на 1 секунду, хотя 2 секунды, вероятно, также дадут желаемые результаты в моем случае.

ОБНОВЛЕНИЕ: Обновлен порядок -iи -ssпараметры для ответа Дэйва, который я принял за кредит.

marcelebrate
источник
2
У меня тоже была эта проблема. Этот пост сделал это для меня. Я укусил пулю и перестал пытаться использовать -vcodec copy -acodec copyвсе мои команды редактирования. Перекодирование предотвратило черные кадры в начале моего видео или не вырезало в нужном месте (разница в секундах без перекодирования переводила почти в 5-секундную разницу в видео). Итак, я закончил замену -vcodec copyна -vcodec libx264 -crf 0.
Хенди
2
Я только что столкнулся с этим же. Я обнаружил, что не могу только -vcodec copyпотому, что фрагмент не начинается на ключевом кадре. Я получал неподвижное изображение или черное изображение в течение N секунд до следующего ключевого кадра. Если я на самом деле перекодирую, а не копирую, это работает как положено. Таким образом, несмотря на то, что мой вход и выход оба H264, мне все еще нужно было перекодировать (используя -vcodec libx264вместо -vcodec copy).
Карл Уилбур
Ответ Daves является правильным на последнюю версию ffmpeg. -iДолжен прийти перед -ss.
Арете
0

Используйте -ss и -to перед -i вот так:

ffmpeg -ss 00:01:10 -to 00:02:10 -i input -c copy output
Бора Савкар
источник
0

Обновляя этот ответ, с 2019 года команда теперь:

ffmpeg -i input.flv -ss 2 -c copy output.flv
Мэтт Забойник
источник