gpt4 book ai didi

flutter - ffmpeg 套件 flutter 视频压缩器

转载 作者:行者123 更新时间:2023-12-04 23:06:42 25 4
gpt4 key购买 nike

我对ffmpeg没有经验。所以如果我在错误的地方问错了问题,我很抱歉。
我正在尝试制作视频压缩器,我添加了完全一样的依赖项:ffmpeg_kit_flutter_full_gpl: ^4.5.1我写的代码是这样的:

compress(path) {
FFmpegKit.executeAsync("-i $path -c:a copy -c:v libx264 -s 848x360 output.mp4", (session) async {
final returnCode = await session.getReturnCode();
if (ReturnCode.isSuccess(returnCode)){

print("işlem başarılı");
// SUCCESS

} else if (ReturnCode.isCancel(returnCode)) {

print("iptal edildi");
// CANCEL

} else {

print("hata oluştu");
print(await session.getFailStackTrace());
// ERROR

}
});
}
我像这样调用这个方法:
asset.originFile.then((fle) {
var path = fle!.path;
compress(path);
}
);
由于某种原因,它总是返回错误条件。和 session.getFailStackTrace()一片空白。
我的第一个问题是你认为这里有什么问题?
其次,在这种情况下如何检测错误是什么?
提前致谢 :)

最佳答案

最后,在@kesh 的建议下,我使用此代码查看错误;

FFmpegKitConfig.enableLogCallback((log) {
final message = log.getMessage();
print(message);
});
我发现,如果您的视频名称包含空格或特殊字符,FFmpeg 套件会出错。所以,我为输入文件和输出文件生成随机名称并重命名它们..
如果任何机构需要 ffmpeg 视频压缩器,我将留下代码:
我在 pubspec.yaml 的依赖;
ffmpeg_kit_flutter_full_gpl: ^4.5.1
我正在生成新名称,例如:
asset.originFile.then((fle) {
const _chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
Random _rnd = Random();
String getRandomString(int length) => String.fromCharCodes(Iterable.generate(
length, (_) => _chars.codeUnitAt(_rnd.nextInt(_chars.length))));
String newName = getRandomString(15);
String newInput = getRandomString(16);
var outputPath = fle!.path.toString().split('/');

outputPath.remove(outputPath[(outputPath.length)-1]);

var out = outputPath.join('/');
String output = out + "/" + newName + ".mp4";
String inputPath = out + "/" + newInput + ".mp4";

fle.rename(inputPath);

compress(inputPath, output);

}
我的压缩功能是:
compress(path, output) {
FFmpegKit.executeAsync("-y -i $path -vcodec libx264 -crf 22 $output", (Session session) async {
final returnCode = await session.getReturnCode();
if (ReturnCode.isSuccess(returnCode)){
print("işlem başarılı");
File lastVid = File(output);
//SUCCESS
} else if (ReturnCode.isCancel(returnCode)) {
print("iptal edildi");
// CANCEL

} else {
print("hata oluştu");
FFmpegKitConfig.enableLogCallback((log) {
final message = log.getMessage();
print(message);
});
// ERROR

}
});
}

关于flutter - ffmpeg 套件 flutter 视频压缩器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71958879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com