0

我有两组图像,我可以毫无问题地分别与 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
#
4

1 回答 1

0

我或多或少地想通了。这些是我采取的步骤,虽然时间更长,但它或多或少地为我提供了来自不同来源的两个视频作为图像和帧速率,有机会将它们编码在一起并为结束视频添加单独的音乐曲目。它工作得非常好,但仍需要调整帧速率(30、29.X 等才能恰到好处)

以 .2 编码第一个视频序列输入并以 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)
以 29.7FPS 编码第二个视频序列输入并以 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)
结合avi的
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)
# 添加音频混合轨道
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

于 2014-04-26T12:29:48.017 回答