webm dash 编码...正确的 ffmpeg 参数是什么?

webm dash encoding... What are the correct ffmpeg parameters?

我对将视频编码成符合 dash 的格式感到困惑。我要从 .mp4 转换为 .webm

首先,我是运行 OS X和ffmpeg 2.5.4.

这是我在测试中使用的编码命令(我从 here 获得):

ffmpeg -i IMG_0113.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 25k -g 1 -tile-columns 4 -frame-parallel 1 -an -f webm -dash 1 video_160x90_25k.webm

ffmpeg -i IMG_0113.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 50k -g 1 -tile-columns 4 -frame-parallel 1 -an -f webm -dash 1 video_160x90_50k.webm

ffmpeg -i IMG_0113.mp4 -vn -acodec libvorbis -ab 128k  -dash 1 audio_128k.webm

ffmpeg -f webm_dash_manifest -i video_160x90_25k.webm -f webm_dash_manifest -i video_160x90_50k.webm -f webm_dash_manifest -i audio_128k.webm -c copy -map 0 -map 1 -map 2 -f webm_dash_manifest -adaptation_sets "id=0,streams=0,1 id=1,streams=2" manifest.mpd

其次,问题不在我的服务器上,因为我已经从 here 下载了示例,并且当从我的本地服务器提供时,它们在 dash.js 播放器上 100% 工作。

请那里的人能指出我正确的方向吗?或者提供用于使输出格式正确的 ffmpeg 命令示例。

谢谢, 院长

好的,开始吧,设法解决了这个问题。希望这会为其他人省去一些麻烦。

首先,这里是解决方法

第 1 步:(从视频中剥离音频,并创建单个音频文件)

ffmpeg -i IMG_0113.mp4 -c:v libvpx -s 160x90 -threads 4 -b:v 25k -tile-columns 4 -frame-parallel 1 -an -keyint_min 30 -g 30 -f webm video_160x90_25k.webm

ffmpeg -i IMG_0113.mp4 -c:v libvpx -s 160x90 -threads 4 -b:v 50k -tile-columns 4 -frame-parallel 1 -an -keyint_min 30 -g 30 -f webm video_160x90_50k.webm

ffmpeg -i IMG_0113.mp4 -vn -acodec libvorbis -ab 128k audio_128k.webm

第 2 步:(使用来自 libwebm 项目 available heresample_muxer 创建视频提示点)

mkvmuxer_sample -i video_160x90_25k.webm -o video_160x90_25k_cued.webm

mkvmuxer_sample -i video_160x90_50k.webm -o video_160x90_50k_cued.webm

第 3 步:(使用 ffmpeg 创建音频提示点)

ffmpeg -i audio_128k.webm -vn -acodec libvorbis -ab 128k -dash 1 audio_128k_cued.webm

第 4 步:(使用 ffmpeg 创建 webm dash 清单文件 .mpd

ffmpeg -f webm_dash_manifest -i video_160x90_25k_cued.webm -f webm_dash_manifest -i video_160x90_50k_cued.webm -f webm_dash_manifest -i audio_128k_cued.webm -c copy -map 0 -map 1 -map 2 -f webm_dash_manifest -adaptation_sets "id=0,streams=0,1 id=1,streams=2" manifest.mpd

其次,这里解释一下

ffmpeg(至少我的版本)没有在视频文件中正确创建提示点(添加 -dash 1 时)参数。我通过探测视频文件和了解 webm 文件格式来确定这一点(read this,如果您想了解更多)。

然后我从 reading this page 中偶然发现了 sample_muxer,并决定看看它是否能更好地处理 ffmpeg 不正确的视频提示点。哇哇哇,它做到了!

我注意到从 ffmpeg 中提取的音频文件中的提示点(使用 -dash 1 参数)正在正确创建!

webm dash 清单的 ffmpeg 生成也运行良好!

为了播放视频,我发现 shaka-player 效果最好,但我无法使用它,因为我需要从 cefpython 容器播放视频,而 shaka-player 不能在最新的 cef(chromium 嵌入式框架)上运行包含在 cefpython 版本中。

然后我根据 this helpful site from google

编写了自己的播放器

无论如何,希望这对某人有所帮助

我有类似的问题。当我使用 ffmpeg v3.4.2 将 mpeg2 转换为 vp9 时,输出视频无法在 VLC 播放器中搜索(搜索需要很长时间)。当我尝试 ffmpeg v4.0.2 时,可以在 VLC 播放器中搜索该视频。看来,它已在 ffmpeg v4.0.2

中修复