49

我在这里和谷歌上到处找 - 没有适用于 IE9 的有效命令。IE9 缺少一些东西。我尝试过的所有方法在其他任何地方都有效:chrome、safari、移动设备等...我想要一个可以转换它的命令,我可以在每台设备上使用它,假设支持 HTML5 视频标签中的 mp4。

我使用这个命令:

ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4
ffmpeg -i movie.mov -vcodec libx264 -vprofile high -preset slow -b:v 500k -maxrate 500k -bufsize 1000k -vf scale=-1:480 -threads 0 -acodec libvo_aacenc -b:a 128k -pix_fmt yuv420p outa.mp4
ffmpeg -i movie.mov -b:V 1500k -vcodec libx264 -preset fast -g 30 adel.mp4
ffmpeg -i movie.mov -acodec aac -strict experimental -ac 2 -ab 160k -vcodec libx264 -preset slow -f mp4 -crf 22 lamlam.mp4
ffmpeg -i movie.mov -acodec aac -strict experimental -ac 2 -ab 160k -vcodec libx264 -preset slow -profile:v baseline -level 30 -maxrate 10000000 -bufsize 10000000 -f mp4 -threads 0 adiel.mp4

等等..所有这些命令再次生成一个有效的 mp4 文件,该文件适用于 chrome、safari 等......甚至当我使用窗口媒体播放器在 windows 本身中启动它们时也可以工作。当我将此文件放在 IE9 中的视频标签中时(我使用的是http://videojs.com/),它不起作用!

<div class="vidoco-content" style="margin-top: 20px;">
<video id="divVid" class="video-js vjs-default-skin vidoco-center" controls preload="none" width="600" height="400" poster="<?php echo(DOMAIN); ?>static/test.jpg">
    <source src="<?php echo(DOMAIN); ?>static/out.mp4" type="video/mp4" />
</video>

如果我使用软件miro 视频转换器将相同的 mov 文件转换为 mp4 - 它转换得很好,我可以在 IE9 中播放它!miro 转换器也在其中使用嵌入的 ffmpeg,所以我确信它只是正确的 ffmpeg 命令和参数的一米。在我的 apache htaccess 中,我为我的文件设置了正确的 mime 类型,并且在查看 IE 开发人员工具时发现它确实是正确的:

AddType audio/aac .aac
AddType audio/mp4 .mp4 .m4a
AddType audio/mpeg .mp1 .mp2 .mp3 .mpg .mpeg
AddType audio/ogg .oga .ogg
AddType audio/wav .wav
AddType audio/webm .webm

AddType video/mp4 .mp4 .m4v
AddType video/ogg .ogv
AddType video/webm .webm

我为此苦苦挣扎了很长时间,因此将不胜感激。

谢谢!

4

6 回答 6

93

对于ffmpeg

ffmpeg -i {input}.mov -vcodec h264 -acodec aac -strict -2 {output}.mp4

您还可以添加-q:v/-q:a参数来指定视频的质量。您也可以使用比 ffmpeg 更简单的编码器 HandBrake。

对于HandBrake

handbrakecli -i {input}.mov -e x264 -E facc -o {output}.mp4

 

编辑:我找到了解决方案!这是一个带有工作演示的 ZIP,我在 IE 9 和 Firefox 上测试过!

http://www.mediafire.com/download/kyavlpudybg0bc1/HTML5_video.zip

另外,上面的演示有一个闪退,所以它应该可以在 IE8 和更低版本上运行。

使用相同ffmpeg的命令。
编辑:我不得不重新上传视频,因为我的托管服务暂时停止了。现在它托管在 mediafire 上。我发现它们是最好的文件共享服务。最少广告,无需注册,无需等待 30 秒。

 

另外,请查看 videojs 网站上的讨论:http: //help.videojs.com/discussions/problems/1020-ffmpeg-command-produce-your-demonstration-video

很重要!确保在本地运行时单击“允许活动内容”按钮以允许视频!

我遇到的问题和我的解决方案的视频:请参阅上面提到的我的演示。

测试时使用的 HTML 代码:

<!DOCTYPE html>
<html>
<body>

<video width="320" height="240" controls>
  <source src="movie.mp4" type="video/mp4">
  <source src="movie.ogg" type="video/ogg">
  Your browser does not support the video tag.
</video>

</body>
</html>

我分析了 w3schools 提供的工作测试视频(它适用于 IE),我发现他们使用 HandBrake 对视频进行编码。

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'movie.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    creation_time   : 2010-05-11 10:32:06
    encoder         : HandBrake 0.9.4 2009112300
  Duration: 00:00:12.61, start: 0.000000, bitrate: 202 kb/s
    Chapter #0.0: start 0.000000, end 12.612000
    Metadata:
      title           :
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 320x240, 80 kb/s, 29.65 fps, 29.97 tbr, 90k tbn, 59.31 tbc
    Metadata:
      creation_time   : 2010-05-11 10:32:06
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 115 kb/s
    Metadata:
      creation_time   : 2010-05-11 10:32:06
    Stream #0:2(und): Subtitle: mov_text (text / 0x74786574)
    Metadata:
      creation_time   : 2010-05-11 10:32:06`
于 2013-03-29T00:13:39.470 回答
11

ffmpeg 的初级之旅


下载最新的 ffmpeg 及其预设 http://www.ffmpeg.org/download.html

按照说明在 Windows 中安装 Ffmpeg 二进制文件


指示:

  1. 从 arrozcru 自动构建页面获取最新构建
  2. 解压文件夹到 C:/Program Files/ffmpeg
  3. 将 C:/Program Files/ffmpeg/bin 添加到系统的 PATH 环境变量中

可选的 libx264 预设设置:

如果您使用 libx264 预设(通过使用 -vpre 标志),您需要进行以下设置。

  1. 为指向您的主目录的用户创建一个 HOME 环境变量。(例如对于 Vista/7/8 C:/Users/moose 或对于 XP C:/Documents and Settings/moose )
  2. 在你的主目录中创建一个 .ffmpeg 文件夹
  3. 将预设文件从 C:/Program Files/ffmpeg/share/*.ffpreset 复制到 %HOME%/.ffmpeg
  4. 现在您可以打开命令提示符并使用 ffmpeg。:D(例如这是我的 Vimeo 视频转换命令。ffmpeg -i input.mov -vcodec libx264 -vpre hq -crf 24 -g 25 -acodec libmp3lame -ab 192k -ar 44100 output.mp4)
    *注意:不包括 libfaac在构建中,因为 libfaac 被认为是一个非免费插件

记得在windows中设置HOME环境变量

  1. 复制环境变量文件夹下的预设
  2. 您需要使用以下命令来使用 ffmpeg 进行转换:

对于 mp4 (H.264 / ACC):

ffmpeg -i INPUTFILE -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 "OUTPUTFILE.mp4"

对于 webm (VP8 / Vorbis):

ffmpeg -i "INPUTFILE"  -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 "OUTPUTFILE.webm"

对于 ogv (Theora / Vorbis):

ffmpeg -i "INPUTFILE" -b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 "OUTPUTFILE.ogv"
于 2013-03-31T01:46:43.743 回答
4

从原始链接...

ffmpeg 0.6 及更高版本完全支持 WebM。在命令行上,不带参数运行 ffmpeg 并验证它是否使用 VP8 支持编译:

you@localhost$ ffmpeg
FFmpeg version SVN-r23197, Copyright (c) 2000-2010 the FFmpeg developers
built on May 19 2010 22:32:20 with gcc 4.4.3
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc 
--enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame 
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora 
--enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis 
--enable-libvpx

如果您没有看到“<code>--enable-libvorbis”和“<code>--enable-libvpx”这两个神奇的词,则说明您没有正确版本的 ffmpeg。(如果你自己编译了ffmpeg,请检查你是否安装了两个版本。没关系,它们不会相互冲突。你只需要使用支持VP8的ffmpeg版本的完整路径。)

我将进行两次编码。第 1 步只是扫描输入视频文件 (-i pr6.dv) 并将一些统计信息写入日志文件(将自动命名为 pr6.dv-0.log)。我使用 -vcodec 参数指定视频编解码器:

you@localhost$ ffmpeg -pass 1 -passlogfile pr6.dv -threads 16  -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx -b 614400 -s 320x240 -aspect 4:3 -an -y NUL

大多数 ffmpeg 命令行与 VP8 或 WebM 无关。libvpx 确实支持许多您可以传递给 ffmpeg 的特定于 VP8 的选项,但我还不知道它们中的任何一个是如何工作的。一旦我找到了对它们的一个很好的解释,我会在此处将其链接起来,并在值得这样做的情况下将它们合并到叙述中。

对于第二遍,ffmpeg 将读取它在第一遍中写入的统计信息,并实际进行视频和音频的编码。它将写出一个 .webm 文件。

you@localhost$ ffmpeg -pass 2 -passlogfile pr6.dv -threads 16  -keyint_min 0 -g 250 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx -b 614400 -s 320x240 -aspect 4:3 -acodec libvorbis -y pr6.webm

这里有五个重要参数:

  • -vcodec libvpx指定我们使用 VP8 视频编解码器进行编码。WebM 总是使用 VP8 视频。
  • -b 614400指定比特率。与其他格式不同,libvpx 期望比特率以实际比特为单位,而不是千比特。如果您想要 600 kbps 的视频,请将 600 乘以 1024 得到 614400。
  • -s 320x240指定目标尺寸,宽乘高。
  • -aspect 4:3指定视频的纵横比。标清视频通常是 4:3,但大多数高清视频是 16:9 或 16:10。在我的测试中,我发现我必须在命令行上明确指定这一点,而不是依靠 ffmpeg 来自动检测它。
  • -acodec libvorbis指定我们使用 Vorbis 音频编解码器进行编码。WebM 总是使用 Vorbis 音频。
于 2013-03-31T02:07:04.693 回答
2

我的问题是像素格式。

为我在 IE 中添加-pix_fmt yuv420p修复它。

于 2015-12-08T00:48:45.737 回答
1

I spent many hours trying to figure that one out. I finally found how to do this properly using avconv (or ffmpeg)

  1. Convert the video to MPEG4 using H.264 codec. You don't need anything fancy, just let avconv do the job for you:

    avconv -i video.mp4 -vcodec libx264 pre_out.mp4
    
  2. Move the file info to the file header, so the browser can start playing it as soon as it starts to download it. THIS IS THE KEY FOR IE9!!!

    qt-faststart pre_out.mp4 out.mp4
    

qt-faststart is a Quicktime utilities that also support H.264/ACC file format. It is part of libav-tools package.

于 2014-03-13T00:35:14.967 回答
0

前段时间有同样的问题,我以这种方式成功解决:

首先,下载最新版本的 ffmpeg(或者从官方 github 存储库(https://github.com/FFmpeg/FFmpeg)构建,如果您想进行一些实验)。

然后试试这个:

ffmpeg -i input.mov -c:v libx264 -c:a libfaac -strict experimental output.mp4

希望这会有所帮助!

于 2013-04-03T20:11:11.220 回答