Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html Videojs不播放转换后的mp4文件_Html_Video_Ffmpeg - Fatal编程技术网

Html Videojs不播放转换后的mp4文件

Html Videojs不播放转换后的mp4文件,html,video,ffmpeg,Html,Video,Ffmpeg,我正在为上传到的视频文件创建一个平台。为了让它们通过Videojs播放,我将/demux mkv/flv/3gp文件转换为mp4文件 我遇到的问题是,如果对此类视频/mkv文件进行解复用,则会收到错误消息视频格式或mime类型不受支持,即使它在我的计算机上是一个“工作”mp4文件 我想我理解mkv文件是容器,如果解组,它将保持相同的视频和音频编解码器,如果Videojs/HTML5不支持,视频将无法播放。如果我错了,请纠正我 有人能告诉我为什么mkv.mkv到mkv.mp4的解复用不能在我的浏览

我正在为上传到的视频文件创建一个平台。为了让它们通过Videojs播放,我将/demux mkv/flv/3gp文件转换为mp4文件

我遇到的问题是,如果对此类视频/mkv文件进行解复用,则会收到错误消息
视频格式或mime类型不受支持
,即使它在我的计算机上是一个“工作”mp4文件

我想我理解mkv文件是容器,如果解组,它将保持相同的视频和音频编解码器,如果Videojs/HTML5不支持,视频将无法播放。如果我错了,请纠正我

有人能告诉我为什么mkv.mkv到mkv.mp4的解复用不能在我的浏览器中播放吗

➜  ~ ffmpeg -i mkv.mkv -vcodec copy -acodec copy mkv.mp4
ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.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. 34.100 / 55. 34.100
  libavcodec     57. 64.101 / 57. 64.101
  libavformat    57. 56.100 / 57. 56.100
  libavdevice    57.  1.100 / 57.  1.100
  libavfilter     6. 65.100 /  6. 65.100
  libavresample   3.  1.  0 /  3.  1.  0
  libswscale      4.  2.100 /  4.  2.100
  libswresample   2.  3.100 /  2.  3.100
  libpostproc    54.  1.100 / 54.  1.100
Input #0, matroska,webm, from 'mkv.mkv':
  Metadata:
    ENCODER         : Lavf53.24.2
  Duration: 00:00:34.08, start: -1.400000, bitrate: 1232 kb/s
    Stream #0:0: Video: mpeg4 (Simple Profile), yuv420p, 720x480 [SAR 1:1 DAR 3:2], 25 fps, 25 tbr, 1k tbn, 25 tbc (default)
    Stream #0:1: Audio: aac (LC), 48000 Hz, 5.1, fltp (default)
Output #0, mp4, to 'mkv.mp4':
  Metadata:
    encoder         : Lavf57.56.100
    Stream #0:0: Video: mpeg4 (Simple Profile) ( [0][0][0] / 0x0020), yuv420p, 720x480 [SAR 1:1 DAR 3:2], q=2-31, 25 fps, 25 tbr, 16k tbn, 1k tbc (default)
    Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, 5.1 (default)
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  887 fps=0.0 q=-1.0 Lsize=    5130kB time=00:00:35.45 bitrate=1185.4kbits/s speed= 668x
video:3447kB audio:1663kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.401607%

已经谢谢你的帮助了。我似乎找不到答案…

您缺少-movflags+faststart

此参数移动播放机尽快开始播放文件所需的信息。否则,文件必须在启动前完全下载

命令:

ffmpeg -i mkv.mkv -vcodec copy -acodec copy -movflags +faststart mkv.mp4

正如评论中提到的那样,您正在对MPEG-4第2部分视频进行多路复用,但您的浏览器不支持这种功能。您需要重新编码到H.264:

ffmpeg -i input -c:v libx264 -c:a copy -movflags +faststart output.mp4
  • -movflags+faststart
    用于重新定位某些数据,以便开始播放,而无需事先完全下载文件

  • 如果您的设备或浏览器不支持5.1声道,请使用
    -ac 2
    将其混音到立体声

  • 此外,可能必须添加
    -profile:v
    -level
    ,这取决于您是否需要支持旧设备


有关控制质量和兼容性的详细信息,请参阅。

我将根据此ffmpeg用法强制使用特定编码(h264)-感谢您的提示。非常有用的信息,特别是faststart!当前的编解码器是MPEG-4第2部分。可能不受支持。使用
-vcodec libx264
切换到H.264。输入是MPEG-4第2部分视频,重新多路复用将无法工作,因为浏览器不支持该格式,因此必须将其重新编码为受支持的格式,如H.264。是的,上帝,你完全正确。该文件必须重新编码。