ffmpeg 使用“-shortest”标志,文件最终比输入文件长

ffmpeg 使用“-shortest”标志,文件最终比输入文件长

我正在尝试使用 ffmpeg 为视频文件添加静音音轨(无论出于什么原因,Instagram 都要求视频文件具有音轨才能上传),我正在使用以下命令:

ffmpeg -f lavfi -i aevalsrc=0 -i input.mkv -shortest -c:v copy -c:a libvo_aacenc output.mp4

输入文件“input.mkv”是 00:00:06(即 6 秒)。然而,结果“output.mp4”出现在 00:02:31(即 2 分 31 秒),显然很多更长。6 秒后,视频似乎在最后一帧上冻结了。当然,这不是我期望或想要的结果。

有人能指出我在这个命令中犯了什么错误,以及如何正确实现我想要的吗?我希望能够编写一个小的批处理脚本或其他东西来自动将视频转换为 Instagram 所需的正确格式以供将来使用。

编辑:根据要求,这里是 ffmpeg 输出:

ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
  built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libo
pencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-li
bschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-lib
twolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enabl
e-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 19.100 / 52. 19.100
  libavcodec     55.  0.100 / 55.  0.100
  libavformat    55.  0.100 / 55.  0.100
  libavdevice    54.  4.100 / 54.  4.100
  libavfilter     3. 45.103 /  3. 45.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[lavfi @ 02259b00] Estimating duration from bitrate, this may be inaccurate
Input #0, lavfi, from 'aevalsrc=0':
  Duration: N/A, start: 0.000000, bitrate: 2822 kb/s
    Stream #0:0: Audio: pcm_f64le, 44100 Hz, mono, dbl, 2822 kb/s
Input #1, matroska,webm, from 'input.mkv':
  Metadata:
    ENCODER         : Lavf55.0.100
  Duration: 00:00:06.10, start: 0.000000, bitrate: 5123 kb/s
    Stream #1:0: Video: h264 (High), yuv420p, 1620x1080 [SAR 1:1 DAR 3:2], 10 fp
s, 10 tbr, 1k tbn, 20 tbc (default)
File 'output.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf55.0.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1620x1080 [SAR 1
:1 DAR 3:2], q=2-31, 10 fps, 16k tbn, 1k tbc (default)
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, mono, s16, 128 k
b/s
Stream mapping:
  Stream #1:0 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (pcm_f64le -> libvo_aacenc)
Press [q] to stop, [?] for help
frame=   59 fps=0.0 q=-1.0 Lsize=    4961kB time=00:01:12.38 bitrate= 561.4kbits
/s
video:3814kB audio:1132kB subtitle:0 global headers:0kB muxing overhead 0.304997
%

我还应该注意到,这次的结果“output.mp4”是 00:01:12 - 这个长度似乎有点“随机”,因为当然使用了与我之前执行时完全相同的命令。

答案1

解决方案很简单,只需更新 ffmpeg 的较新版本即可。使用截至 2015 年 1 月 13 日的最新 git 版本,这不再是问题。使用替代的 aac 编码器也可以,但总体而言,更新到较新的版本可能是更好的解决方案。

相关内容