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?

x74x61
fuente

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
slhck
fuente
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 .

huir
fuente
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
malat
fuente
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.

Christian Wörz
fuente
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

daya
fuente
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.

Michael Banzon
fuente
1
¿Por qué está configurando FFmpeg para volver a codificar el archivo? Tenga en cuenta que -sameqno significa "la misma calidad" en absoluto.
slhck