【问题标题】:AVI to MP4 - ffmpeg conversionAVI 到 MP4 - ffmpeg 转换
【发布时间】:2014-07-12 17:05:19
【问题描述】:

我正在运行安装了 ffmpeg-2.2 的 debian 7.5 机器,在 these instructions 之后安装

问题

我正在尝试在我的浏览器中显示一个 mp4 视频。原始文件具有 AVI 容器格式。我可以成功地将其转换为 mp4 并且目标文件可以使用图腾电影播放器​​读取(视频 + 声音)。所以我认为显示下面的页面一切都会好起来的

HTML5 网页

<!DOCTYPE html><html>
<head>
    <title>Webcam</title>
</head>
<body>
<video width="640" height="480" controls>
  <source src="/path/to/output.mp4" type="video/mp4">
<h3>Your browser does not support the video tag</h3>
</video>
</body></html>

输入探针

$ ffprobe -show_streams input.avi

  Duration: 00:08:22.90, start: 0.000000, bitrate: 1943 kb/s
    Stream #0:0: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16p, 64 kb/s
    Stream #0:1: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x540 [SAR 1:1 DAR 4:3], 1870 kb/s, 29.97 fps, 25 tbr, 29.97 tbn, 25 tbc

转换

$ ffmpeg -y -fflags +genpts -i input.avi -acodec copy -vcodec copy ouput.mp4

HTML浏览器

打开上面的html文件有声音但没有视频显示。

当我使用其他 .mp4 文件时,视频会成功显示,所以我确定我遇到了转换问题。

不是:我尝试了很多其他 ffmpeg 选项,但都没有成功。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 你当然是对的,但我的目标是将 ffmpeg 与 python ffmpegwrapper 0.1-dev 一起使用,我需要找出符合我主要需求的通用 ffmgeg 设置

标签: html video ffmpeg


【解决方案1】:

我建议使用 WebM 格式而不是 MP4。如果你看here,似乎 WebM 是一个很好的兼容性选择。

其实我自己也做过类似的测试

<!DOCTYPE html><html>
<head>
    <title>Play a file</title>
</head>
<body>
<video width="640" height="480" controls>
  <source src="vid/output.webm" type="video/webm">
<h3>Your browser does not support the video tag</h3>
</video>

<video width="640" height="480" controls>
  <source src="vid/output.mp4" type="video/mp4">
<h3>Your browser does not support the video tag</h3>
</video>

</body></html>

而且我使用的是通过以下方式转换的视频:

  • ffmpeg -i F:\Videos\bbb_1sec.ts ./vid/output.mp4 和
  • ffmpeg -i F:\Videos\bbb_1sec.ts ./vid/output.webm

在 Firefox 29 下无法播放 MP4 视频...但 WebM 版本可以

另一方面,由于转码为 VP8/vorbis,转换需要更多时间。 但是您复制(transmux)到 mp4 文件中的输入视频流可能不符合规范(视频:mpeg4(高级简单配置文件)(XVID / 0x44495658)

【讨论】:

    【解决方案2】:

    您的命令是 stream copying(重新混合)MPEG-4 Part 2 视频到 MP4 容器中,但这种格式可能无法由浏览器播放。您应该使用 H.264 视频代替 MP4 容器:

    ffmpeg -i input.avi -c:v libx264 <... more options ...> -c:a libfaac \
    -movflags +faststart output.mp4
    

    -movflags +faststart 将允许视频在观看者完全下载文件之前开始播放。

    请注意,您可以指定多个替代媒体资源以实现兼容性:

    <video width="640" height="480" controls>
      <source src="/path/to/output.mp4" type="video/mp4">
      <source src="/path/to/output.webm" type="video/webm">
      <source src="/path/to/output.ogv" type="video/ogg">
      ...
    </video>
    

    另见:

    【讨论】:

    • 您好,Igor,我发现在简化客户端视频显示方面存在细微差别:对于 .webm 编码:ffmpeg -y -i input.avi -c:v libvpx -c: a libvorbis -minrate 512K -maxrate 512K -b:v 512K -f webm output.webm 和 .mp4 编码:ffmpeg -y -i input.avi -c:v libx264 -preset slow -crf 18 -c:a libmp3lame - b:a 128k -f mp4 输出.mp4。对于后者,我使用 MP 音频编解码器而不是 AAC 编解码器
    • 如果有兴趣,我已经写了一份备忘录,总结了我在互联网上找到的关于这个主题的信息。它托管在我的服务器上:wiki.hznteam.fr/trac-bubble/wiki/FfmpegInstallation
    • @EmmanuelBrunet 我在这个答案中添加了一些额外的信息。你不应该使用-minrate。请参阅答案中的 VPx 链接。
    • 感谢您的建议 LordNeckbeard,您能解释一下为什么不应该设置 lin-rate 吗?老实说,我真的不明白它是如何工作的......
    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 2013-03-24
    • 2019-02-18
    • 1970-01-01
    • 2018-12-05
    • 2015-08-20
    • 2017-05-21
    • 1970-01-01
    相关资源
    最近更新 更多