вырезание видео с помощью ffmpeg с абсолютной конечной позицией

Я хочу использовать ffmpeg для разделения видео на части. У меня есть две абсолютные "позиции" и не начало и продолжительность. Поэтому я не могу использовать это так:

ffmpeg -ss 00:00:12.12 -t 00:00:14.13 -i foo.mov...

(опять же, время после -t не является продолжительностью) Должен ли я вычислять продолжительность между позициями to или есть способ, которым ffmpeg может сделать это для меня?


person nonsenz    schedule 24.04.2012    source источник
comment
stackoverflow.com/questions/8488238/ хорошее решение с дополнительными вычислениями   -  person nonsenz    schedule 24.04.2012


Ответы (3)


Начиная с FFmpeg 1.2 (выпущенного в марте 2013 г.), параметр -to можно использовать вместо -t, чтобы указать время окончания вместо продолжительности.

person mark4o    schedule 04.02.2015

Используйте этот скрипт Python

#!/bin/python
from sys  import argv
from os   import system

ffm = 'ffmpeg -i "' # input file
aud = '" -acodec libfaac -aq  64 -ac 2 -ar 44100'
vid =  ' -vcodec libx264 -crf 25 -r 25 -subq 9'
c=0
def encode(video,option=''):
   global c;   c+=1
   out = ' "'+ video + str(c) + '.mp4"'
   cmd = ffm + video + aud + vid + option + out
   print cmd;  system(cmd)

def seconds(time):
   t = [float(x)  for x in time.split(':')]
   if len(t)==1:  return t[0]
   if len(t)==2:  return t[1]+t[0]*60
   if len(t)==3:  return t[2]+t[1]*60+t[0]*3600

def split(time):
   (start,end) = [seconds(x) for x in time.split()]
   return ' -ss %s -t %s' % (start,end-start)

for slice in argv[2].split(','):
  encode(argv[1],split(slice))
#  $ python split.py "video.mpg" "1:50 9:10,7:30 15:30,13:30 20:10"

Читая man ffmpeg, я увидел несколько допустимых форматов для -ss и -t.

Это позволит вам нарезать с перекрытием. И может разделяться с точностью до миллисекунд.

$ python split.py "video.mpg" "55:30.356 1:01:10.895"

Вы должны отредактировать acodec и vcodec в соответствии со своими предпочтениями.

Я рекомендую эти варианты с ядром libx264 версии выше 100.

person giancarlo colasante    schedule 03.06.2013

С помощью -ss вы отмечаете свое начало, а с помощью -t конечную продолжительность. Параметр -t указывает разницу между двумя вашими абсолютными позициями, которую вы должны вычислить.

person Álvaro    schedule 25.04.2012