Чи можна використовувати 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

Отже, якому ви віддаєте перевагу; mencoderприклад, вище; або ffmpegприклад нижче?
голоси

Відповіді:


16

Спробуйте:

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

Я думаю, що вхідний параметр повинен бути першим.


Дякуємо за відповідь. Упорядкування параметрів, які я використав вище, дає той самий результат, тому я не думаю, що це порядок. Після відмови від ffmpeg, мій інтервал ключових кадрів викликав проблеми з іншими інструментами. Після перегляду цього питання це був інтервал ключових кадрів. Він був встановлений на 5 секунд раніше, і я з тих пір встановив його на 1 секунду. За 5 секунд і ваша команда, і ті, що я спробував вище, дали початок чорного простору на початку (3 секунди варто, не дивно). За 1 секунду він працює як очікувалося.
marcelebrate

Це працює і для mp3
geotheory

4
Як пояснено у FFmpeg Seeking , використовуючи -ss як вхідний параметр (раніше -i) під час копіювання або навіть перекодування зі старшою версією FFmpeg, використовується пошук ключових кадрів. Це набагато швидше, але жертвує точністю. Якщо ви використовуєте його як вихідний параметр, процес є потенційно набагато повільнішим (вхід декодується кадром за кадром навіть для викинутих деталей), але точним. Хоча питання старе, я думаю, що це має бути прийнятою відповіддю.
Джонатан Ю.

23

Виявляється, ця команда буде обрізати відео, як і очікувалося:

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

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

ОНОВЛЕННЯ: оновлене впорядкування -iта -ssпараметри відповідно до відповіді Дейва, які я прийняв до кредиту.


2
У мене теж було це питання. Цей пост зробив це для мене. Я кусав кулю і перестав намагатися використовувати -vcodec copy -acodec copyдля всіх своїх команд редагування. Повторне кодування заважало чорним кадрам з початку мого відео чи не різати в потрібному місці (різниця секунди без повторного кодування означала майже 5-секундну різницю у відео). Отже, я в кінцевому підсумку замінити -vcodec copyз -vcodec libx264 -crf 0.
Хенді

2
Я щойно стикався з цим самим. Я виявив, що не можу лише -vcodec copyтому, що фрагмент не починається на ключовому кадрі. Я отримував нерухоме зображення або чорне зображення протягом N секунд до наступного ключового кадру. Якщо я фактично перекодую, а не копіюю, це працює як очікувалося. Тож хоч і мій вхід, і вихід є H264, мені все одно потрібно було перекодувати (використовуючи -vcodec libx264замість -vcodec copy).
Карл Вільбур

Відповідь Дейвса є правильною на останній версії ffmpeg. -iПовинен прийти перед -ss.
Арете


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.