Как объединить две разные последовательности изображений с разной частотой кадров в видео с помощью avconv и python?

У меня есть два набора изображений, которые я без проблем комбинирую по отдельности с помощью avconv (с разными скоростями, используя -r). Один набор -r .20 (расширение одного изображения до пяти секунд видео), а другой - с обычной частотой кадров. собрать видео на обычной скорости.

Когда я пытаюсь объединить эти отдельные файлы avi с avconv или avimerge, полученное видео имеет только частоту кадров первого видео (-r .20)

Есть ли способ объединить эти две последовательности и обе последовательности с частотой кадров, с которой они были экспортированы?

Вот неаккуратный код, который я собрал здесь:

try:

p = subprocess.Popen(["avconv" , "-y" ,  "-r" , ".20" , "-i" , "head%03d.jpg" , "-i" , audio , head_video_filename],  universal_newlines=True, stdout=subprocess.PIPE)      
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    pass
else:
    print "] ENCODING OF HEADER.AVI FINISHED:" + str(retcode)

try:
    p = subprocess.Popen(["avconv" , "-y"  , "-i" , "tail%03d.jpg" , "-r" , "25" , tail_video_filename],  universal_newlines=True, stdout=subprocess.PIPE)      
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    pass
else:
    print "] ENCODING OF TAIL.AVI FINISHED:" + str(retcode)
try:

    group_of_videos = "concat:"+head_video_filename+"|"+tail_video_filename
    p = subprocess.Popen(["avconv" , "-i" , group_of_videos , "-c" , "copy" , full_video_filename] ,  universal_newlines=True, stdout=subprocess.PIPE)      
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    pass
else:
    print "] ENCODING OF FULL_VIDEO.AVI FINISHED:" + str(retcode)


return
#

person Fight Fire With Fire    schedule 04.04.2014    source источник


Ответы (1)


Я разобрался более-менее. Это шаги, которые я предпринял, хотя и дольше, это более или менее дает мне два видео из разных источников в виде изображений и частоты кадров, возможность кодировать их вместе и добавить отдельную музыкальную дорожку для конечного видео. Он работает очень хорошо, но все еще нуждается в настройке частоты кадров (30, 29.X и т. д., чтобы все было как надо).

encode the first video sequence input at .2 and export at 30FPS
try:
    p = subprocess.Popen(["avconv" , "-stats" , "0" , "-y"  ,  "-r" , ".2" , "-i" , "first%03d.jpg" , "-crf" , "1" , "-s" ,  "1280x720" , "-r" , "30" ,first_video_filename],  universal_newlines=True, stdout=subprocess.PIPE)     
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    pass
else:
    print "] ENCODING OF FIRST VIDEO FINISHED: " + str(retcode)
encode the second video sequence input at 29.7FPS and export at 30FPS
try:
    p = subprocess.Popen(["avconv" , "-stats" , "0" , "-y" , "-i" , "second%03d.jpg" , "-crf" , "1" , "-b" , "65536k" , "-s" , "1280x720" , "-r" , "30" , second_video_filename],  universal_newlines=True, stdout=subprocess.PIPE)     
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    pass
else:
    print "] ENCODING OF SECOND VIDEO FINISHED: " + str(retcode)
combine the avi's
try:
    p = subprocess.Popen(["mencoder"  , "-forceidx" , "-ovc" , "copy" , "-o" , combined_video_filename , first_video_filename , second_video_filename] ,  universal_newlines=True, stdout=subprocess.PIPE)      
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    "* FAILED TO MAKE COMBINED VIDEO"
    pass
else:
    print "] ENCODING OF COMBINED VIDEO FINISHED:" + str(retcode)
# add audio mix track
try:
    p = subprocess.Popen(["avconv"  , "-stats" , "0" , "-y" , "-i" , combined_video_filename , "-i" , combined_audio , "-c" , "copy" , "-crf" , "1" , "-b" , "65536k" ,"-shortest" , final_video_filename] ,  universal_newlines=True, stdout=subprocess.PIPE)      
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    "* FAILED TO MAKE FINAL VIDEO"
    pass
else:
    print "] ENCODING OF FINAL VIDEO FINISHED: " + str(retcode)

с кулаками, но, надеюсь, когда-нибудь это поможет кому-нибудь XOXOXOX

person Fight Fire With Fire    schedule 26.04.2014