【问题标题】:ffmpeg: videos before and after conversion aren't the same lengthffmpeg:转换前后的视频长度不同
【发布时间】:2012-07-12 09:32:41
【问题描述】:

我有一组需要转换为 .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%

【问题讨论】:

  • 请显示输入 ffmpeg 命令后产生的完整 ffmpeg 控制台输出。
  • FFmpeg 版本 CVS,版权所有 (c) 2000-2004 Fabrice BellardMac OSX 用于 ffmpegX 配置的通用版本:--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 版本:49.0.0 libavcodec 版本:51.9.0 libavformat 版本:50.4.0 构建于 Apr 15 2006 04:58:19, gcc: 4.0.1 (Apple Computer, Inc. build 5250) [mov,mp4,m4a, 3gp,3g2,mj2 @ 0x5597b8]负 ctts,忽略第 1 部分
  • 输入#0,mov,mp4,m4a,3gp,3g2,mj2,来自“Banking.mov”:持续时间:00:03:35.6,开始:0.000000,比特率:1400 kb/s 流#0.0(eng):音频:pcm_s16be,24000 Hz,立体声,768 kb/s Stream #0.1(eng),29.97 fps(r):视频:h264,yuv420p,720x480 输出 #0,mp4,到“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 #0.1 -> #0.0 Stream #0.0 -> #0.1 按 [q] 停止编码 frame= 6461 q=0.0 Lsize= 53181kB time=215.3 bitrate=2023.3kbits/s PART 2
  • 视频:51437kB 音频:1618kB 全局标头:0kB 复用开销 0.237816% PART3
  • 我的意思是让您使用请求的信息修改您的问题(然后突出显示它并按 ctrl+k),以便更容易阅读。

标签: ffmpeg mp4 mov


【解决方案1】:

从您的 FFmpeg 输出来看,输入文件的长度为 3:35.6 分钟:

输入 #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Banking.mov': 持续时间: 00:03:35.6

因此,时间上的差异似乎是 FFmpeg 如何看待您的文件,而不是与其转码直接相关的任何内容。您如何测量获得 00:03:35.407 的持续时间?

也就是说,一些观察:

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

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

    这应该可以很好地保存所有内容。

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

  • 关于这一点,您使用 6 年历史的 FFmpeg 构建是否有原因?使用更新的版本,您肯定会获得更好的支持,并且可能会获得更好的结果。

【讨论】:

  • +1 提到了这样一个古老的 FFmpeg。可能是我“在野外”遇到的最年长的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2010-12-16
相关资源
最近更新 更多