Corte parte del archivo de video desde la posición inicial a la posición final con FFmpeg [duplicar]


144

Esta pregunta ya tiene una respuesta aquí:

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

Puedo definir la posición de inicio con -ss, pero no pude encontrar una para la posición final. Cualquier ayuda por favor?

Respuestas:


244

Instalar ffmpeg

Asegúrese de descargar una versión reciente deffmpeg , y no use la que viene con su distribución (por ejemplo, Ubuntu). Las versiones empaquetadas de varias distribuciones a menudo están desactualizadas y no se comportan como se esperaba.

O compílalo tú mismo .

Cómo cortar un video, sin volver a codificar

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

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

Aquí, las opciones significan lo siguiente:

  • -ssespecifica la hora de inicio, por ejemplo, 00:01:23.000o 83(en segundos)
  • -t especifica la duración del clip (mismo formato).
  • Recientes ffmpegtambién tiene una bandera para proporcionar el tiempo final -to.
  • -c copycopia el primer flujo de bits de video, audio y subtítulos de la entrada al archivo de salida sin volver a codificarlos. Esto no dañará la calidad y hará que el comando se ejecute en segundos.

Cómo cortar un video, con una nueva codificación

Si deja de lado la -c copyopción, ffmpegvolverá a codificar automáticamente el video y el audio de salida de acuerdo con el formato que elija. Para video y audio de alta calidad, lea la Guía de codificación x264 y la 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

1
En ubuntu 12:10, -c: v y -c: a no funcionaron. Tuve que usar "-acodec copy y -vcodec copy" en su lugar.
— Samuel Lampa

1
@Samuel Entonces estás usando una versión desactualizada, que ni siquiera es FFmpeg real, sino la horquilla Libav. Ver: stackoverflow.com/a/9477756/1109017
— slhck el

¡Gracias por esto! si no especificas una duración, ¿llegará al final?
— Jeff

@Jeff ¡Sí! (mínimo de caracteres)
— slhck

3
@Prateek Al copiar el flujo de bits de video (en lugar de volver a codificar), solo puede cortar en fotogramas clave . Si hay fotogramas clave en los segundos 1, 2 y 3, pero desea cortar en el segundo 1.5, entonces ffmpeg esperará hasta el segundo 2 antes de que pueda comenzar a cortar. Eso lo hace inexacto.
— slhck

26

Creo que puedes usar el siguiente comando ahora.

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

Echa un vistazo también a ffmpeg Doc , o esta página wiki .


66
ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFileversión más simple
— nwgat el

3
Tuve que usar la ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4versión (con -copyts), de lo contrario se cortó incorrectamente (con pantalla en negro al principio). Gracias por el segundo enlace sin embargo.
— Necronomicron

Esto es genial, lo último que quería era calcular la duración desde los puntos finales.
— Tomasz Gandor

La opción -to responde la pregunta que realmente se hizo. El resto de las respuestas son impertinentes u obsoletas.
— James Bowery

12

Esto es extraño porque nadie sugirió el trim filtro .

Descarte todo excepto el segundo minuto de entrada:

ffmpeg -i INPUT -vf trim=60:120

Guarde solo el primer segundo:

ffmpeg -i INPUT -vf trim=duration=1

Suelta todo excepto del segundo 13 al segundo 58:

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

8
Sí, bueno mencionar trimy atrim. Usualmente los uso cuando filtro, pero los usuarios deben tener en cuenta que el filtrado requiere una nueva codificación .
— llogan

Eres mi héroe. Necesitaba un filtro que hiciera esto.
— fahadash

5

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

Hay dos formas de dividir archivos de video por ffmpeg. El primero es bueno en sí mismo, más que eso: es más rápido, pero a veces crea archivos de salida con ciertos defectos. Entonces, para esos casos, existe la segunda forma de dividir los archivos de video: es considerablemente más lento, los archivos de salida son más grandes, pero parece que siempre tienen el 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 video ffmpeg es cortar. Formato: 00:00:00.0000significa horas: minutos: segundos: milisegundos.

  • <duration>- la duración de la parte de un video ffmpeg es cortar. 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 video a partir de 1 hora 19 minutos 0 segundos. La duración de la secuencia de video cortada es de 5 minutos 0 segundos.


Ok, gracias. Revisará los documentos y lo probaré mañana.
— juGGaKNot

3
-sameqno significa "misma calidad" y se ha eliminado de ffmpeg. Usar en su -codec copylugar. Además, no te olvides de la -toopción.
— llogan

Corregí los comandos en su cita, ya que estaban bastante desactualizados. No copie y pegue información sin citarla correctamente.
— slhck

-1

Puedes usar esto

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

Aquí tienes que dar la duración del video. es decir. 00: 25: 33-00: 09: 23


1
Como mencioné en la otra respuesta: con su comando, está volviendo a codificar el archivo, lo que no es absolutamente necesario y resulta en una calidad reducida y un mayor tiempo de procesamiento.
— slhck

-2

Utilizo la siguiente sintaxis para cortar videos con ffmpef:

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

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


1
¿Por qué está configurando FFmpeg para volver a codificar el archivo? Tenga en cuenta que -sameqno significa "la misma calidad" en absoluto.
— slhck
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.