$ 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 ffprobe
llamada, esto se estima a partir de la tasa de bits promedio al inicio del clip y el tamaño del archivo del clip a menos que proporcione el -count_frames
argumento, lo que ralentiza considerablemente su funcionamiento .
Otra cosa a tener en cuenta es que la posición de la -ss
opción 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 imprecisa . El artículo vinculado también describe una alternativa en su mayoría rápida pero precisa, que paga con un poco de complejidad.
Aparte de eso, no creo que realmente quieras cortar exactamente 10 minutos para cada clip. Eso pondrá cortes justo en el medio de las oraciones, incluso las palabras. Creo que deberías usar un editor o reproductor de video para encontrar puntos de corte naturales a solo 10 minutos de diferencia.
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
, diciéndole que pase el A / V codificado sin tocarlo usando el códec "copiar":
$ 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 -c copy
argumento le dice que copie todas las secuencias de entrada (audio, video y potencialmente otras, como subtítulos) en la salida tal como está. Para programas de A / V simples, es equivalente a las banderas más detalladas -c:v copy -c:a copy
o las banderas de estilo antiguo -vcodec copy -acodec copy
. Usaría el estilo más detallado cuando quiera copiar solo una de las transmisiones, pero vuelva a codificar la otra. Por ejemplo, hace muchos años había una práctica común con los archivos QuickTime para comprimir el video con video H.264 pero dejar el audio como PCM sin comprimir ; si se encuentra con un archivo de este tipo hoy, podría modernizarlo -c:v copy -c:a aac
para reprocesar solo la transmisión 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.