我已经浏览了 stackoverflow 上的所有问题,但没有一个答案对我有用。
我有一个屏幕录制的 mp4 视频和另一个从网络摄像头录制的 mp4 视频。我想将网络摄像头视频覆盖在屏幕录制视频的左上角。
我想我终于找到了执行此操作的正确命令行,但是当我单步执行 ffmpeg 进程时,它在到达“ handler_name :SoundHandler”时冻结。
这是我的命令行:
string overlayPosition = "movie=" + '"' + _videoFile.FileName + '"' + "[inner]; [in][inner] overlay [out]";
string overLayCommand = "-i " + '"' + videoList[0].Path + '"' + " -vf " + '"' + overlayPosition + '"' + + '"' + " C:\\Users\\james\\output.mp4" + '"';
Run Code Online (Sandbox Code Playgroud)
有谁知道我做错了什么?我已经成功地修剪音频和视频、裁剪视频、加入声音、加入视频以及加入声音和视频,但无法使叠加工作:(。
FFMPEG对于剪切视频的一部分非常有用,而无需重新编码视频。
我知道也可以使用FFMPEG 在视频的特定部分(例如,从10秒到20秒)向视频添加叠加图像。
我的问题是:如果我对图像进行覆盖,是否会因此而对整个视频重新编码?还是只是相关的持续时间会被编码?
还有什么我可以用来使重新编码最少的选项?
目的当然是保持视频质量像原始视频一样。.
(我根本不要求重新编码,但我不知道这怎么可能...)
谢谢
我正在尝试将一个视频与另一个视频叠加。我遵循了此处发布的原始命令OP 。它有效,但它覆盖了从时间 0 开始的视频:
ffmpeg -i 720480.mp4 -i sdbug.mov -filter_complex "[0:0][1:0]overlay[out]" -shortest -map [out] -map 0:1 -pix_fmt yuv420p -c:a copy -c:v libx264 -crf 18 new.mp4
Run Code Online (Sandbox Code Playgroud)
我尝试了正确的答案来指定时间,但它对我不起作用:1)覆盖大约在第二个开始12,2)覆盖完成后不播放视频。
ffmpeg -i 720480.mp4 -i sdbug.mov -filter_complex "[1:v]setpts=PTS+10/TB[a]; [0:v][a]overlay=enable=gte(t\,5):shortest=1[out]" -map [out] -map 0:a -c:v libx264 -crf 18 -pix_fmt yuv420p -c:a copy new.mp4
Run Code Online (Sandbox Code Playgroud)
最近有什么变化吗FFmpeg?!为什么它不起作用?
这是该命令的输出(它完成得非常快):
ffmpeg version N-92906-g54109b1d14 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181201
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype …Run Code Online (Sandbox Code Playgroud)