问题标签 [mp4box]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mpeg-dash - 在 MP4Box 中为每个表示分离初始段
我正在尝试重现 BBC 的 AVC3 实验(http://rdmedia.bbc.co.uk/dash/ondemand/bbb/2/client_manifest-separate_init.mpd)并使用 MP4Box 生成 DASH MPD
- 具有avc3编解码器类型(即使用带内切换模式)
- 段模板
- 每个表示的单独的初始化段。
我无法使用以下命令行来实现这一点
我尝试了 -segment-name 的各种组合,但我没有成功。谁能指出我正确的方向?谢谢!
ffmpeg - 编辑 m4s 文件视频
在我的应用程序中,我将视频文件保存为 M4S 格式。我想为这些文件制作一个编辑选项,我的要求是在视频的特定点添加文本和图像。
我的第一个想法是为文本插入(使用jimp)生成照片,这非常容易。
现在我的目标是将单张照片制作为 m4s 文件。最好我想为该文件选择我自己的名称。
我怎样才能做到这一点?
流程应该是:
image.jpg -> 5.m4s
ffmpeg - 从 rtmp 到 DASH 的直播网络研讨会
我需要将基于 RTMP 的视频直播到网页,最终结果应该是动态和自适应的 (DASH)。
下面的 FFMPEG 命令适用于单流,但它不是自适应/没有低高选择选项。
ffmpeg -i rtmp://source.mysite.com/live/9 temp/manifest.mpd
我需要单个 DASH 清单中的 1080p RTMP 输入和 240p、360p、480、720p 和 1080p 输出。
有人可以指导我如何在这里获得稳定/驯服的多比特率自适应结果吗?
video - 如何确定 mpeg-dash 中的分段持续时间?
我想将一些 h264 mp4 视频转换为 clearkey 加密破折号。现在我想在本地主机上为他们服务。所以我没有带宽限制。我假设我应该使用带有静态 mpd 的 dashavc264:onDemand 配置文件,因为我的视频没有直播并且它们处于离线状态。
我的问题是:
我应该如何决定我应该使用什么段持续时间?这是否取决于我的视频中出现关键帧的频率?它如何影响寻找/特技表演的表现?它会影响其他任何事情吗?
macos - 通过从应用程序包中复制 lib 意外地将 dylib 文件覆盖到 usr/local/lib
我覆盖了 /usr/local/bin/ 中的一些 dylib 文件,现在我在运行程序时遇到了问题。有没有办法恢复这些文件?
ffmpeg 程序对我来说运行良好。然后我安装了程序 GPAC 并执行了以下操作:
我这样做是因为它允许我从命令行运行 MP4Box,因为 /usr/local/lib/ 在 $PATH 中。
但是现在当我尝试跑步时
我收到此错误:
dyld:库未加载:/usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib 引用自:/usr/local/bin/ffmpeg 原因:库版本不兼容:ffmpeg 需要10.0.0 或更高版本,但 libSDL2-2.0.0.dylib 提供版本 5.0.0 中止陷阱:6
我认为发生的事情是:我将一些我不应该做的文件覆盖到 /usr/local/lib/ 中。在这种情况下,我使用 GPAC 应用程序包中的 5.0.0 版本覆盖了 10.0.0 版本的 libSDL2-2.0.0.dylib。
我曾尝试使用自制软件卸载并重新安装 ffmpeg,希望它会看到它需要更新我的 dylib 库。
但这会导致相同的错误。
这是我从 /Applications/GPAC.app/Contents/MacOS/lib/* 复制到 /usr/local/lib/ 的所有文件的列表
libSDL2-2.0.0.dylib libfreetype.6.dylib libplds4.dylib liba52.0.dylib libgpac.dylib libpng16.16.dylib libavcodec.58.dylib libjpeg.9.dylib libpostproc.55.dylib libavdevice.58.dylib liblzma。 5.dylib libssl.1.0.0.dylib libavfilter.7.dylib libmad.0.dylib libswresample.3.dylib libavformat.58.dylib libmozjs185.1.0.dylib libswscale.5.dylib libavresample.4.dylib libmp3lame.0.dylib libtheora.0.dylib libavutil.56.dylib libnspr4.dylib libvorbis.0.dylib libcrypto.1.0.0.dylib libogg.0.dylib libx264.152.dylib libfaad.2.dylib libplc4.dylib
ffmpeg - 将视频从 vp8 转换为 x264 输出具有不同长度的不同视频
我有一个持续时间为 2m:39s 的 webm 文件(vp8 编解码器)
使用 ffmpeg -i video.webm 它说视频有 15fps
nput #0, matroska,webm, from 'video.webm': Metadata: encoder : Lavf54.17.3 Duration: 00:02:39.63, start: 0.000000, bitrate: 417 kb/s Stream #0:0: Audio: vorbis, 44100 Hz、立体声、fltp(默认) 流 #0:1:视频:vp8、yuv420p(渐进式)、320x240、SAR 1:1 DAR 4:3、15 fps、15 tbr、1k tbn、1k tbc(默认)
我尝试将设置转换为相同的帧速率并添加到 mp4 容器
但是生成的文件 out.mp4 现在有 2m:57s 的持续时间
javascript - 使用 MP4box.js 和 onSegment 回调不被调用
基本问题:在浏览器中显示 H264 直播流。
解决方案:让我们将其转换为分段的 mp4 并通过 websocket(或 XHR)逐块加载到 MSE 中。
听起来太容易了。但我想用纯 JS 在客户端进行碎片化。
所以我正在尝试使用MP4Box.js。它在其自述页面上声明:它有一个演示:“一个执行即时碎片的播放器”。
这就是我需要的东西!
然而,应该提供 MSE 的 onSegment 回调根本不会被调用:
现在把它放到一个 HTML 文件中会在 JavaScript 控制台中产生这个结果:
但之后什么也没有发生。为什么这里没有调用 onSegment?(websocket-server 服务的 h264 文件可以在 VLC 中播放 - 但它不是碎片化的)
ffmpeg - 使用 FFmpeg 将 MP3 有声读物重新混合为 Apple 友好的 MP4 时的元数据
由于显然无法通过 ID3 标签或文件扩展名告诉 iTunes 或 iOS MP3 包含有声读物(或电台播放),我想将它们重新组合成带有文件扩展名的MPEG-4 Part 14.m4b
容器(无需转换,即转码或将音频流重新编码为 AAC)并设置正确的媒体类型标签(stik
= 2 Audiobook)。
从输出文件名自动检测预期格式时,FFmpeg(撰写本文时版本为 4.2.1)切换其-f ipod
兼容模式为.m4a
和.m4b
,这意味着它显然不会接受 MP4 容器中的 MPEG 1/2 第 3 层音频:
[ipod @ 00000223bd927e40]
在流 #0 中找不到编解码器 mp3 的标记,容器中当前不支持编解码器 无法
为输出文件 #0 写入标头(编解码器参数不正确?):参数无效
我可以覆盖它(或者在使用之后更改文件扩展名"outfile.mp4"
):
转换和 FFprobe 所需的时间接近于零,这让我确信重新混合是成功的:
不过,自定义 ID3v2 标记字段和没有已知 MP4 同源的标记字段已被删除。我想保存它们!
-map_metadata
如果可能的话,我该怎么做?
如何使用-metadata
添加必要的标签字段 (atom: stik
) 将文件标记为有声读物 - 更笼统地说:
如何使用 FFmpeg 添加手动指定的元数据标签字段(例如 MP4 atom 或 box)?
FFmpeg 文档
-metadata[:metadata_specifier]
key=value (output,per-metadata)
设置元数据键/值对。- …
-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)
从 infile 设置下一个输出文件的元数据信息。请注意,这些是文件索引(从零开始),而不是文件名。可选的 metadata_spec_in/out 参数指定要复制的元数据。元数据说明符可以具有以下形式:
g
全局元数据,即适用于整个文件的元数据s[:stream_spec]
每个流元数据。stream_spec 是流说明符,如流说明符一章中所述。在输入元数据说明符中,复制第一个匹配流。在输出元数据说明符中,所有匹配的流都被复制到。c:chapter_index
每章元数据。chapter_index 是从零开始的章节索引。p:program_index
每个程序的元数据。program_index 是从零开始的节目索引。如果省略元数据说明符,则默认为全局。
默认情况下,全局元数据从第一个输入文件复制,每个流和每个章节的元数据与流/章节一起复制。通过创建相关类型的任何映射来禁用这些默认映射。负文件索引可用于创建仅禁用自动复制的虚拟映射。
附言
- 苹果似乎没有正式文件
stik
。MPMediaType略有不同。相反的指针将不胜感激。 - 理想情况下,我想自动添加
*.mp3
子目录中的所有文件,按字母顺序排序(共享相同的编码器设置)作为单个.mp4
容器中的章节,但这可能值得一个单独的问题。
ffmpeg - 如何通过时间码将海报帧添加到 MP4 视频?
mvhd
原始 Quicktime MOV 格式的atom 或 box 支持poster time
时间码变量用作海报帧,可在预览场景中用作缩略图或封面图片。据我所知,基于 ISOBMFF 的 MP4 格式 (.m4v) 继承了此功能,但我找不到使用FFmpeg或MP4box或类似的跨平台 CLI 软件设置它的方法。编辑:实际上,ISOBMFF 和 MP4 都不会从 MOV 导入此功能。有没有其他方法可以实现这一点,例如使用类似 HEIF 的派生图像thmb
(参见修正案 2)角色?
最初的 Apple Quicktime (Pro) 编辑器确实有一个菜单选项可以做到这一点。(Apple Compressor和Photos也可以做到)。
需要明确的是,我不想附加一个单独的图像文件,它可能是从电影静止图像中截取的屏幕截图,作为多媒体容器的单独轨道。我知道该怎么做:
我也知道有些人习惯将指定的海报帧从其原始位置复制到第一帧,但许多自动生成的预览使用较晚的时间索引,例如从 10 秒、30 秒、10% 或 50% 进入视频溪流。
ffmpeg - MP4 视频文件中的标准化“跳过介绍”?
是否有一种标准化的方法可以在文件本身的元数据中将包含 MP4 的视频的特定部分标记为可跳过,例如预告片、重述、介绍/结尾、开场/闭幕演职员表?如果可能的话,我想用 FFmpeg 或 MP4box 来设置它。
我知道mvhd
MOV 文件中的框可以指定单个预览。我假设 Netflix 等使用特殊命名或提示的章节(来自文件内部元数据或来自中央数据库)来提供此功能。我现在想将此添加到我个人库中的视频中,以防万一 Kodi、VLC 或其他播放器和媒体中心添加对此功能的支持。
编辑列表框elst
正如第一条评论中提到的,编辑列表可能是一个解决方案。它们在ISO/IEC 14496-12:2015 (ISOBMFF)的第 8.6.6 节中指定,我在下面部分引用。
moov
> trak
+ > edts
? > elst
*
[
elst
] 包含一个明确的时间线图。每个条目定义轨道时间线
的一部分:通过映射媒体时间线的一部分,
或通过指示“空”时间,
或通过定义“驻留”,其中媒体中的单个时间点被保持一段时间时期。
version
是一个整数,指定此框的版本(0 或 1)entry_count
是一个整数,给出下表中的条目数segment_duration
是一个整数,以电影标题框中的时间刻度为单位指定此编辑段的持续时间media_time
是一个整数,包含此编辑段的媒体内的开始时间(以媒体时间尺度单位,以合成时间为单位)。如果此字段设置为 –1,则为空编辑。轨道中的最后一个编辑永远不会是空编辑。电影标题框中的持续时间与轨道的持续时间之间的任何差异都表示为结尾处的隐式空编辑。media_rate
指定播放与此编辑段对应的媒体的相对速率。如果此值为 0,则编辑指定“驻留”:媒体时间的媒体呈现为片段持续时间。否则,该字段应包含值 1。