如何结合 WebM 和 Opus 生成 MP4?

如何结合 WebM 和 Opus 生成 MP4?

我正在使用以下命令但它给出了错误的输出。

ffmpeg -i video.webm -i audio.opus -c:v copy -c:a aac -strict experimental output.mp4

输出:

ffmpeg version 1.2.6-7:1.2.6-1~trusty1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr 26 2014 18:52:58 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --arch=amd64 --disable-stripping --enable-avresample --enable-pthreads --enable-runtime-cpudetect --extra-version='7:1.2.6-1~trusty1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    53.  5.103 / 53.  5.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, matroska,webm, from 'video.webm':
  Duration: 00:00:04.92, start: 0.000000, bitrate: 243 kb/s
    Stream #0:0: Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 18 fps, 18 tbr, 1k tbn, 1k tbc (default)
Input #1, ogg, from 'audio.opus':
  Duration: 00:00:05.16, start: 0.000000, bitrate: 32 kb/s
    Stream #1:0: Audio: opus, 48000 Hz, stereo, s16
[mp4 @ 0x647940] track 0: could not find tag, codec not currently supported in container
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf54.63.104
    Stream #0:0: Video: vp8, yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=2-31, 18 fps, 90k tbn, 1k tbc (default)
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (libopus -> aac)
Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted

答案1

WebM 容器通常包含 VP8 或 VP9 视频。然而,MP4 容器格式至少不支持 VP8 或 VP9 视频根据登记机关

在您的命令中,您尝试复制视频比特流,但显然它会失败:

编解码器当前不受容器支持

您有两个选择:

  1. 使用将视频重新编码为 H.264 -c:v libx264
  2. 选择另一个输出容器,如 Matroska ( .mkv),但请注意,这与 HTML5 视频不兼容。

另请参阅有关支持的 HTML 视频格式的 MDN 参考超级用户发布了一篇关于如何将视频转换为 HTML5 格式的文章:我需要哪些 ffmpeg 脚本才能获得与 HTML5 兼容的“人人享有的视频”?

答案2

ffmpeg -i video.webm -i audio.opus -c:v copy -c:a aac -strict experimental output.mp4

它看起来应该是这样的。

ffmpeg -i audio.opus -i vid.webm  -c:v copy -c:a opus -strict experimental output6.webm

用 opus 替换 aac 并将两个文件替换为 opus 在前面(我认为),它应该可以工作。

答案3

带有复制选项的简单命令无法将 webm 转换为 mp4,因为编解码器存在差异,而我们在转换过程中不会触及该差异。这就像简单地更改输入文件的扩展名一样。要确保输出在 H.264 播放器/电视中播放,请使用

ffmpeg -y -i "input_video.webm" -i "input_audio.webm" "output_file.mp4"  -c:v libx264 -c:a aac

请注意,执行速度会非常慢,并且会-preset veryfast根据您的质量需求而增加。参考:https://addpipe.com/blog/converting-webm-to-mp4-with-ffmpeg/

相关内容