ffmpeg:转换前后的视频长度不一样

时间:2012-07-12 15:21:49

标签: ffmpeg mp4 mov

我有一组.mov视频需要转换为.mp4格式。我正在使用ffmpeg并运行此命令:

ffmpeg -i Banking.mov -vsync -async -sameq -ac 1 -ab 64k -ar 44100 Banking.mp4

输入和输出视频的时间长度(00:03:35.407和00:03:35.582)略有不同。这就是捕获 - 我将时间提示存储在一个文件中的精确时间,程序使用该文件指向特定的场景。 0.1秒的差异导致它指向错误的场景,因此使得提示设置无用。是否有可能以不同的格式保存完全相同的时间?

   FFmpeg version CVS, Copyright (c) 2000-2004 Fabrice BellardMac OSX universal build for ffmpegX
  configuration:  --enable-memalign-hack --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-amr_wb --enable-pthreads --enable-x264 
  libavutil version: 49.0.0
  libavcodec version: 51.9.0
  libavformat version: 50.4.0
  built on Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250)
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x5597b8]negative ctts, ignoring
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Banking.mov':
  Duration: 00:03:35.6, start: 0.000000, bitrate: 1400 kb/s
  Stream #0.0(eng): Audio: pcm_s16be, 24000 Hz, stereo, 768 kb/s
  Stream #0.1(eng), 29.97 fps(r): Video: h264, yuv420p, 720x480
Output #0, mp4, to 'Banking.mp4':
  Stream #0.0, 29.97 fps(c): Video: mpeg4, yuv420p, 720x480, q=2-31, 200 kb/s
  Stream #0.1: Audio: aac, 44100 Hz, mono, 64 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
Press [q] to stop encoding
frame= 6461 q=0.0 Lsize=   53181kB time=215.3 bitrate=2023.3kbits/s    
video:51437kB audio:1618kB global headers:0kB muxing overhead 0.237816%

1 个答案:

答案 0 :(得分:2)

从您的FFmpeg输出判断,它看到输入文件为3:35.6分钟:

  

输入#0 ,mov,mp4,m4a,3gp,3g2,mj2,来自'Banking.mov':时长:00:03:35.6

因此,时间上的差异似乎是FFmpeg看到你的文件的方式,而不是与它的转码直接相关的任何内容。你如何衡量持续时间00:03:35.407?

那说了一些观察:

  • 由于您的总体目标只是转换容器格式,为什么不简单地复制视频和音频数据:

    ffmpeg -i Banking.mov -codec copy Banking.mp4
    

    这应该很好地保留一切。

  • 根据the documentation-vsync-async各取一个参数,所以没有任何可能没有任何帮助。 (虽然你的FFmpeg版本有点旧,但也许这个版本正确使用;我没有看到输出中的任何错误。)

  • 就此而言,您是否有理由使用已有六年历史的FFmpeg?您肯定会获得更好的支持,并且可能会在更新的版本中获得更好的结果。