¿Cómo puedo usar ffmpeg para dividir videos MPEG en partes de 10 minutos?

Pregunta:

A menudo existe una necesidad en la comunidad de desarrolladores activos o de código abierto para publicar grandes segmentos de video en línea. (Videos de reuniones, campamentos, charlas técnicas …) Siendo que soy un desarrollador y no un camarógrafo, no tengo ningún deseo de desembolsar el rasguño adicional en una cuenta premium de Vimeo. Entonces, ¿cómo tomo un video de charla técnica MPEG de 12.5 GB (1:20:00) y lo divido en segmentos 00:10:00 para cargarlo fácilmente en sitios para compartir videos?

Respuesta:

$ ffmpeg -i source-file.foo -ss 0 -t 600 first-10-min.m4v
$ ffmpeg -i source-file.foo -ss 600 -t 600 second-10-min.m4v
$ ffmpeg -i source-file.foo -ss 1200 -t 600 third-10-min.m4v
...

Envolver esto en un script para hacerlo en un bucle no sería difícil.

Tenga en cuenta que si intenta calcular el número de iteraciones en función de la duración de salida de una llamada ffprobe esto se estima a partir de la tasa de bits promedio al comienzo del clip y el tamaño del archivo del clip a menos que proporcione el argumento -count_frames , que ralentiza su funcionamiento considerablemente.

Otra cosa a tener en cuenta es que la posición de la opción -ss en la línea de comando es importante . Donde lo tengo ahora es lento pero preciso. La primera versión de esta respuesta dio la alternativa rápida pero inexacta . El artículo vinculado también describe una alternativa en su mayoría rápida pero aún precisa, por la que paga con un poco de complejidad.

Aparte de todo eso, no creo que realmente quieras cortar exactamente 10 minutos por cada clip. Eso pondrá cortes justo en el medio de las oraciones, incluso las palabras. Creo que debería usar un editor o reproductor de video para encontrar puntos de corte naturales con una diferencia de menos de 10 minutos.

Suponiendo que su archivo está en un formato que YouTube puede aceptar directamente, no tiene que volver a codificar para obtener segmentos. Simplemente pase las compensaciones del punto de corte natural a ffmpeg , indicándole que pase el A / V codificado sin tocarlo usando el códec de "copia":

$ ffmpeg -i source.m4v -ss 0 -t 593.3 -c copy part1.m4v
$ ffmpeg -i source.m4v -ss 593.3 -t 551.64 -c copy part2.m4v
$ ffmpeg -i source.m4v -ss 1144.94 -t 581.25 -c copy part3.m4v
...

El argumento -c copy le dice que copie todos los flujos de entrada (audio, video y potencialmente otros, como subtítulos) en la salida tal cual. Para programas A / V simples, es equivalente a los indicadores más detallados -c:v copy -c:a copy o los indicadores de estilo antiguo -vcodec copy -acodec copy . Utilizaría el estilo más detallado cuando desee copiar solo una de las secuencias, pero volver a codificar la otra. Por ejemplo, hace muchos años existía una práctica común con los archivos QuickTime de comprimir el video con video H.264 pero dejar el audio como PCM sin comprimir ; Si se encontró con un archivo de este tipo hoy, puede modernizarlo con -c:v copy -c:a aac para reprocesar solo el flujo de audio, dejando el video intacto.

El punto de inicio para cada comando anterior después del primero es el punto de inicio del comando anterior más la duración del comando anterior.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım