我第一次使用ffmpeg-python 。我正在尝试使用shortest=1中的参数ffmpeg.output(),但是当我使用它时,我的程序不断给出错误。
我想用 的音频替换 的音频foo.mp4,bar.webm同时保留 的视觉效果foo.mp4。我得到了这个工作,但问题是ffmpeg.concat默认情况下继续播放音频,bar.webm而视觉效果已foo.mp4停止播放。根据此 FFmpeg 文档页面,这是预期的行为:“concat 过滤器将使用每个片段中最长流的持续时间(最后一个片段除外),并在必要时用静音填充较短的音频流。”
我希望在视觉效果停止播放时停止输出视频,因此我希望它切断音频,但我无法让它工作。该页面还指出,我应该能够添加shortest作为参数以获得所需的结果:“如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。” 但我无法让它工作。下面代码块的底行第二行包含shortest=1,我希望它能工作,但我得到了这个错误:
[NULL @ 000001d50dfdea80] Unable to find a suitable output format for '1'和1: Invalid argument
正如预期的那样,使用shortestfoo反而给了我这个错误:
Unrecognized option 'shortestfoo'.和Error splitting the argument list: Option not found
这告诉我该shortest参数是一个可能的参数,但1我分配给它的值是错误的。将其设置为我的程序运行,但当然,None设置为 后音频仍然不会被切断。None
我应该在这里使用什么值shortest?我的评估是否正确,我只是使用了错误的值 …
我正在std::filesystem为游戏创建 Lua 绑定,并且我想确保稍后使用该绑定的 mod 不依赖于 Windows 的不区分大小写。
例如,在 Windows 上fopen("foo.txt", "w")后跟fopen("Foo.txt", "r")会读取文件,而在 Linux 上则不会,因为 Linux 区分大小写。这不仅涉及文件名,还涉及整个路径,因为假设bar/存在,fopen("bar/baz.txt", "w")后跟fopen("Bar/baz.txt", "r")在 Windows 上可以工作,但在 Linux 上也失败。因此,虽然该 mod 可以在 Windows 上运行,但对于 Linux 用户来说它会崩溃,这是我想防止的。
以前,我通过使用此处的代码“使”Linux 不区分大小写来解决这个问题,该代码本质上是通过迭代目录中的所有条目并检查名称是否不区分大小写匹配来构建一条路径,一次一个父目录。
然而,这个解决方案的代码不是很优雅,而且相当大,现在我决定通过“使”Windows 区分大小写来做完全相反的事情,我希望也许有一些功能可以在 Windows 上使用获取文件的真正区分大小写的路径,这样在两个fopen("Foo.txt", "r")操作系统上都会失败。
我在谷歌上搜索了很多,并在SO上查找了以前问过这个问题的任何其他人,但大多数答案要么是尖刻的“为什么有人需要这个”,要么是执行与我上面链接的当前解决方案相同的操作。
我尝试过使用GetFullPathName()例如将其放入foo.cpp文件中,但它打印C:\Users\<user>\Desktop\Foo.cpp,所以没有用,因为我需要Foo.cpp与实际文件名相同的大小写:
#include <iostream>
#include <windows.h>
int main() {
char filename[] = "Foo.cpp";
char fullFilename[MAX_PATH];
GetFullPathName(filename, MAX_PATH, fullFilename, nullptr);
std::cout …Run Code Online (Sandbox Code Playgroud)