201 votos

Cortar parte del archivo de vídeo desde la posición inicial hasta la posición final con FFmpeg

Tengo un archivo de vídeo de 30 minutos, pero quiero extraer un vídeo de 00:09:23 a 00:25:33.

Puedo definir la posición inicial con -ss pero no pude encontrar uno para la posición final. ¿Alguna ayuda, por favor?

320voto

Charlie Hargood Puntos 26

Instalar ffmpeg

Asegúrese de que descargue una versión reciente de ffmpeg y no utilice el que viene con su distribución (por ejemplo, Ubuntu). Las versiones empaquetadas de varias distribuciones suelen estar desactualizadas y no se comportan como se espera.

O compilarlo usted mismo .

Cómo cortar un vídeo, sin recodificar - método rápido

Utiliza esto para cortar el vídeo de [start] para [duration] :

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v copy -c:a copy out.mp4

Aquí, las opciones significan lo siguiente:

  • -ss especifica la hora de inicio, por ejemplo 00:01:23.000 o 83 (en segundos)
  • -t especifica la duración del clip (mismo formato).
  • Recientes ffmpeg también tiene una flag para suministrar la hora de finalización con -to .
  • -c:v copy y -c:a copy copiar los flujos de bits de vídeo y audio sin recodificarlos. Esto no dañará la calidad y hará que el comando se ejecute en segundos. Puedes sustituir las dos opciones por -c copy si quieres copiar un flujo de vídeo, audio y subtítulos a la salida.

Ten en cuenta que este comando puede no ser preciso en cuanto a los fotogramas al copiar los flujos de bits.

Cómo cortar un vídeo, sin recodificar - método preciso

Si quieres precisión en los fotogramas, utiliza esto en su lugar:

ffmpeg -i in.mp4 -ss [start] -t [duration] -c:v copy -c:a copy out.mp4

Sin embargo, hay un inconveniente. El vídeo tendrá que ser decodificado hasta llegar a la posición implicada por -ss y sólo entonces comienza a copiar el flujo de bits. Esto puede llevar mucho tiempo, especialmente en el caso de vídeos muy largos.

Cómo cortar un vídeo, con recodificación

Si se omite el -c copy opción, ffmpeg recodificará automáticamente el vídeo y el audio de salida según el formato elegido. Para obtener vídeo y audio de alta calidad, lea la Guía de codificación x264 y el Guía de codificación AAC respectivamente.

Por ejemplo:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

Como explica Búsqueda con FFmpeg ): Cuando se utiliza -ss antes de -i en FFmpeg 2.1 y posteriores, la búsqueda es precisa cuando se recodifica el vídeo (es decir, no se utiliza -c copy ). Así que no tienes que preocuparte de poner -ss después de -i para la velocidad.


Conversión de los puntos finales a la duración

Si necesita utilizar una versión antigua de ffmpeg y no puede utilizar el -to se puede crear una lista de edición de puntos de entrada y salida, y convertirlos en puntos de entrada con duración. Para ello puede utilizar este Ruby script que he escrito, que calcula la diferencia:

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

Por ejemplo:

time_diff("00:09:23.000", "00:25:33.000")
=> "00:16:10.000"

44voto

sflee Puntos 101

Creo que ahora puedes utilizar el siguiente comando.

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

También puedes ver ffmpeg Doc

18voto

malat Puntos 136

Es extraño que nadie haya sugerido la trim filtrar .

Deja todo excepto el segundo minuto de entrada:

ffmpeg -i INPUT -vf trim=60:120

Conserva sólo el primer segundo:

ffmpeg -i INPUT -vf trim=duration=1

Deja todo excepto del segundo 13 al segundo 58:

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8voto

Christian Woerz Puntos 5625

Puede utilizar estos dos métodos que funcionan para Windows y Linux.

Hay dos formas de dividir archivos de vídeo con ffmpeg. La primera es buena en sí misma, más que eso - es más rápida, pero a veces crea archivos de salida con ciertos defectos. Así que para esos casos existe la segunda forma de dividir archivos de vídeo: es considerablemente más lento, los archivos de salida son más grandes, pero parece que siempre son del mismo nivel de calidad que los archivos de entrada utilizados.

Camino 1:

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

Camino 2:

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start> - el comienzo de la parte de un vídeo que ffmpeg debe cortar. Formato: 00:00:00.0000 que significa horas:minutos:segundos:milisegundos.

  • <duration> - la duración de la parte de un vídeo que ffmpeg debe cortar. El mismo formato que el anterior.

Ejemplos:

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg corta una parte del archivo de vídeo a partir de 1 hora 19 minutos 0 segundos. La duración de la secuencia de vídeo recortada es de 5 minutos 0 segundos.

-3voto

mbanzon Puntos 117

Utilizo la siguiente sintaxis para cortar vídeo con ffmpef:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-t se utiliza para establecer la duración en segundos - no se puede especificar la hora de finalización, pero esto debería funcionar para usted.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: