如何混用MKV和MKA文件并使其在浏览器中播放? [英] How can I mux a MKV and MKA file and get it to play in a browser?

查看:233
本文介绍了如何混用MKV和MKA文件并使其在浏览器中播放?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用ffmpeg将.mkv和.mka文件合并为.mp4文件.我当前的命令如下所示:

I'm using ffmpeg to merge .mkv and .mka files into .mp4 files. My current command looks like this:

ffmpeg -i video.mkv -i audio.mka output_path.mp4

音频和视频文件是Amazon S3的预签名URL.即使在具有足够资源的服务器上,此过程也会非常缓慢.我研究了可以告诉ffmpeg跳过每个帧重新编码的情况,但是我认为在我的情况下,实际上确实需要重新编码每个帧.

The audio and video files are pre-signed urls from Amazon S3. Even on a server with sufficient resources, this process is going very slowly. I've researched situations where you can tell ffmpeg to skip re-encoding each frame, but I think that in my situation it actually does need to re-encode each frame.

我已经将2个示例文件下载到了我的macbook pro,并通过自制软件在本地安装了ffmpeg.当我运行命令

I've downloaded 2 sample files to my macbook pro and have installed ffmpeg locally via homebrew. When I run the command

ffmpeg -i video.mkv -i audio.mka -c copy output.mp4

我得到以下输出:

ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
  built with Apple LLVM version 8.1.0 (clang-802.0.42)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
  libavutil      55. 58.100 / 55. 58.100
  libavcodec     57. 89.100 / 57. 89.100
  libavformat    57. 71.100 / 57. 71.100
  libavdevice    57.  6.100 / 57.  6.100
  libavfilter     6. 82.100 /  6. 82.100
  libavresample   3.  5.  0 /  3.  5.  0
  libswscale      4.  6.100 /  4.  6.100
  libswresample   2.  7.100 /  2.  7.100
  libpostproc    54.  5.100 / 54.  5.100
Input #0, matroska,webm, from '319_audio_1498590673766.mka':
  Metadata:
    encoder         : GStreamer matroskamux version 1.8.1.1
    creation_time   : 2017-06-27T19:10:58.000000Z
  Duration: 00:00:03.53, start: 2.831000, bitrate: 50 kb/s
    Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
    Metadata:
      title           : Audio
Input #1, matroska,webm, from '319_video_1498590673766.mkv':
  Metadata:
    encoder         : GStreamer matroskamux version 1.8.1.1
    creation_time   : 2017-06-27T19:10:58.000000Z
  Duration: 00:00:03.97, start: 2.851000, bitrate: 224 kb/s
    Stream #1:0(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1 DAR 4:3, 30 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      title           : Video
[mp4 @ 0x7fa4f0806800] Could not find tag for codec vp8 in stream #0, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
  Stream #1:0 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (copy)
    Last message repeated 1 times

因此,看来我正在使用的特定编码是vp8视频和opus音频文件,我认为它们与.mp4输出容器不兼容.我希望能得到涵盖将vp8和opus最佳地合并到.mp4输出中的方式的答案,或者使我朝着与vp8& amp;兼容的输出媒体格式的方向指出的答案.作品,并且可以在网络和移动设备上播放,因此我可以完全绕过重新编码步骤.

So it appears that the specific encodings I'm working with are vp8 videos and opus audio files, which I believe are incompatible with the .mp4 output container. I would appreciate answers that cover ways of optimally merging vp8 and opus into .mp4 output or answers that point me in the direction of output media formats that are both compatible with vp8 & opus and are playable on web and mobile devices so that I can bypass the re-encoding step altogether.

仅在遵循LordNeckbeard的建议后提供基准:

Just wanted to provide a benchmark after following LordNeckbeard's advice:

4 min 41 second video transcoded locally on my mac

LordNeckbeard’s approach : 15 mins 55 seconds (955 seconds)
Current approach : 18 mins 49 seconds (1129 seconds)

18% speed increase

推荐答案

您可以使用ffmpeg将MKV和MKA多路复用和/或重新编码为与Web浏览器兼容的格式,例如Webm或MP4.

You can use ffmpeg to mux and/or re-encode MKV and MKA into web browser compatible formats such as Webm or MP4.

如果您输入的是VP8或VP9视频以及Vorbis或Opus音频,例如问题中的输入,则可以将其混入Webm.这应该很快,因为它不会重新编码:

You can just mux into Webm if your inputs are VP8 or VP9 video and Vorbis or Opus audio, such as the inputs in your question. This should be fast because it will not re-encode:

ffmpeg -i video.mkv -i audio.mka -c copy output.webm

默认流选择行为是为每种流类型选择一个流,因此使用-map您可以告诉它选择哪些流以防止错误.例如,如果两个输入都包含多个流,但是您只想来自video.mkv的第一个视频流和来自audio.mka的第一个音频流:

Default stream selection behavior is to select one stream per stream type, so with -map you can tell it which streams to choose to prevent mistakes. For example, if both inputs contain multiple streams, but you only want to first video stream from video.mkv and the first audio stream from audio.mka:

ffmpeg -i video.mkv -i audio.mka -map 0:v:0 -map 1:a:0 -c copy -movflags +faststart output.webm

MP4多路复用器:如果输入格式是H.264/H.265视频和AAC音频

ffmpeg -i video.mkv -i audio.mka -c copy -movflags +faststart output.mp4

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆