Traté de cortar el video usando la hora de inicio y finalización del video usando el siguiente comando
ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4
Al usar el comando anterior, quiero cortar el video de 00:00:03
a 00:00:08
. Pero no está cortando el video entre esos momentos en lugar de estar cortando el video con los primeros 11 segundos. ¿Alguien puede ayudarme a resolver esto?
Editar 1:
He intentado cortar usando el siguiente comando sugerido por mark4o
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
Pero se mostró el siguiente error.
el codificador 'aac' es experimental pero los códecs experimentales no están habilitados
así que agregué -strict -2
el comando, es decir,
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4
Ahora está funcionando bien.
linux
video
ffmpeg
video-editing
Kalai
fuente
fuente
Respuestas:
Probablemente no tenga un fotograma clave en la marca de 3 segundos. Debido a que los fotogramas que no son clave codifican diferencias de otros fotogramas, requieren todos los datos que comienzan con el fotograma clave anterior.
Con el contenedor mp4 es posible cortar en un fotograma no clave sin volver a codificar utilizando una lista de edición. En otras palabras, si el fotograma clave más cercano antes de 3s está en 0s, copiará el video que comienza en 0s y usará una lista de edición para indicarle al jugador que comience a jugar 3 segundos después.
Si está utilizando la última versión de ffmpeg de git master, lo hará mediante una lista de edición cuando se invoque con el comando que proporcionó. Si esto no funciona para usted, entonces probablemente esté utilizando una versión anterior de ffmpeg o su reproductor no sea compatible con las listas de edición. Algunos jugadores ignorarán la lista de edición y siempre reproducirán todos los medios del archivo de principio a fin.
Si desea cortar con precisión comenzando en un fotograma no clave y desea que se reproduzca comenzando en el punto deseado en un reproductor que no admite listas de edición, o si desea asegurarse de que la porción de corte no esté realmente en el archivo de salida (por ejemplo si contiene información confidencial), puede hacerlo volviendo a codificar para que haya un fotograma clave precisamente a la hora de inicio deseada. Volver a codificar es el valor predeterminado si no especifica
copy
. Por ejemplo:Al volver a codificar, es posible que también desee incluir opciones adicionales relacionadas con la calidad o un codificador AAC en particular. Para obtener detalles, consulte la Guía de codificación x264 de ffmpeg para video y la Guía de codificación AAC para audio.
Además, la
-t
opción especifica una duración, no una hora de finalización. El comando anterior codificará 8 segundos de video a partir de 3 segundos. Para comenzar a los 3 segundos y terminar a los 8 segundos use-t 5
. Si está utilizando una versión actual de FFmpeg también puede reemplazar-t
con-to
en el comando anterior a extremo a la hora especificada.fuente
-t
/-to
y su argumento para continuar hasta el final.-ss
ANTES del archivo de entrada (antes-i
), porque de esa manera ffmpeg saltará directamente a la ubicación. Sin embargo, eso también establecerá el tiempo "cero" en esa ubicación, lo que significa que-to
señalará el momento equivocado. Fuente: trac.ffmpeg.org/wiki/Seekingffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
, aunque el archivo original no tiene ese problema.-async 1
.Intenta usar esto. Es la forma de ffmpeg más rápida y mejor que tengo:
¡Este comando recorta tu video en segundos!
Lo he explicado en mi blog aquí :
El formato de tiempo es: hh: mm: ss
Tenga en cuenta que la respuesta actual altamente votada está desactualizada y el recorte sería extremadamente lento. Para obtener más información, consulte este artículo oficial de ffmpeg .
fuente
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
. Ahora, sin embargo, se omite el salto y el tiempo de finalización no es correcto (en mi caso).Use -c copy para hacer instantáneamente. En ese caso, ffmpeg no volverá a codificar el video, solo lo cortará según el tamaño.
fuente
ffmpeg -i movie.mkv -vcodec copy -acodec copy converted_movie.mp4
y viceversaSuelta todo excepto del segundo 3 al segundo 8.
fuente
setpts=PTS-STARTPTS
filtro después del filtro de recorte.-strict -2
antescut.mp4
(en lugar del final de la línea de comando)?Para cortar según el tiempo de inicio y finalización del video fuente y evitar tener que hacer cálculos matemáticos, especifique el tiempo de finalización como la opción de entrada y el tiempo de inicio como la opción de salida.
Esto producirá un corte de 15 segundos de 0:45 a 1:00.
Esto se debe a que cuando
-ss
se proporciona como una opción de salida, el tiempo descartado todavía se incluye en el tiempo total leído desde la entrada, que-t
utiliza para saber cuándo detenerse. Mientras que si-ss
se da como una opción de entrada , el tiempo de inicio se busca y no se cuenta , que es de donde proviene la confusión.Es más lento que buscar ya que el segmento omitido todavía se procesa antes de descartarse, pero esta es la única forma de hacerlo, que yo sepa. Si está recortando desde lo más profundo de un archivo grande, es más prudente hacer los cálculos y usarlos
-ss
para la entrada.fuente
Esto es lo que uso:
Los
mp4
archivos generados también podrían usarse eniMovie
.Referencia: https://www.arj.no/2018/05/18/trimvideo
Si desea concatenar múltiples escenas de corte, puede usar el siguiente script:
fuente
Use -to en lugar de -t: -to especifica la hora de finalización, -t especifica la duración
fuente
Aunque llego 6 años tarde, creo que todas las respuestas anteriores no respondieron adecuadamente la pregunta que @kalai está haciendo. El script bash a continuación procesará un archivo de texto en el siguiente formato:
por ejemplo
y recorrer el archivo, descarga el archivo que
youtube-dl
admite, calculando la duración entrestart_time
yend_time
y pasándolo affmpeg
, ya-t
que en realidad es la duración , no la realend_time
Contáctame si tienes alguna pregunta.
fuente