- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在从 avi 转码为 mp4(x264) 时遇到了 fps 问题。最终问题出在 PTS 和 DTS 值上,因此在 av_interleaved_write_frame 函数之前添加了第 12-15 行:
1. AVFormatContext* outContainer = NULL;
2. avformat_alloc_output_context2(&outContainer, NULL, "mp4", "c:\\test.mp4";
3. AVCodec *encoder = avcodec_find_encoder(AV_CODEC_ID_H264);
4. AVStream *outStream = avformat_new_stream(outContainer, encoder);
5. // outStream->codec initiation
6. // ...
7. avformat_write_header(outContainer, NULL);
8. // reading and decoding packet
9. // ...
10. avcodec_encode_video2(outStream->codec, &encodedPacket, decodedFrame, &got_frame)
11.
12. if (encodedPacket.pts != AV_NOPTS_VALUE)
13. encodedPacket.pts = av_rescale_q(encodedPacket.pts, outStream->codec->time_base, outStream->time_base);
14. if (encodedPacket.dts != AV_NOPTS_VALUE)
15. encodedPacket.dts = av_rescale_q(encodedPacket.dts, outStream->codec->time_base, outStream->time_base);
16.
17. av_interleaved_write_frame(outContainer, &encodedPacket)
看了很多帖子还是不明白:
outStream->codec->time_base
= 1/25 和 outStream->time_base
= 1/12800。第一个是我设置的,但我不明白为什么以及谁设置了 12800?我注意到在第 (7) 行 outStream->time_base
= 1/90000 之前和之后它变为 1/12800,为什么?当我从 avi 转码为 avi 时,这意味着将行 (2) 更改为 avformat_alloc_output_context2(&outContainer, NULL, "avi", "c:\\test.avi";
,因此行前后 ( 7) outStream->time_base
始终保持 1/25 而不是 mp4 情况,为什么?outStream->codec
和outStream
的time_base有什么区别?av_rescale_q
会执行以下操作:取 2 个 time_base,将它们的分数交叉相乘,然后计算 pts。为什么这样做呢?在我调试时,encodedPacket.pts
的值增加了 1,那么如果它确实有值,为什么还要更改它呢?最佳答案
time_base 只是一个单位的测量单位。可以使用不同的单位来表示相同的时间(如果它们不是精确的倍数,则为近似值)。在某些情况下,容器格式需要特定的时间基准,并且它将由 muxer 设置为该时间基准。在其他情况下,容器不需要时间基准,但它有一个您可能必须覆盖的默认值。我不确定具体是 1/12800,我知道 1/600 在 mp4 规范中是一个特殊值。
这两个时间基准是编解码器和容器的时间测量单位。如果使用常量 fps,则编解码器测量单位通常设置为每一帧与下一帧之间的间隔(每一帧显示的持续时间),因此帧时间是连续的整数。但是,它不必设置为 1/fps,只要使用的任何单位的 pts 时间都是正确的。
您所描述的只是将一种单位转换为另一种单位所必须做的事情。 (即:乘以旧单位,除以新单位)。以 a/b
为单位的时间 t 可以转换为以 c/d
为单位的 t*(a*d)/(b*c)
.
dts序列可以从任意值开始,dts 0没有特殊意义。播放开始时,会计算wall clock time和起始dts的差值,之后所有的dts都会转换为wall时钟使用那个。 dts=-10, -9, -8, ... 的视频流是完全可以的。连续的 dts 之间的区别是使用什么,绝对值无关紧要。
关于video - 了解视频帧中的 PTS 和 DTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13595288/
我正在尝试为我的 typescript 项目生成一个 typescript 定义文件,其中包含几个基/继承类、实用程序等。在我们的项目中,每个 A.ts 文件将被编译为 A.js 文件,A.js .m
当我想用 ffmpeg 连接和录制两个 mp4 视频时,我遇到了这个问题。我得到的输出是: [concat @ 0x2566e80] DTS 4079 #0:0 (h264 (native) ->
环境:Windows7,ffmpeg 4.2.2 copy the first 10 seconds from long.mp4 to UNO.mp4 copy sec 120 to sec 130
我有 2 个 ffmpeg 实例,它们正在通过一个用 C 编写的缓冲区。 ffmpeg 实例之一是创建 FLV 输出并将其发送到连接到 C 程序的 TCP 套接字。 C 正在填充一个数组,然后将数据包
我只是想从缓冲区中保存相同的视频帧,在那里我正确保存了帧的位图帧和时间戳。 writer1 = new VideoFileWriter(); this.writer1.Width = this.vid
观察 - 第一部分 - I 我在其他地方看到了运行以下命令的建议,以查看我的 .mp4 是否有问题。 ffmpeg -v error -i ~/Desktop/5_minute_sync_outpu
当通过断开连接的编辑查看 DTS 包时,转换数据任务中的目标列或源列具有 DataType 属性,其值类似于 129、130、131、135。 我在哪里可以找到这些值的含义列表? 最佳答案 我认为是
我们有一个旧的 DTS 包,我们的 SQL 2000 Server 使用它来将员工记录推送到我们制造车间的机器上。 最近,我们升级了其中一台机器,它现在正在运行 SQL 2008 Express。 我
在我正在进行的一个遗留项目中,我们有几个通过 DTS 执行的处理。 DTS 并不是我在其鼎盛时期经常使用的东西……我当时还在上大学。 更具体地说,这些过程位于 ActiveX 代码块中——基本上是用于
是否可以通过删除非单调 DTS 帧将 .ts 文件流式复制到另一个 .ts 文件?这些帧的分辨率通常也比我要复制的视频小。我尝试使用 VideoReDo 进行此操作,但没有成功,我似乎无法使其正常工作
我有几个文件需要合并。有时文件似乎可以毫无问题地工作和连接。然后在其他文件上,文件不会合并,我得到“非单调 DTS”。我一直在谷歌搜索我应该在这些文件上做些什么,以便它们正确连接,但我仍然没有找到。
我正在尝试在 Visual Basic 2010 中执行带有脚本组件的 SSIS 包。执行包时出现以下错误: public void Main() { // TODO:
我正在编译 OpenWrt(基于 Linux 的无线路由器),我在 OpenWrt 源代码中添加了一个板子,我的板子有两个 uart 端口,我可以声明并启用两个 uart 端口,这两个 uart 端口
我做了 ffmpeg -i x.mp4 -ss 17 two.mp4 现在我试着做 ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4 与
我有一些视频,我试图用 ffmpeg 连接它们,它们都可以自己正常工作,但试图用这个命令连接它们: ffmpeg -f concat -safe 0 -fflags flush_packets -ff
我有一个视频,其中包含超出视频数据末尾的一些音频数据包: $> ffprobe -show_packets video.mp4 ... ... ... [PACKET] codec_type=vide
我有三个视频,我想将它们连接在一起这个问题对于某些视频来说效果很好,但是当我测试一个特定的视频时,它给了我一个错误,并导致生成的视频以一种奇怪的方式显示,并且视频中的一切都进展得非常快就像我转发视频一
Bootloaders like U-Boot that do not implement the Open Firmware API, are expected to pass to the ker
我试图从 DTS 文件中理解以下代码段。 /dts-v1/; / { model = "MPC8313ERDB"; compatible = "MPC8313ERDB", "MPC83
我需要找到一个包含特定表名的 DTS 包。有 200 多个 DTS 包,每个包中都有多个对象。 My_Prod 是表名。是否有 T-SQL 命令来查找引用此表名的所有 DTS 包? 最佳答案 正如埃里
我是一名优秀的程序员,十分优秀!