我有一些影片,我想将该视频中的所有帧替换为我的静态图像。使视频时长、分辨率(宽度、高度)、声音和其他属性保持不变。
我有用mpeg-dash编码的视频(*.mpd,init段,视频片段)任务是用我生成的片段替换其中一个视频片段.所以视频仍然可以播放.
我使用了读取一个段的属性(组合init段和视频段)
avformat_open_input
avformat_find_stream_info
Run Code Online (Sandbox Code Playgroud)
1)我曾尝试使用dash muxer生成新的段.
avformat_alloc_output_context2(&avFormatContext, NULL, "dash", filename)
Run Code Online (Sandbox Code Playgroud)
但问题是它创建了mpd清单和其他段.那么如何强制它创建一个细分?
2)当我解析段时,我注意到它的格式为"QuickTime/MOV".
avformat_alloc_output_context2(&avFormatContext, NULL, "mov", filename);
Run Code Online (Sandbox Code Playgroud)
所以我的另一个想法是使用"mov"编码器.并设置与初始段(开始时间,持续时间,分辨率)相同的属性.但这里的问题是如何删除init标头?因为我已经有了init段.
有没有其他方法来生成一个mpeg-dash段以及如何解决我的问题?
我想为唯一指针实现std :: end.问题是我必须得到N(数组中的元素数).
1.从模板中推导出推断类型
template <typename T, size_t N>
T* end(const unique_ptr<T[N]> &arr)
{
return arr.get() + N;
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误错误:C2893:无法使用[_Ty = T [N]]专门化函数模板'T*test :: end(const std :: unique_ptr>&)'使用以下模板参数:'T = int' 'N = 0×00'
看起来不可能推断出N.
2.从分配器获取N. 分配器必须知道N才能正确执行delete [].您可以在本文中阅读此内容.有两种方法:
过度分配数组并将n放在左侧.
使用关联数组,其中p为键,n为值.
问题是如何获得这个大小跨平台/编译器.
也许有人知道更好的方法或知道如何使这个工作?