- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的团队需要开发一个在网络上播放avi文件的系统。这些文件由无法访问其固件的硬件记录。我们正在尝试与制造商进行协商,以将文件格式更改为mp4,但到目前为止,我们什么都没有。
因此,我们正在尝试另一种方式使其工作。我们的第一个尝试是使用FFMPEG将文件转换为mp4(或webm或ogg),但是此过程耗时太长,因为我们每天都要处理大量的视频。
我们还尝试使用FFMPEG的copy命令(速度更快),但是视频总是在某个时刻崩溃(主要是在我们需要在其时间轴上导航时),我们不知道为什么。
因此,现在我们正在考虑自定义videojs Flash播放器以重现AVI文件,但是由于我们在视频编程和Flash方面没有太多经验,因此我们不知道这样做是否可行。是否可以在动作脚本中编写解码器以读取avi文件?
我看到Youtube和Facebook可以播放AVI文件...它们是如何做到的?我已经看了很多,但没有成功。
编辑1
复制命令之前的avi视频文件:
$ ffmpeg -i video.avi
ffmpeg version N-82324-g872b358 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dx va2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-lib ebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --ena ble-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfree type --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enab le-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-lib openh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschr oedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheor a --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvo rbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --ena ble-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --e nable-decklink --enable-zlib
libavutil 55. 36.100 / 55. 36.100
libavcodec 57. 66.101 / 57. 66.101
libavformat 57. 57.100 / 57. 57.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 66.100 / 6. 66.100
libswscale 4. 3.100 / 4. 3.100
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, avi, from 'video.avi':
Metadata:
encoder :
Duration: 00:50:07.67, start: 0.000000, bitrate: 6 kb/s
Stream #0:0: Video: h264 (Constrained Baseline) (H264 / 0x34363248), yuv420p (progressive), 352x240, 3 fps, 3 tbr, 3 tbn, 6 tbc
At least one output file must be specified
$ ffmpeg -i video.avi -vcodec copy video.mp4
ffmpeg version N-82324-g872b358 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-libebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
libavutil 55. 36.100 / 55. 36.100
libavcodec 57. 66.101 / 57. 66.101
libavformat 57. 57.100 / 57. 57.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 66.100 / 6. 66.100
libswscale 4. 3.100 / 4. 3.100
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, avi, from 'video.avi':
Metadata:
encoder :
Duration: 00:50:07.67, start: 0.000000, bitrate: 6 kb/s
Stream #0:0: Video: h264 (Constrained Baseline) (H264 / 0x34363248), yuv420p(progressive), 352x240, 3 fps, 3 tbr, 3 tbn, 6 tbc
Output #0, mp4, to 'video.mp4':
Metadata:
encoder : Lavf57.57.100
Stream #0:0: Video: h264 (Constrained Baseline) ([33][0][0][0] / 0x0021), yuv420p(progressive), 352x240, q=2-31, 3 fps, 3 tbr, 12288 tbn, 3 tbc
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0000000002513fc0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[NULL @ 0000000002524020] missing picture in access unit with size 16
Last message repeated 300 times
frame= 9324 fps=0.0 q=-1.0 Lsize= 1388kB time=01:38:27.66 bitrate= 1.9kbits/s speed=3.32e+004x
video:1354kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.493988%
$ ffmpeg -i video.mp4
ffmpeg version N-82324-g872b358 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dx va2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-lib ebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --ena ble-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfree type --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enab le-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-lib openh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschr oedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheor a --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvo rbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --ena ble-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --e nable-decklink --enable-zlib
libavutil 55. 36.100 / 55. 36.100
libavcodec 57. 66.101 / 57. 66.101
libavformat 57. 57.100 / 57. 57.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 66.100 / 6. 66.100
libswscale 4. 3.100 / 4. 3.100
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.57.100
Duration: 01:38:28.00, start: 0.000000, bitrate: 1 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu v420p, 352x240, 1 kb/s, 1.58 fps, 3 tbr, 12288 tbn, 24576 tbc (default)
Metadata:
handler_name : VideoHandler
At least one output file must be specified
最佳答案
我们还尝试使用FFMPEG的copy
命令(速度更快),但是
视频总是在某个时候崩溃(主要是在我们需要
在其时间轴中导航),我们不知道为什么。
这是您的re-fixed MP4的链接。寻求现在正在工作。
我手动检查了字节,并且我怀疑时间戳是错误的。
FFprobe(使用ffprobe video.avi
)表示AVI持续时间为5.88秒。 MPC-HC还显示持续时间为6秒(四舍五入)。现在,我们以后希望使用copy
命令时,MP4的持续时间也相同,为5.88。但是在copy
之后,输出MP4具有新的10秒持续时间???
MP4将持续时间放在3个地方。每个软件都有自己检查哪个条目的规则,因此最好为所有人着想编辑所有3个位置。元数据分为“原子”,因此我们编辑3个原子。
这些称为mvhd
,tkhd
和elst
的原子在持续时间内都具有字节值00 00 28 87
,等于10375毫秒(或10.375秒)。
这是错误的,因为我们需要5880毫秒(或5.88秒)。我手动将它们全部从00 00 28 87
更改为00 00 16 F8
,从而得到5880毫秒。现在MPC-HC认为mp4是5秒((!),但Chrome一直说它仍然是10秒(该死!)。
作为最后的选择,我检查了一个名为stts
的原子。这有3个项,总共136帧(定时FFprobe说AVI实际上有141帧)。无论如何,第一项表示前128帧的显示时间为512毫秒(持续时间128 * 512 = 65536 ms
)。错了
简而言之。我编辑stts
说...
代替03
的只有01
显示时间条目(但尚未删除其他条目字节)。
代替00 00 00 80
= 128,实际上有00 00 00 8D
= 141帧
我仍将这些图像(现在为141帧)的原始显示时间保持为00 00 02 00
= 512 ms
我将其余两个条目字节全部更改为零(因为我们不需要使用它们)。
这就是MP4在Chrome浏览器中经过测试后成为可搜索的文件的方式。
结论:
为了修复您自己的文件,我怀疑仅编辑MP4元数据中stts
部分的第一个条目就足够了。您告诉它“我有X数量的帧,每个帧显示X间隔,没有多余的内容!”。然后只需在mvhd
,tkhd
,elst
中编辑持续时间。在这里,您必须知道如何使用字节。
编写一个桌面程序,(如果您团队中的某人可以做到)...
从AVI获取“持续时间”和“总帧数”(我建议在FFprobe cos上使用ExifTool,因为它可以正确显示两个细节)。您的程序通过标准输入/输出读取此信息。
已知原子名称后,将其作为UTF文本进行搜索,以找到其在字节内的起始位置。
当您拥有每个开始位置时...现在,您将数字编辑为4字节整数(以十六进制表示)
找到“ mvhd
”的起始位置,然后跳过20个字节以查找持续时间。
找到“ tkhd
”的起始位置,然后跳过24个字节以查找持续时间。
找到“ elst
”的起始位置,然后跳过24个字节以查找持续时间。
最终找到“ stts
”的起始位置,然后跳过8个字节以查找总条目(4个字节)。之后,接下来的4个字节是“总帧数”(您用实数固定),然后接下来的4个字节是帧的计时,但保持不变...
其他查询:...
是否可以在动作脚本中编写解码器以读取avi文件?
我看到Youtube和Facebook可以播放AVI文件...它们是怎么做的
这个?
是!!由于您的AVI具有Mpeg(H.264)视频,因此Flash的解码器可以接受MPEG a / v字节,因此,如果您从AVI中提取帧字节并将其馈送到解码器,它将显示出来。
这个旧的demo app是我将Mpeg的AAC音频字节馈送到解码器的一个示例。 AVI的原理相同。我使用Flash,但会告诉您...比起世界上只有一个定制的应用程序可以播放它们的情况,更好地修复文件。固定文件可以在Flash,HTML5浏览器和其他任何地方使用。
PS:Facebook和Youtube正在重新编码您的文件。这不是直接文件副本。
关于flash - 如何在浏览器上播放avi文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468827/
我在 mac 上,我有一个预先存在的 Flash 项目。 (即通常的 fla、src、lib)文件夹。 现在,我想开始使用 Flash Builder 4 编写代码。 如何导入所有这些文件,以便我现在
我在 Flash 视频播放器中遇到了一个奇怪的、很难重现的图形故障!,目前仅在 Chrome 中。 “进入建筑物”下方的灰色矩形显示了 Flash 播放器所在的 html div 的背景颜色。“我们在
我对 Flash 有点陌生,我只是找不到一种很好的方法来控制我添加到容器影片剪辑中的元素的位置。 我所做的是 addChild 到我的目标容器 Movie Clip 和控件 child 的 x,y 值
我是一名 AS3 开发人员,习惯于使用 Flash Builder。我正在与一位使用 Flash Professional 为游戏设计 Sprite 和背景的设计师合作。我希望为我们创建一个集成的工作
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
当您像下面那样在 FLash Builder 中嵌入媒体时,它会创建一个类来引用 [Embed(source="images/list.png")] protected static const LI
有没有办法在 Flash 上本地启用跳帧? 当您开发游戏时,您会开发动画以匹配游戏玩法的节奏,并以目标帧速率(Flash 通常为 24-40fps)进行制作。但是如果用户的电脑速度太慢,无法保持目标帧
大家好,我想知道 AS3 中的 dispatchEvent 是什么。 谷歌搜索时没有任何想法。 :( 所以请帮帮我 编辑1: public static const SET_VOLUME:Strin
我多次听说我应该避免在我的网站上使用 Flash。然而,没有人告诉我这样做的充分理由。我已经搜索了原因,我看到很多不正确的(例如 Flash 中的文本不能被搜索引擎索引),或者不一定是真实的或足够重要
我正在为一个非常大的网站做一些测试,创建了许多不同的开发人员。有没有办法判断网站是否在使用 flash和/或已加载闪存 plugin ?如果页面使用 Flash,有没有办法告诉页面/代码的哪一部分触发
我正在研究“Foundation Actionscript 3.0”一书中的音频播放器演示。当我尝试发布 AudioDemo_final.FLA 文件时,出现以下错误:“Adobe Flash CS3
我有一个特定的FLA,每次尝试编译时都会崩溃(切换到Snow Leopard之后)。 Flash只是停滞不前,我被迫使用“强制退出” ...我不知道是什么原因造成的,并且找不到任何崩溃报告。 Flas
所以我非常熟悉 Java、C 和 C++ 中的内存管理;然而,在闪存中有哪些结构用于内存管理?我假设 flash 有一种像 java 的虚拟机,并且我一直假设当它们被设置为 null 时会被垃圾收集。
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
是否可以在 flash 中创建 UDP 套接字连接?我知道 RTMPF,但它不提供对 UDP 的访问。我知道在 AIR 中它是可能的,但我正在寻找一种“闪光”解决方案。 谢谢你 最佳答案 号 UDP
不知道如何表达这个意思,但是我想知道是否可以创建一个全面的错误处理程序来保护整个代码,然后发送给自定义处理程序,该程序在程序中以图形方式输出信息。类似于以下内容: root.addEventListe
我正在尝试创建可在不同场景中使用的UI影片剪辑。 它使用来自根范围的变量来确定状态。 当我按下静音按钮时,效果很好,但是当我尝试取消静音时,就变得很奇怪。有时需要2次点击才能取消静音,有时还需要更多。
是否可以通过麦克风记录最终用户? 我可以用录音做什么 Action ? 例如,我能否实时获得声音(分贝)的音量? 我可以将记录保存到文件中吗? 谢谢。 最佳答案 是的,Flash允许(具有用户许可权)
当我访问我之前在 IE 中构建的站点时,我在浏览器底部弹出消息栏,提示该站点想要运行 Flash。 这很好,除了网站中没有任何 Flash。 什么会导致这种情况? Flash 现在怎么会出现在站点中?
概要 我正在尝试制作一个包含多个相同SWF的网页。我有一个问题,它的加载速度太慢了(虽然下载时间还不错)。我在每个单元格中都有一个4x4表格,在iframe中嵌入了一个swf文件。 (注意:4 X 4
我是一名优秀的程序员,十分优秀!