如何在视频中添加音频?
Posted
技术标签:
【中文标题】如何在视频中添加音频?【英文标题】:How to add audio to video? 【发布时间】:2010-07-30 12:34:43 【问题描述】:我录制了一段没有声音的视频。我保存快照,然后将它们编译为 25FPS 的 .avi。现在我想录制音频(而不是 time.sleep(0.04) 在以下快照之间,我将在这段时间内录制音频)并用视频编译它。现在我有了 avi 文件和 wave 文件,我找到了混合它们的解决方案。
Python、Win32
这是我使用“mencoder”的“录像机”:
import os
import re
from VideoCapture import *
import time
def makeVideo(device, ftime):
folder = 'foto/forVideo/'
mencoder = "C:\mencoder.exe"
for i in range(ftime * 25) :
FN = "foto\\forVideo\\ola-%(#)04d.jpg" % "#" : i
device.saveSnapshot(FN, quality=100, timestamp=0, boldfont=0)
time.sleep(0.04)
# Set up regular expressions for later
RE = re.compile('.*-(\d*)\.jpg')
fbRE = re.compile('(.*)-.*\.jpg')
# How many frames to use per movie
framestep = 2000
print '\n\n\tlisting contents of %s . . .'%folder
files = os.listdir(folder)
print '%s files found.\n\n' % len(files)
# If a file is called "asdf-003.jpg", the basename will be 'asdf'.
basenames = [fbRE.match(i).groups()[0] for i in files if fbRE.match(i)]
# Get the set of unique basenames. In the
basenames = list(set(basenames))
print '\t***There are %s different runs here.***' % len(basenames)
# This loop will only execute once if there was only a single experiment
# in the folder.
for j,bn in enumerate(basenames):
these_files = [i for i in files if bn in i]
# Sort using the "decorate-sort-undecorate" approach
these_sorted_files = [(int(RE.match(i).groups()[0]),i) for i in these_files if RE.match(i)]
these_sorted_files.sort()
these_sorted_files = [i[1] for i in these_sorted_files]
# these_sorted_files is now a list of the filenames a_001.jpg, a_002.jpg, etc.
for k in range(0, len(these_sorted_files), framestep):
frame1 = k
frame2 = k+framestep
this_output_name = 'C:\_%s_%s_%s-%s.avi' % (bn,j,frame1,frame2)
print '\n\n\toutput will be %s.' % this_output_name
f = open('temp.txt','w')
filenames = [os.path.join(folder,i)+'\n' \
for i in these_sorted_files[frame1:frame2]]
f.writelines(filenames)
f.close()
# Finally! Now execute the command to create the video.
cmd = '%s "mf://@temp.txt" -mf fps=25 -o %s -ovc lavc\
-lavcopts vcodec=mpeg4' % (mencoder,this_output_name)
os.system(cmd)
print '\n\nDONE with %s' % this_output_name
print 'Done with all marked folders.'
【问题讨论】:
您使用哪些库来录制视频?能否提供一些示例代码? 【参考方案1】:我认为最好的办法是使用外部程序来复用它们。 ffmpeg
一直是人们的最爱——http://ffmpeg.arrozcru.org/autobuilds/ 上提供了高质量的 Windows 版本。使用 ffmpeg,只需执行 ffmpeg -i your_video_file.avi -i your_audio_file.wav -vcodec copy -acodec copy muxed_file.avi
即可。
【讨论】:
在我看来它不起作用......但也许我做错了。您知道使用 ffmpeg 在一个功能中录制带音频的视频的命令吗? 你说你有AVI和WAV文件;上面的命令会将它们混合成一个有声音的 AVI。 @AKX 你能指导我如何在Python中使用上述语句ffmpeg -i your_video_file.avi -i your_audio_file.wav -vcodec copy -acodec copy muxed_file.avi
@Fahadkalis,最简单的就是os.system()
,但也请查看subprocess
模块。
@AKX subprocess
是os.system
a/c升级到https://docs.python.org/2/library/subprocess.html
的版本以上是关于如何在视频中添加音频?的主要内容,如果未能解决你的问题,请参考以下文章