【问题标题】:Lost video when converting from MKV to MP4 with FFMPEG使用 FFMPEG 从 MKV 转换为 MP4 时丢失视频
【发布时间】:2022-12-25 21:41:55
【问题描述】:

我试图想出一个强大的脚本来处理所有 MKV -> MP4 视频转换。

我发现的经典示例是ffmpeg -i input.mkv -codec copy output.mp4。这适用于大多数视频,但我发现某些视频的视频流丢失了。使用-map 0 没有帮助,我使用的示例只有一个视频流和一个音频流。

如果我只复制音频编解码器,它似乎工作正常,但需要更长的时间,因为视频被重新编码。为此,我使用ffmpeg -i input.mkv -c:a copy output.mp4。我可以将它用于某些视频,但我不确定如何确定是否需要视频重新编码(因为我想尽可能避免它)。

这是我运行第一个命令并丢失视频时得到的输出:

% ffmpeg -i input.mkv -codec copy output.mp4

ffmpeg version N-103075-g4c694093be-tessus  https://evermeet.cx/ffmpeg/  Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
  libavutil      57.  2.100 / 57.  2.100
  libavcodec     59.  3.102 / 59.  3.102
  libavformat    59.  4.101 / 59.  4.101
  libavdevice    59.  0.100 / 59.  0.100
  libavfilter     8.  1.103 /  8.  1.103
  libswscale      6.  0.100 /  6.  0.100
  libswresample   4.  0.100 /  4.  0.100
  libpostproc    56.  0.100 / 56.  0.100
Input #0, matroska,webm, from 'input.mkv':
  Metadata:
    CREATION_TIME   :
    ENCODER         : Lavf55.12.0
  Duration: 00:59:15.97, start: 0.062000, bitrate: 1892 kb/s
  Stream #0:0: Video: hevc (Main), yuv420p(tv, bt709), 1912x1072 [SAR 1:1 DAR 239:134], 23.98 fps, 23.98 tbr, 1k tbn (default)
  Stream #0:1(eng): Audio: aac (LC), 48000 Hz, 5.1, fltp (default)
    Metadata:
      title           : Surround
      LANGUAGE        : eng
  Stream #0:2(eng): Subtitle: ass (default)
  Stream #0:3(eng): Subtitle: ass
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf59.4.101
  Stream #0:0: Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv, bt709), 1912x1072 [SAR 1:1 DAR 239:134], q=2-31, 23.98 fps, 23.98 tbr, 16k tbn (default)
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp (default)
    Metadata:
      title           : Surround
      LANGUAGE        : eng
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=32634 fps=0.0 q=-1.0 size=  295424kB time=00:22:41.04 bitrate=1778.1kbits/s speed=2.72e+03x frame=63776 fps=63775 q=-1.0 size=  611840kB time=00:44:19.94 bitrate=1884.3kbits/s speed=2.66e+03frame=85256 fps=62686 q=-1.0 Lsize=  822207kB time=00:59:15.83 bitrate=1894.2kbits/s speed=2.61e+03x
video:736136kB audio:83404kB subtitle:0kB other streams:0kB global headers:1kB muxing overhead: 0.325361%

【问题讨论】:

    标签: video ffmpeg mp4 mkv


    【解决方案1】:

    你试过ffmpeg -i input.mkv -vcodec copy -acodec copy -scodec mov_text output.mp4了吗?

    请注意,Quicktime 不支持所有常见格式。如果视频在 VLC.app 中有效但在 Quicktime 中无效,那么您需要将其转换为 Quicktime 支持的格式。

    【讨论】:

    • 是的,我有,同样的问题发生。这里唯一的区别是字幕被重新编码,但我的问题是我丢失了整个视频(用 Quicktime 打开视频)。
    • 用 VLC 打开确实有效!不幸的是,这个脚本将被用户用来自己转换视频,所以我们希望能够支持 Quicktime 的使用。我假设 VLC 正在做一些 Quicktime 无法做到的事情?
    • Quicktime 不支持 h.265/hevc(根据谷歌搜索)。因此,您必须重新编码视频才能在 QuitckTime 中播放。
    • @kesh Ahhh 有道理,谢谢你解决了这个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多