如何使用 ffmpeg 获取最接近给定时间(相对于视频开头)的帧号?视频具有可变帧速率。我不需要任何其他元数据或实际帧(图像)本身。速度比精度更重要(除非可能的误差超过几秒)。
例子:
输入
输出
可能重复:
ffmpeg:转换前后的视频长度不同
最近,我一直试图将FFmpeg用于一个应用程序,当涉及到时间参数(毫秒分辨率)时需要非常精确的操作.不幸的是,我很惊讶地发现FFmpeg的操作功能会返回一些不准确的结果.
这是'ffmpeg'的输出:
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
built on Jul 25 2012 19:55:05 with gcc 4.2.1 (Apple Inc. build 5664)
configuration: --enable-gpl --enable-shared --enable-pthreads --enable-libx264 --enable-libmp3lame
libavutil 51. 54.100 / 51. 54.100
libavcodec 54. 23.100 / 54. 23.100
libavformat 54. 6.100 / 54. 6.100
libavdevice 54. 0.100 / 54. 0.100
libavfilter 2. 77.100 / 2. 77.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100 …Run Code Online (Sandbox Code Playgroud) 我的目标是拼接多个视频文件中的视频片段。片段由任意开始时间和结束时间定义。最初我想使用像 mp4parser 这样的库来做到这一点,但它只能在同步(IFRAME)点切割流,而我需要更高的精度。
我的场景是从文件中提取编码流 -> 解码 -> 编码 -> 将结果混合到 mp4 文件中。目前,代码通常可以工作,但生成的视频是白噪声。在 Nexus-S 和 Galaxy-S3 上进行了测试。我的代码是几个示例的组合:
我想简化示例,因为我不需要在中间处理帧。我尝试将缓冲区从解码器输出馈送到编码器输入,而中间没有 Surface。整个过程的工作原理是代码运行完成并生成可播放的视频文件。然而文件的内容是白噪声。
这是将帧从解码器提供给编码器的代码片段。有什么问题以及如何使其发挥作用?
...
} else { // decoderStatus >= 0
if (VERBOSE) Log.d(TAG, "surface decoder given buffer "
+ decoderStatus + " (size=" + info.size + ")");
// The ByteBuffers are null references, but we still get a nonzero
// size for the decoded data.
boolean doRender = (info.size != 0);
// As soon as we call …Run Code Online (Sandbox Code Playgroud) 我在视频中完成了对象检测,并在一帧中找到了5到6个坐标.在每个帧中,坐标之间的距离因移动物体而变化.我的文本文件有13列,第一列是帧号和6个坐标,如下所示.我必须找到坐标之间最大空间的框架编号.每个坐标之间的最小任意距离不应该相互交叉,因为我想根据坐标之间的间距来分割视频.
有没有预先编写的算法来进行这种类型的分段,还是应该循环?

301.467 0.713235 0.852451 0.752451 0.753922 0.380392 0.373039 0.282843 0.291667 0.262255 0.283824 0.236765 0.218627
301.6 0.717647 0.864706 0.752941 0.761275 0.753431 0.743627 0.388235 0.383333 0.286765 0.294608 0.237745 0.207353
301.667 0.722059 0.876471 0.756863 0.763726 0.395098 0.391667 0.284314 0.289216 0.238725 0.198529 nan nan
301.867 0.72451 0.884314 0.762745 0.771078 0.40098 0.401961 0.290686 0.292647 0.240196 0.207843 0.241176 0.190686
302 0.731373 0.897059 0.760784 0.771569 0.413725 0.422549 0.302941 0.292157 0.25098 0.179412 nan nan
302.067 0.743627 0.917157 0.765686 0.777941 0.430392 0.444608 0.305392 0.293137 0.257843 0.17402 nan nan …Run Code Online (Sandbox Code Playgroud) AVFoundation没有为我的视频添加叠加层.我不确定我做错了什么.我已经尝试使叠加层完全变白,但它没有放在视频上.当视频播放时,它必须播放AVMutableComposition Track而不是我添加的exporter.videoComposition.我对AVFoundation的经验不足以了解出了什么问题.
AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];
// 3 - Video track
AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
// [videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,self.videoAsset.duration)
// ofTrack:[[self.videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]
// atTime:kCMTimeZero error:nil];
CMTime insertTime = kCMTimeZero;
for(AVURLAsset *videoAsset in self.videoArray){
[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:insertTime error:nil];
// Updating the insertTime for the next insert
insertTime = CMTimeAdd(insertTime, videoAsset.duration);
}
// 3.1 - Create AVMutableVideoCompositionInstruction
AVMutableVideoCompositionInstruction *mainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
mainInstruction.timeRange = videoTrack.timeRange;
// 3.2 - Create an AVMutableVideoCompositionLayerInstruction for the video …Run Code Online (Sandbox Code Playgroud) 我正在使用ffmpeg将.mkv和.mka文件合并为.mp4文件。我当前的命令如下所示:
ffmpeg -i video.mkv -i audio.mka output_path.mp4
Run Code Online (Sandbox Code Playgroud)
音频和视频文件是Amazon S3的预签名URL。即使在具有足够资源的服务器上,此过程也会非常缓慢。我研究了可以告诉ffmpeg跳过每个帧重新编码的情况,但是我认为在我的情况下实际上确实需要重新编码每个帧。
我已经将2个示例文件下载到了我的Macbook Pro,并通过自制软件在本地安装了ffmpeg。当我运行命令
ffmpeg -i video.mkv -i audio.mka -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
built with Apple LLVM version 8.1.0 (clang-802.0.42)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 …Run Code Online (Sandbox Code Playgroud) 我在 Mac 上使用 ffmpeg 删除视频的绿色背景并添加其他背景作为图像,它正在正确转换视频但缺少 auido。我正在使用以下命令。
我在这里做错了什么吗?
ffmpeg -i bg.jpg -i input.mp4 -filter_complex "[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4
Run Code Online (Sandbox Code Playgroud) 我正在使用OpenCV和GPU在视频中进行实时人/人/事实检测.我需要用于视频处理和人工检测的OpenCv代码.请帮助我使用Opencv或任何其他编程在视频中找到人工检测的代码.非常感谢你的时间.
ffmpeg ×4
video ×4
audio ×2
android ×1
avfoundation ×1
calayer ×1
chromakey ×1
coordinates ×1
gpu ×1
grafika ×1
macos ×1
objective-c ×1
opencv ×1
overlay ×1
python ×1