Estoy usando ffmpeg para cortar una sección de un archivo grande como este:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
La -ss
parte funciona bien pero -t
se ignora. Elimina correctamente los segundos especificados iniciales especificados con, -ss
pero luego continúa hasta el final de la entrada con la copia.
¿Hay alguna manera de usar ffmpeg para cortar el final de un video sin recodificarlo?
Respuestas:
Puede usar la
-ss
opción para especificar una marca de tiempo de inicio y la-t
opción para especificar la duración de la codificación. Las marcas de tiempo deben estar enHH:MM:SS.xxx
formato o en segundos (s.msec
).Lo siguiente recortaría los primeros 30 segundos, y luego recortaría todo lo que sea 10 segundos después de eso:
Tenga en cuenta que
-t
es una opción de salida y siempre debe especificarse después-i
.Algunos consejos:
-ss
después-i
, obtendrá una búsqueda más precisa a expensas de una ejecución más lenta por completo. Ver también: Buscando con FFmpegPuede usar en
-to
lugar de-t
especificar la marca de tiempo a la que desea cortar. Entonces, en lugar de-i <input> -ss 30 -t 10
usted, también podría hacer-i <input> -ss 30 -to 40
lo mismo.Si su ffmpeg no es compatible
-c
, o-to
es probable que esté muy desactualizado. Compile una nueva versión usted mismo o descargue una compilación estática desde su página de inicio. Realmente no es complicado.fuente
ffmpeg -i input.wmv -c copy -t 35 output.wmv
frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
-c copy
eliminó la pantalla negra inicial, vea su respuesta para más detalles.Como otras personas mencionaron, poner
-ss
antes (mucho más rápido) o después (más preciso)-i
hace una gran diferencia. La sección "Búsqueda rápida y precisa" en la página de búsqueda de ffmpeg le dice cómo obtener ambos, y lo he usado, y hace una gran diferencia. Básicamente pones-ss
antes Y después del-i
, solo asegúrate de dejar suficiente tiempo antes de comenzar a cortar para tener otro cuadro clave. Ejemplo: si desea hacer un clip de 1 minuto, de 9min0sec a 10min 0sec en Video.mp4, puede hacerlo de manera rápida y precisa utilizando:El primero
-ss
busca rápidamente hasta (aproximadamente) 8min0seg, y luego el segundo-ss
busca con precisión hasta 9min0seg, y-t 00:01:00
saca un clip de 1min0seg.También tenga en cuenta este punto importante de esa página: "Si usa
-ss
con-c:v copy
, el flujo de bits resultante podría terminar entrecortado, no reproducible o no sincronizado con la transmisión de audio, ya que ffmpeg se ve obligado a usar / dividir solo en i-frames. "Esto significa que debe volver a codificar el video, incluso si solo desea copiarlo, o arriesgarse a que esté entrecortado y fuera de sincronización. Podrías intentarlo solo
-c copy
primero, pero si el video apesta, tendrás que volver a hacerlo.fuente
-c:a copy
esta forma de búsqueda.Encontré que
-ss
combinado con-c copy
resultó en un corte de medio segundo al comienzo.Para evitar eso, debe eliminar el
-c copy
(que ciertamente hará una transcodificación).fuente
-c copy
arregló.A MANO
Abra el archivo en un reproductor multimedia que avance cuadro por cuadro y reproduzca un archivo AVISynth con datos como:
Luego corte con el formato de hora EXACTO:
y
Ahora haga un archivo txt con los archivos de video con contenidos como:
Ejecute ffmpeg:
fuente
Para mí, la
-t
opción no funcionó, pero-vframes
funcionó. Prefiero usar#frames
, ya que preferiría cortar en I-Frames y descubrí GOP para usar videosffprobe
.La línea de comando que funcionó para mí es:
Por cierto, poner
-ss
al frente-i
hace una gran diferencia en el tiempo de ejecución.fuente
-vframes
(o-frames:v
) debería venir después-i
porque es una opción de salida.Al igual que con user225366, la opción -t no funciona para videos cortos, pero sí para videos más largos. Para videos cortos parece que -frames: v es mejor. Esto es lo que funcionó para mí.
Se necesita agregar una copia de códec si el video tiene audio, como muestran las otras respuestas.
fuente
Veo que no muchos mencionan esto (no soy un experto, así que tal vez haya una trampa), pero si su archivo tiene otras secuencias como subtítulos y otros metadatos como capítulos, etc., es posible cortar / recortar y mantener todas las secuencias con el siguiente comando
Con
-map 0
usted, tome todas las secuencias del archivo y con-c copy
todas las copias tal como están.Si se
-to
omite el inicio a través,-ss
se cortará el video de entrada desde el inicio hasta el segundo 60.map
También es útil jugar con si desea que solo se mantengan secuencias específicas en el corte (tal vez no necesite todas las fuentes de audio en el archivo o solo algunos subtítulos).Lo uso cuando necesito dividir grandes archivos MKV que no se pueden almacenar en el almacenamiento FAT32.
fuente