我正在尝试使用avconv以自动方式执行电影编辑。它分两步进行:
- 提取输入影片的某些部分:
- 连接部分以形成输出影片:
我为中间和输出电影尝试了一些容器和编解码器的组合,但它总是导致以下情况之一:
在播放输出影片期间,音频变得越来越延迟。似乎连接部分的每次转换都会增加音频的延迟。例如,使用以下格式和编解码器会发生这种情况:
avconv -i input-movie.avi -ss $TIME_1 -vframes $NUMFRAMES_1 -f avi -q 1 -aq 1 -y movie-part1.avi avconv -i input-movie.avi -ss $TIME_2 -vframes $NUMFRAMES_2 -f avi -q 1 -aq 1 -y movie-part2.avi ... avconv -i input-movie.avi -ss $TIME_N -vframes $NUMFRAMES_N -f avi -q 1 -aq 1 -y movie-partN.avi avconv -i concat:movie-part1.avi|movie-part2.avi|...|movie-partN.avi -f avi -codec mpeg4 -q 1 -acodec libmp3lame -aq 1 -y output-movie.avi
输出影片中的音频和视频是同步的,但它应该比它应该更长。在这种情况下的输出
avprobe -show_streams output-movie
显示持续时间和视频nb_frames
比预期更长,虽然跑步avconv -i output-video -f image2 %06d.jpg
产生预期数量的jpg帧文件(预期的帧数是$NUMFRAMES_1 + $NUMFRAMES_2 + ... + $NUMFRAMES_N
)。例如,使用以下格式和编解码器会发生这种情况:avconv -i input-movie.avi -ss $TIME_1 -vframes $NUMFRAMES_1 -f mpeg -q 1 -aq 1 -y movie-part1.mpeg avconv -i input-movie.avi -ss $TIME_2 -vframes $NUMFRAMES_2 -f mpeg -q 1 -aq 1 -y movie-part2.mpeg ... avconv -i input-movie.avi -ss $TIME_N -vframes $NUMFRAMES_N -f mpeg -q 1 -aq 1 -y movie-partN.mpeg avconv -i concat:movie-part1.mpeg|movie-part2.mpeg|...|movie-partN.mpeg -f avi -codec mpeg4 -q 1 -acodec libmp3lame -aq 1 -y output-movie.avi
是否有可靠/准确的方法来执行这些操作并获得具有音频和视频同步且具有预期帧数的结果影片?
@slhck我正在重新阐述这个问题。我应该将它分成两个问题 - 一个用于不同步音频,另一个用于更长的最终持续时间?
—
erdavila
不,它很好。不同步的问题无论如何都无法解决 - 至少在你进行流复制时。如果即使你正在重新编码它也不同步,那么考虑把它放到另一个问题中。
—
slhck
copy
音频和视频的编解码器(即使这样也不总是发生)。至于输出看起来比它应该更长:如果你从连续的电影中得到正确数量的图像,那么它 应该 有合适的时间,对吗?你有一些具体的例子吗?