【问题标题】:FFMPEG creates incorrect Source durationFFMPEG 创建不正确的源持续时间
【发布时间】:2016-12-08 15:44:33
【问题描述】:

在将电影从 AVI 转码为 mp4 时,FFMPEG 有时会错误地设置“源持续时间”。

这会扰乱 IOS 设备上的播放。具体来说,它会导致视频在“源持续时间”处中断,而音频仍在播放。

FFMPEG 输出转码根本没有显示任何奇怪的东西。看起来很正常,没有错误或警告。

  • 我可以强制 FFMPEG 从不添加“源持续时间”元数据吗?
  • 如何编辑 mediainfo 显示的曲目元数据?我尝试了 Mp4box 和其他一些,但我似乎无法弄清楚如何编辑轨道级别的元数据。

谢谢。

日志如下。

ffmpeg version N-77455-g4707497 Copyright (c) 2000-2015 the FFmpeg developers   built with gcc 5.2.0 (GCC)   configuration: --enable-gpl
    --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib   libavutil      55. 11.100 / 55. 11.100   libavcodec     57. 20.100 / 57. 20.100   libavformat    57. 20.100 / 57. 20.100   libavdevice    57.  0.100 / 57.  0.100   libavfilter     6. 21.101 / 
    6. 21.101   libswscale      4.  0.100 /  4.  0.100   libswresample   2.  0.101 /  2.  0.101   libpostproc    54.  0.100 / 54.  0.100 Input #0, avi, from 'E:\MEDIA\Central.Intelligence.2016.HC.HDRip.XviD.AC3-EVO\Central.Intelligence.2016.HC.HDRip.XviD.AC3-EVO.avi': Metadata:
        encoder         : VirtualDubMod 1.5.10.2 (build 2542/release)   Duration: 01:51:43.27, start: 0.000000, bitrate: 1765 kb/s
        Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x304 [SAR 1:1 DAR 45:19], 1563 kb/s, 23.98 fps, 23.98 tbr, 23.98 tbn, 23.98 tbc
        Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 192 kb/s [libx264 @ 000000f3c80a0a80] using SAR=405/304 [libx264 @ 000000f3c80a0a80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2 [libx264 @ 000000f3c80a0a80] profile High, level 3.1 [libx264 @ 000000f3c80a0a80] 264 - core 148 r2638 7599210 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=23 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=1280 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to 'F:\STREAMS\Central.Intelligence.2016.HC.HDRip.XviD.AC3-EVO.avi.1280x720_1000kbps.TEMP.mp4': Metadata:
        encoder         : Lavf57.20.100
        Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 405:304 DAR 45:19], q=-1--1, 1280 kb/s, 23.98 fps, 10000k tbn, 23.98 tbc
        Metadata:
          encoder         : Lavc57.20.100 libx264
        Side data:
          unknown side data type 10 (24 bytes)
        Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 160 kb/s
        Metadata:
          encoder         : Lavc57.20.100 aac Stream mapping:   Stream #0:0 -> #0:0 (mpeg4 (native) -> h264 (libx264))   Stream #0:1 -> #0:1 (ac3 (native) -> aac (native)) Press [q] to stop, [?] for help [mpeg4 @ 000000f3c80ae220] Video uses a non-standard and wasteful way to store B-frames ('packed B-frames'). Consider using the mpeg4_unpack_bframes bitstream filter without encoding but stream copy to fix it. 
frame=   15 fps=0.0 q=0.0 size=       0kB time=00:00:01.18 bitrate=   0.3kbits/s dup=1 drop=0 speed=2.36x   
--SNIP---
frame=160704 fps= 16 q=30.0 size= 1180376kB time=01:51:43.08 bitrate=1442.6kbits/s dup=1 drop=0 speed=0.671x     
[libx264 @ 0000001f60c5d900] frame I:1167  Avg QP:19.08  size: 44465
[libx264 @ 0000001f60c5d900] frame P:63049 Avg QP:22.26  size: 12774
[libx264 @ 0000001f60c5d900] frame B:110691 Avg QP:24.81  size:  2739
[libx264 @ 0000001f60c5d900] consecutive B-frames:  6.0% 22.8% 18.3% 53.0%
[libx264 @ 0000001f60c5d900] mb I  I16..4: 14.0% 76.1%  9.9%
[libx264 @ 0000001f60c5d900] mb P  I16..4:  2.5%  6.6%  0.4%  P16..4: 44.5% 10.8%  5.2%  0.0%  0.0%    skip:30.0%
[libx264 @ 0000001f60c5d900] mb B  I16..4:  0.1%  0.3%  0.0%  B16..8: 32.1%  1.6%  0.2%  direct: 0.9%  skip:64.9%  L0:37.9% L1:58.7% BI: 3.5%
[libx264 @ 0000001f60c5d900] final ratefactor: 23.25
[libx264 @ 0000001f60c5d900] 8x8 transform intra:70.8% inter:85.8%
[libx264 @ 0000001f60c5d900] coded y,uvDC,uvAC intra: 47.1% 56.6% 19.5% inter: 10.7% 14.2% 0.4%
[libx264 @ 0000001f60c5d900] i16 v,h,dc,p: 46% 20%  8% 26%
[libx264 @ 0000001f60c5d900] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 17% 25%  5%  7%  7%  7%  6%  6%
[libx264 @ 0000001f60c5d900] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 20% 12%  5% 10%  9%  8%  5%  4%
[libx264 @ 0000001f60c5d900] i8c dc,h,v,p: 58% 18% 18%  6%
[libx264 @ 0000001f60c5d900] Weighted P-Frames: Y:1.4% UV:0.8%
[libx264 @ 0000001f60c5d900] ref P L0: 62.6% 12.9% 18.9%  5.6%  0.1%
[libx264 @ 0000001f60c5d900] ref B L0: 87.6% 11.0%  1.4%
[libx264 @ 0000001f60c5d900] ref B L1: 94.6%  5.4%
[libx264 @ 0000001f60c5d900] kb/s:1272.59
[aac @ 0000001f60b52180] Qavg: 954.859

编辑

这与数据有关,当我运行此命令时(在 10 分钟处截断)

ffmpeg.exe -i CI.mp4 -ss 00:00:00 -t 00:08:00 -vcodec copy  -map_metadata 0 -acodec copy CI2.mp4

媒体资讯展示

Duration                    : 9mn 49s
Source duration             : 2mn 40s

当我运行这个时(18 分钟)

ffmpeg.exe -i CI.mp4 -ss 00:00:00 -t 00:18:00 -vcodec copy  -map_metadata 0 -acodec copy CI2.mp4

媒体资讯节目

Duration                    : 17mn 49s
Source duration             : 3mn 30s

如何直接编辑元数据

【问题讨论】:

  • 显示转换命令及其完整的控制台输出。您可以在命令中添加-report 并粘贴生成的日志文件。
  • @Mulvya 谢谢,我附上了 FFMPEG 日志。
  • 命令不存在。
  • @ByronWhitlock 您使用了哪些命令来生成输出?它们可用于重新创建您的问题并检查修复。你知道ffmpeg -i somefile.mp4 -options=showUsed ...etc etc.
  • 您不会在 MP4 元数据中找到具体的“源持续时间”,FFmpeg 甚至都没有将它放在那里。它只是由 MediaInfo 计算出来的(但我不知道)。反正 CI.mp4 是 avi 到 mp4 转换的结果,对吧?因此,如果结果不好,那么为什么要使用坏文件作为输入来修剪那些 10 和 18 分钟的测试呢?结果仍然会很糟糕...... avi的音频也是ac3格式的吗?你在avi到mp4的转换命令中使用了-acodec copy吗? Mp4 需要 mp3 或 aac 格式的音频。

标签: ffmpeg mp4 x264 libx264


【解决方案1】:

最近,我遇到了类似的问题。我用手机拍摄了 3 个类似(1080x1920,即纵向)的 MP4 视频。 我使用以下 ffmpeg 命令将它们转换为 1280x720(横向):

fmpeg -i input.MP4 -vf "scale=w=1280:h=720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2" -c:a copy -y output.MP4

它会调整视频大小并在两侧添加宽黑条。 结果视频中有两个没问题,第三个让我的视频编辑器崩溃了。但是,它可以由 VLC 显示。 我用 MediaInfo 检查了它的标签,它有一个源持续时间视频标签(以前从未见过)。它的值为 9 s 628 ms,而 Duration 为 48 s 21 ms。 其他两个视频没有源持续时间标签。 因为 VLC 可以显示它,所以我尝试使用它来更正视频如下(我在 View 菜单中选中了 Advanced Controls):

  1. 选定的媒体 -> 转换/保存...
  2. 添加... -> 浏览输入.MP4 -> 打开
  3. 转换/保存 -> 转换
  4. 选定的配置文件视频 - H.264 + MP3(MP4),单击编辑选定的配置文件按钮
  5. 封装选项卡、MP4/MOV、除章节以外的所有功能
  6. 视频编解码器选项卡,选中视频并保留原始视频轨道
  7. 音频编解码器选项卡,选中音频并保留原始音轨
  8. 字幕选项卡,未选中字幕,因为视频没有字幕
  9. 保存
  10. 浏览目标文件,浏览输出文件夹,输入输出名称。MP4
  11. 保存
  12. 开始

VLC 快速完成了“转换”,瞧!根据 MediaInfo,不再有源持续时间标签,我的视频编辑器欣然接受了生成的视频。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多