Встановіть ffmpeg
Переконайтеся, що ви завантажити останню версію ffmpeg
і не використовуйте той, який постачається з вашим дистрибутивом (наприклад, Ubuntu). Упаковані версії з різних дистрибутивів часто застаріли і не ведуть себе, як очікувалося.
Or скомпілюйте його самостійно .
Як вирізати відео, без повторного кодування
Використовуйте це, щоб вирізати відео з [start]
для [duration]
:
ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4
Тут параметри означають наступне:
-ss
вказує час початку, наприклад, 00:01:23.000
або 83
(у секундах)
-t
визначає тривалість кліпу (того ж формату).
- Останні
ffmpeg
також має прапор, щоб забезпечити час закінчення з -to
.
-c copy
копіює перший потік бітів відео, аудіо та субтитрів з вхідного файлу у вихідний файл без повторного кодування. Це не завдасть шкоди якості та зробить команду запущеною протягом декількох секунд.
Зверніть увагу, що при старих версіях ffmpeg ця команда може бути неточної при копіюванні бітових потоків.
Як вирізати відео, без повторного кодування - точний метод
Якщо ви маєте стару версію ffmpeg і бажаєте точність кадру, використовуйте цю заміну:
ffmpeg -i in.mp4 -ss [start] -t [duration] -c copy out.mp4
Однак є один недолік. Відео потрібно декодувати, поки не досягне позиції, яку мається на увазі -ss
і тільки після цього починається копіювання потоку бітів. Це може зайняти багато часу, особливо для дуже довгих відео.
Як вирізати відео, з повторним кодуванням
Якщо ви залишите -c copy
опція, ffmpeg
автоматично перекодуватиме вихідне відео та аудіо відповідно до вибраного формату. Для відео та аудіо високої якості читайте Посібник з кодування x264 і Керівництво з кодування AAC відповідно.
Наприклад:
ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4
Як пояснюється Шукаю з FFmpeg ): При використанні -ss
раніше -i
на FFmpeg 2.1 і новіші, пошук є точним для кадру при повторному кодуванні відео (тобто, не використовуючи -c copy
). Таким чином, вам не доведеться турбуватися про те, що ви робите -ss
після -i
для швидкості.
Перетворення кінцевих точок на тривалість
Якщо потрібно використовувати стару версію ffmpeg
і не може використовувати -to
Ви можете створити список редагування точок входу та виходу і перетворити їх у точки з тривалістю. Для цього можна скористатися цей сценарій Ruby Я написав, який розраховує різницю:
require "Time"
def time_diff(time1_str, time2_str)
t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) )
(t - t.gmt_offset).strftime("%H:%M:%S.%L")
end
Наприклад:
time_diff("00:09:23.000", "00:25:33.000")
=> "00:16:10.000"