1

我有一组需要转换为 .mp4 格式的 .mov 视频。我正在使用 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 秒的差异导致它指向错误的场景,因此使 cue set 无用。有没有可能以不同的格式保存完全相同的时间?

   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%
4

1 回答 1

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
    

    那应该很好地保存一切。

  • 根据文档,每个参数都有一个参数-vsync-async所以没有任何参数可能没有任何帮助。(虽然您的 FFmpeg 版本有点旧,所以也许这对那个版本来说是正确的用法;我在输出中看不到任何错误。)

  • 在那张纸条上,您使用六年前的 FFmpeg 构建有什么原因吗?您肯定会获得更好的支持,并且使用更新的版本可能会获得更好的结果。

于 2012-07-13T22:32:47.820 回答