使用avconv进行准确可靠的电影编辑


4

我正在尝试使用av​​conv以自动方式执行电影编辑。它分两步进行:

  1. 提取输入影片的某些部分:
  2. 连接部分以形成输出影片:

我为中间和输出电影尝试了一些容器和编解码器的组合,但它总是导致以下情况之一:

  1. 在播放输出影片期间,音频变得越来越延迟。似乎连接部分的每次转换都会增加音频的延迟。例如,使用以下格式和编解码器会发生这种情况:

    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
    
  2. 输出影片中的音频和视频是同步的,但它应该比它应该更长。在这种情况下的输出 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
    

是否有可靠/准确的方法来执行这些操作并获得具有音频和视频同步且具有预期帧数的结果影片?


只是为了澄清:如果你使用的话,视频和音频应该不同步 copy 音频和视频的编解码器(即使这样也不总是发生)。至于输出看起来比它应该更长:如果你从连续的电影中得到正确数量的图像,那么它 应该 有合适的时间,对吗?你有一些具体的例子吗?
slhck

@slhck我正在重新阐述这个问题。我应该将它分成两个问题 - 一个用于不同步音频,另一个用于更长的最终持续时间?
erdavila

不,它很好。不同步的问题无论如何都无法解决 - 至少在你进行流复制时。如果即使你正在重新编码它也不同步,那么考虑把它放到另一个问题中。
slhck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.