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 -ssparte funciona bien pero -tse ignora. Elimina correctamente los segundos especificados iniciales especificados con, -sspero 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
-ssopción para especificar una marca de tiempo de inicio y la-topción para especificar la duración de la codificación. Las marcas de tiempo deben estar enHH:MM:SS.xxxformato 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
-tes una opción de salida y siempre debe especificarse después-i.Algunos consejos:
-ssdespué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
-tolugar de-tespecificar la marca de tiempo a la que desea cortar. Entonces, en lugar de-i <input> -ss 30 -t 10usted, también podría hacer-i <input> -ss 30 -to 40lo mismo.Si su ffmpeg no es compatible
-c, o-toes 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.wmvframe= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s-c copyeliminó la pantalla negra inicial, vea su respuesta para más detalles.Como otras personas mencionaron, poner
-ssantes (mucho más rápido) o después (más preciso)-ihace 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-ssantes 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
-ssbusca rápidamente hasta (aproximadamente) 8min0seg, y luego el segundo-ssbusca con precisión hasta 9min0seg, y-t 00:01:00saca un clip de 1min0seg.También tenga en cuenta este punto importante de esa página: "Si usa
-sscon-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 copyprimero, pero si el video apesta, tendrás que volver a hacerlo.fuente
-c:a copyesta forma de búsqueda.Encontré que
-sscombinado con-c copyresultó en un corte de medio segundo al comienzo.Para evitar eso, debe eliminar el
-c copy(que ciertamente hará una transcodificación).fuente
-c copyarregló.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
-topción no funcionó, pero-vframesfuncionó. 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
-ssal frente-ihace una gran diferencia en el tiempo de ejecución.fuente
-vframes(o-frames:v) debería venir después-iporque 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 0usted, tome todas las secuencias del archivo y con-c copytodas las copias tal como están.Si se
-toomite el inicio a través,-ssse cortará el video de entrada desde el inicio hasta el segundo 60.mapTambié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