当前位置: 首页 > 知识库问答 >
问题:

使用ffmpeg向破折号清单(mpd)添加多个音轨和字幕

沙海
2023-03-14

我正在尝试创建一个网站来播放一些视频。对于每一个视频,我在3个不同的文件夹中提取视频、音频和字幕。碰巧一个视频有多个音轨和多个字幕。我做了很多研究,但我不知道如何将它们全部添加到清单中。现在,我使用以下命令:

ffmpeg -f webm_dash_manifest \
-i video1.mp4 -f webm_dash_manifest \
-i video2.mp4 -f webm_dash_manifest \
-i audio1.webm -f webm_dash_manifest \
-i audio2.webm -f webm_dash_manifest \
-i subtitles.vtt \
-c copy -map 0 -map 1 -map 2 -map 3 \
-f webm_dash_manifest -adaptation_sets "id=0,streams=v id=1,streams=a" manifest.mpd

我的两个视频有不同的分辨率和比特率,而且效果非常好。但我没有任何字幕,我的两个音轨被认为是同一个音轨,有两个不同的比特率(就像视频)。我想我应该有很多改编集,但我不知道如何制作它们。

如何以正确的方式创建清单?

共有1个答案

别子实
2023-03-14

几天后,我找到了解决办法。

我的目标是将视频转换成mpeg dash内容,这对于流媒体来说非常棒。

我将视频编码到h264,音频编码到aac,字幕编码到webvtt。这是一个大浏览器兼容性的好设置。vp9也很好,但对我来说太长了。

所需工具:

  • ffmpeg:https://www.ffmpeg.org/download.html

假设我们有一个1080p视频文件“video.mkv”,其中包含以下流:

  • 0:视频流

我提取视频流并将其转换为不同的分辨率和比特率:

ffmpeg -i video.mkv -an -sn -c:0 libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 5300k -maxrate 5300k -bufsize 2650k -vf 'scale=-1:1080' tmp/video/video-1080.mp4

ffmpeg -i video.mkv -an -sn -c:0 libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 2400k -maxrate 2400k -bufsize 1200k -vf 'scale=-1:720' tmp/video/video-720.mp4

ffmpeg -i video.mkv -an -sn -c:0 libx264 -x264opts 'keyint=24:min-keyint=24:no-scenecut' -b:v 600k -maxrate 600k -bufsize 300k -vf 'scale=-1:360' tmp/video/video-360.mp4
ffmpeg -i video.mkv -map 0:1 -ac 2 -ab 192k -vn -sn tmp/audio/audio-it.mp4

ffmpeg -i video.mkv -map 0:2 -ac 2 -ab 192k -vn -sn tmp/audio/audio-en.mp4
ffmpeg -i video.mkv -map 0:3 -vn -an tmp/subtitle/subtitle-it.vtt
ffmpeg -i video.mkv -map 0:4 -vn -an tmp/subtitle/subtitle-en.vtt

您可以使用“-loglevel警告”选项查看更少的信息。

mp4fragment tmp/video/video-1080.mp4 tmp/video/f-video-1080.mp4
mp4fragment tmp/video/video-720.mp4 tmp/video/f-video-720.mp4
mp4fragment tmp/video/video-360.mp4 tmp/video/f-video-360.mp4
mp4fragment tmp/audio/audio-it.mp4 tmp/audio/f-audio-it.mp4
mp4fragment tmp/audio/audio-en.mp4 tmp/audio/f-audio-en.mp4
mp4dash --mpd-name=manifest.mpd tmp/video/f-video-1080.mp4 tmp/video/f-video-720.mp4 tmp/video/f-video-360.mp4 tmp/audio/f-audio-it.mp4 tmp/audio/f-audio-en.mp4 \[+format=webvtt,+language=it\]tmp/subtitle/subtitle-it.vtt \[+format=webvtt,+language=en\]tmp/subtitle/subtitle-en.vtt

现在可以删除tmp文件夹

rm -rf tmp

(如果不再需要源文件,请提供源文件)

您现在有了可以流式传输的mpeg dash内容。您必须提供您的文件(允许cors和启用字节范围请求)。我使用angular和rx播放器作为播放器。我可以切换语言,字幕和视频质量是适应客户的带宽!

Rx-player:https://github.com/canalplus/rx-player

 类似资料:
  • 我有两个视频文件,具有以下流: 文件1: 文件2: 两个文件都有完全相同的视频内容,但第一个视频有德语音轨,第二个视频有英语音轨。 如何从德语视频文件中提取音轨并将其添加到英语视频文件中,而不丢失英语字幕,并能够在媒体播放器中在这些音轨之间进行选择? 我对此进行了搜索,我找到了类似问题的多个答案,但都不起作用:有些只包含一个音轨,有些同时播放两个音轨。 我不确定这个问题是否应该在Super Use

  • 如何在代码级创建MPEG Dash(mpd)文件。我找不到一个办法。最好有一个节点js示例。我可以在命令行中完成。我使用了MP4Box工具,但我需要在我的node js应用程序中使用它。

  • 可以设置文本样式,以便在出现换行符之前添加破折号。 示例: Lorem ipsum dolor坐在那里,奉献给我们,我们的工作和伟大的礼物。我们的服务,我们的服务-------------------------------------------------------- 我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,圣骑士-------------------------------

  • 问题内容: 我开始学习一些JavaScript,并且了解在命名标识符时不允许使用破折号。但是,在CSS中,ID和类通常使用破折号。 在CSS中使用破折号是否会干扰javascript交互?例如,如果我要使用。我已经尝试了一些使用getElementByID并将破折号作为div ID的名称的示例,并且它可以工作,但是我不确定在所有其他情况下是否都是这种情况。 问题答案: 在ID(或类名,如果您选择的

  • 所以信用卡号码有效的条件之一是“前4位数字之和必须比后4位数字之和少1”,我相信问题可能是它把破折号算作一个数字,但不确定。规则4是所有数字的和必须被4整除,这似乎有效,但规则5不是。 对不起,我对编码很陌生。

  • 我是Dash的新手,在尝试基于范围滑块的范围/值进行可视化筛选时遇到了一些问题。我已经附加了我下面使用的代码块,但我似乎无法开始工作。我已经看了留档,但不知道这个问题是否与RangeSliders有关,或者只是我如何尝试通过“和”命令过滤数据框。