【问题标题】:FFMPEG, player plays jerky video after encodingFFMPEG,播放器在编码后播放生涩的视频
【发布时间】:2020-12-24 23:48:29
【问题描述】:

我在 Windows 10 上使用 FFMPEG 已经有一段时间了。为了帮助我完成工作,我有几个 DOS 批处理文件,它们接受参数并执行诸如从头开始剪切、模糊区域、静音音频等任务。

我通常拍摄大型视频,使用 Avidemux 提取我喜欢的部分,使用 FFMPEG 对某些部分进行剪切/应用过滤器,使用 FFMPEG 将它们连接起来,然后再次编码以消除我的任何错误(或抖动等)目标播放器,即在 Android TV(TCL 品牌)上运行的 Kodi 18.xx。

我已经为我制作了几年的视频做了类似的过程,但这个视频似乎超出了我的控制范围。我已经使用 Avidemux 2.7.2 截断了视频。视频已在关键帧处剪切。如果我采用一个未编码的文件,它可以在我的 Android TV 上完美运行。如果我使用 FFMPEG 对其进行编码,它会在我的 Android TV 上播放时开始抖动。

视频在我的电脑上运行的 VLC 播放器上总是可以正常播放。

一些可能有用的信息。如果需要,我可以附上详细的框架信息。

ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers
      built with gcc 9.3.1 (GCC) 20200621
      configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
      libavutil      56. 51.100 / 56. 51.100
      libavcodec     58. 91.100 / 58. 91.100
      libavformat    58. 45.100 / 58. 45.100
      libavdevice    58. 10.100 / 58. 10.100
      libavfilter     7. 85.100 /  7. 85.100
      libswscale      5.  7.100 /  5.  7.100
      libswresample   3.  7.100 /  3.  7.100
      libpostproc    55.  7.100 / 55.  7.100

显示源文件的信息。编解码器是hevc,我认为FFMPEG没有默认支持?

ffmpeg -i _p007_cut_start.mp4 -hide_banner
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '_p007_cut_start.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2mp41
        encoder         : Lavf58.20.100
      Duration: 00:00:08.51, start: 0.006000, bitrate: 5501 kb/s
        Stream #0:0(und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(tv, bt709), 1920x816 [SAR 1:1 DAR 40:17], 5091 kb/s, 23.98 fps, 23.98 tbr, 24390 tbn, 23.98 tbc (default)
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 401 kb/s (default)
        Metadata:
          handler_name    : SoundHandler

显示已编码文件的信息:

ffmpeg -i p007_done2.mp4 -hide_banner
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'p007_done2.mp4':
      Metadata:
        major_brand     : isom
        minor_version   : 512
        compatible_brands: isomiso2avc1mp41
        encoder         : Lavf58.45.100
      Duration: 00:00:08.53, start: 0.000000, bitrate: 3092 kb/s
        Stream #0:0(und): Video: h264 (High 10) (avc1 / 0x31637661), yuv420p10le, 1920x816 [SAR 1:1 DAR 40:17], 2743 kb/s, 23.98 fps, 23.98 tbr, 24390 tbn, 47.95 tbc (default)
        Metadata:
          handler_name    : VideoHandler
        Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 345 kb/s (default)
        Metadata:
          handler_name    : SoundHandler

如果有人能指出我哪里出错了,我将不胜感激。

用于执行编码的命令如下(仅在libx264和lib265之间交换了库):

ffmpeg -i in.mp4 -map 0:v -c:v libx264 -video_track_timescale 24390 -crf 23 -map 0:a -c:a aac -copyts -vsync 0 -async 0 -movflags +faststart out.mp4

附:我的知识更多地基于反复试验,除了让我走到这一步的原因之外,我不太了解视频格式(和概念)。

问候, AK

【问题讨论】:

  • 源是 10 位的,因此 ffmpeg 已转换为 10 位 H.264,您的播放器可能无法正常运行。通过添加-pix_fmt yuv420p 编码为 x264 8 位
  • 感谢您的帮助。

标签: video ffmpeg video-encoding


【解决方案1】:

我用 libx264 编码的视频,我用 libx265 重新编码,问题就消失了。

但我仍然很想知道为什么使用 libx264 进行编码会导致视频抖动。

问候, AK

【讨论】:

  • 在这两种情况下你的 FFmpeg 命令是什么(不工作的 h264,vs 工作的 h265)?使用edit 按钮将该信息添加到您的问题中。
  • 我已经编辑并添加了命令。它接近我原来的帖子的结尾。
猜你喜欢
  • 2013-12-14
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 2019-12-05
  • 2014-05-01
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多