¿Es posible usar ffmpeg para recortar X segundos desde el comienzo de un video con una duración no especificada?

20

Necesito recortar solo los primeros 1 o 2 segundos de una serie de grabaciones FLV de diferentes longitudes no especificadas. He encontrado muchos recursos para extraer una duración específica de un video (por ejemplo, clips de 30 segundos), pero ninguno para continuar hasta el final de un video.

Ambos intentos solo producen una versión copiada del video, sin el recorte deseado:

ffmpeg -ss 2 -vcodec copy -acodec copy -i input.flv output.flv

ffmpeg -ss 2 -t 120 -vcodec copy -acodec copy -i input.flv output.flv

La idea sobre el segundo era: tal vez si especificaba una longitud más allá de lo posible, simplemente iría al final. No dados.

Sé que no es un problema con los códecs o el uso de segundos en lugar de código de tiempo ya que lo siguiente funcionó de maravilla:

ffmpeg -ss 2 -t 5 -vcodec copy -acodec copy -i input.flv output.flv

¿Alguna otra idea? Estoy abierto a usar otras herramientas de línea de comandos (basadas en Windows), sin embargo, estoy firmemente a favor de ffmpeg ya que ya lo estoy usando para la creación de miniaturas y estoy familiarizado con él.

Si ayuda, mis videos durarán menos de 2 minutos.

ACTUALIZAR:

He cambiado a usar Mencoder ( http://www.mplayerhq.hu/ ) ya que parece que ffmpeg no logrará esto sin alguna piratería adicional.

La sintaxis de Mencoder para lograr lo que me propuse hacer es:

mencoder.exe -ss 2 -oac copy -ovc copy input.flv -o output.flv
marcelebrate
fuente
Asi que cual prefieres; el mencoderejemplo de arriba; o el ffmpegejemplo a continuación?
voces

Respuestas:

16

Tratar:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

Creo que se supone que el parámetro de entrada es el primero.

Dave
fuente
Gracias por la respuesta. El orden de los parámetros que utilicé anteriormente proporciona el mismo resultado, por lo que no creo que sea el orden. Después de renunciar a ffmpeg, mi intervalo de fotogramas clave estaba causando problemas con otras herramientas. Después de volver a visitar esto ahora, era el intervalo de fotogramas clave después de todo. Se configuró en 5 segundos antes y desde entonces lo configuré en 1 segundo. A los 5 segundos, tanto su comando como los que probé anteriormente arrojaron un espacio negro al comienzo (3 segundos, como era de esperar). A 1 segundo, funciona como se esperaba.
marcelebrate
Esto también funciona para mp3's
geotheory
44
Como se explica en FFmpeg Seeking , el uso de -ss como parámetro de entrada (antes -i) durante la copia, o incluso la transcodificación con una versión anterior de FFmpeg, emplea la búsqueda de fotogramas clave. Esto es mucho más rápido, pero sacrifica la precisión. Si lo usa como parámetro de salida, el proceso es potencialmente mucho más lento (la entrada se decodifica cuadro por cuadro, incluso para las partes descartadas), pero precisa. Aunque la pregunta es antigua, creo que esta debería ser la respuesta aceptada.
Jonathan Y.
23

Resulta que este comando se recortar el vídeo de 2 segundos activado, como se esperaba:

ffmpeg -i input.flv -ss 2 -vcodec copy -acodec copy output.flv

El problema fue con el intervalo de fotogramas clave en input.flv. Se configuró en 5 segundos, lo que produjo 3 segundos de cuadros negros al comienzo del video (5 - 2 = 3). Desde entonces he cambiado mi intervalo de fotogramas clave a 1 segundo, aunque 2 segundos probablemente también producirían los resultados deseados en mi caso.

ACTUALIZACIÓN: orden -iy -ssparámetros actualizados según la respuesta de Dave, que acepté como crédito.

marcelebrate
fuente
2
Estaba teniendo este problema también. Esta publicación lo hizo por mí. Mordí la bala y dejé de intentar usarla -vcodec copy -acodec copypara todos mis comandos de edición. Volver a codificar evitó que los cuadros negros desde el comienzo de mi video o no se cortaran en el lugar correcto (la diferencia de un segundo sin volver a codificar se tradujo en una diferencia de casi 5 segundos en el video). Entonces, terminé reemplazando -vcodec copycon -vcodec libx264 -crf 0.
Hendy
2
Acabo de encontrar esta misma cosa. Descubrí que no puedo -vcodec copyporque el segmento no se inicia en un fotograma clave. Obtuve una imagen fija o una imagen negra durante N segundos hasta el siguiente fotograma clave. Si realmente vuelvo a codificar, en lugar de copiar, funciona como se esperaba. Entonces, aunque mi entrada y salida son ambas H264, todavía necesitaba volver a codificar (usando en -vcodec libx264lugar de -vcodec copy).
Karl Wilbur
La respuesta de Daves es la correcta a partir de la última versión de ffmpeg. El -idebe venir antes del -ss.
Arete
0

Use -ss y -to antes de -i así:

ffmpeg -ss 00:01:10 -to 00:02:10 -i input -c copy output
Bora Savkar
fuente
0

Actualizando esta respuesta, a partir de 2019 el comando ahora es:

ffmpeg -i input.flv -ss 2 -c copy output.flv
Matt Zabojnik
fuente