1 votos

Cómo cortar y combinar archivos de video mp4 sin volver a codificar

Usando Ubuntu 18.04 tengo algunas screencast archivos de vídeo en contenedor mp4 (h.264/códecs de mp3) que yo quiero hacer en tiempos de mezcla (es decir, C. mp4 = A. mp4+B. mp4) o a veces de corte de la eliminación de algunos intervalos (por ejemplo, D. mp4 = A. mp4[0,320{segundos}]+A. mp4[325,340]+C. mp4).

Ahora estoy usando kdenlive, woks, pero re-codificar todo y parece un poco demasiado para una tarea de ese tipo.

Hay una forma más simple de hacerlo sin volver a codificar (incluso, y tal vez se prefiere, de la línea de comandos o estable Python/Julia/R/..?

Estoy pensando en algo como PDFtk para los archivos pdf :-))

PD: probé ffmpeg -ss 00:00:05 -to 00:00:10 -i test1.mp4 test2.mp4 pero tengo un error:

Opción a (registro o transcodificar detener el tiempo) no puede ser aplicado a la entrada de url de la prueba1.mp4-usted está tratando de aplicar una opción de entrada a una salida archivo o viceversa. Mover esta opción antes de que el archivo al que pertenece.

Mis archivos tienen el mismo recipiente, el codec y la resolución.

(Yo no sé nada de video cosas..)

EDIT: no quiero mirada pesimista, pero más miro más me comporto de que lo que yo pensaba que para ser super simple, de hecho es super complicado. Qué lástima que nadie escribió una interfaz de alto nivel para realizar algo como eso.. yo estoy segura de que no soy el primero con una necesidad..

EDIT2: he encontrado moviepy, pero todavía está lejos de mi idea original (re-codifica y tiene más de lo necesario API.. puedo script, pero la reencoding problema sigue):

pip install moviepy

from moviepy.editor import VideoFileClip, concatenate_videoclips
c1 = VideoFileClip("test1.mp4").subclip(0,5)
c2 = VideoFileClip("test1.mp4").subclip(10,15)
f = concatenate_videoclips([c1,c2])
f.write_videofile(test2.mp4)

0voto

Dave Puntos 46

Bueno, como he publicado en mi propia pregunta, esto no resuelve el problema de la recodificación, pero al menos es una interfaz útil. Solo úsalo con

 vcat -i inputfile1,inputfile2[start-end],... -o <outputfile>
 
 #!/usr/bin/python3

import sys, getopt, re

def printerror(errormsg):
  print("*** vcat - concatenate video segments using moviepy ***\n")
  print("ERROR:", errormsg,"\n")
  print("Usage: vcat -i inputfile1,inputfile2[start-end],... -o <outputfile>")
  print("Optional start and end points should be given in seconds. If files have spaces should be quoted (e.g. \"input file.mp4[5-30]\").")

try:
 from moviepy.editor import VideoFileClip, concatenate_videoclips
except ImportError:
 printerror("You don't seem to have moviepy installed. Install it with `pip install moviepy`.")
 exit(1)

def main(argv):
    inputfiles_arg = ''
    outputfile = ''
    try:
        opts, args = getopt.getopt(argv,"hi:o:",["input=","output="])
    except getopt.GetoptError as err:
        printerror(str(err))
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            printerror("")
            sys.exit()
        elif opt in ("-i", "--input"):
            inputfiles_arg = arg
        elif opt in ("-o", "--output"):
            outputfile = arg
    if outputfile =='':
        printerror("Output file not specified")

    iFiles = inputfiles_arg.split(',')

    clips=[]
    for iFile in iFiles:
        subclip = re.search(r"\[([0-9\-\.]+)\]", iFile)
        if subclip is None:
            clips.append(VideoFileClip(iFile))
        else:
            dims = subclip.group(1).split('-')
            if len(dims) != 2:
                printerror("If a specific segment of a file is specified, this should be given as [startseconds-endseconds]")
            iFile = iFile.replace("["+subclip.group(1)+"]",'')
            clips.append(VideoFileClip(iFile).subclip(float(dims[0]),float(dims[1])))

    f = concatenate_videoclips(clips)
    f.write_videofile(outputfile)


if __name__ == "__main__":
   main(sys.argv[1:])
 

Descargo de responsabilidad: no uso Python por un tiempo, por lo que estoy seguro de que podría haber mejores enfoques ... bdw es realmente bueno poder hacer lo que quieras hacer en unas pocas horas debido a la enorme documentación que puedes encontrar en la red sobre python ..

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: