代码之家  ›  专栏  ›  技术社区  ›  Dean

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

  •  3
  • Dean  · 技术社区  · 10 年前

    我很难将视频编码成符合破折号的格式。我要从.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命令示例。

    谢谢 院长

    2 回复  |  直到 9 年前
        1
  •  17
  •   frfernandezdev    5 年前

    好了,这里,设法解决了这个问题。希望这能为其他人省去一些麻烦。

    首先 ,这是解决方案。

    步骤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 here ,以创建视频提示点)

    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(至少我的版本)在视频文件中没有正确创建提示点(当添加-dash1参数时)。我通过探查视频文件和了解webm文件格式来确定这一点( read this ,如果您想了解更多)。

    然后我偶然发现了来自 reading this page ,并决定看看它是否能更好地处理ffmpeg不正确的视频提示点。喔喔,真的!

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

    webm-dash清单的ffmpeg生成也很好地工作!

    为了回放视频,我发现shaka播放器工作得最好,但我无法使用它,因为我需要从cefpython容器中播放视频,而shaka播放器在cefpythn版本中包含的最新cef(铬嵌入框架)上无法工作。

    然后我根据 this helpful site from google

    无论如何,希望这能帮助到某人

        2
  •  0
  •   Matho    6 年前

    我也有类似的问题。当我用ffmpeg v3.4.2将mpeg2转换为vp9时,在VLC播放器中找不到输出视频(查找需要很长时间)。当我尝试ffmpeg v4.0.2时,视频可以在VLC播放器中找到。看起来,它在ffmpeg v4.0.2中是固定的