我正在通过 Python 程序将文本和视频上传到网站。该网站表示他们只接收最大 50 MB 的视频文件。否则,他们将拒绝该视频和其他相关信息。
为了确保我可以连续发送视频,我想将其压缩到目标大小(例如 50 MB)。因为没有质量损失是不可能的,所以视频或音频有适度的清晰度损失是可以的。
Python 有什么优雅的方法可以达到这个目的吗?谢谢!
我已经集成了ffmpeg4android lib
. 视频压缩工作正常,但视频无法在除 safari 浏览器之外的浏览器中播放。上传到服务器后。我使用了以下命令。
ffmpeg -y -i <input file.mp4> -strict experimental -r 30 -ab 48000 -ac 2 -ar 22050 -vcodec mpeg4 -b 2097k <output file.mp4>
Run Code Online (Sandbox Code Playgroud)
请帮我。先感谢您。
android ffmpeg android-studio android-ffmpeg video-compression
我在我的Android应用程序中使用ffmpeg库。压缩50 mb的视频文件通常需要50秒。我正在寻找一种可以在2-3秒内完成相同工作的解决方案,就像whatsapp一样。
我是一名Android应用程序开发人员,可能是什么方法,以及我需要研究什么才能为我的应用程序实现此功能?
我正在提高我的应用程序的性能。
我想将图像和视频压缩到最小尺寸,而不会造成任何质量损失,即无损压缩。
对于图像,我使用了imagemin包。它适用于png格式,但对于jpeg 格式,效率非常低。
对于视频,我找不到任何方法可以在不降低分辨率且不造成任何质量损失的情况下最小化视频大小。
尝试使用 Shahen 的 react-native-video-processing:
下面是代码:
compressVideo(source) {
const options = {
width: 800,
height: 800,
bitrateMultiplier: 3,
saveToCameraRoll: true,
saveWithCurrentDate: true,
removeAudio: true
};
ProcessingManager.compress(source, options)
.then(data => {
console.log(data);
this.setState({ base64String: data });
})
.catch(console.warn);
}
Run Code Online (Sandbox Code Playgroud)
但它在 Android 设备中出错。
{ [错误:压缩错误:失败。ffmpeg 版本 3.3.5 版权所有 (c) 2000-2017 FFmpeg 开发人员使用 gcc 4.8 (GCC) 配置构建:
兼容品牌:isommp42创建时间:2018-03-01T08:47:13.000000Z com.android.version:7.0持续时间:00:00:04.07,开始:0.000000,比特率:3366 kb:0(流)#0 : h264 (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 640x480, 3091 kb/s, SAR 1:1 DAR 4:3, 29,390btctc 元数据,3908kbtc :旋转
:90 创建时间:2018-03-01T08:47:13.000000Z
handler_name:VideoHandle 侧面数据:displaymatrix:旋转 -90.00 度流#0:1(eng):音频:aac(mp4a / …
我尝试使用 ffmpeg 将视频缩放到 375x500。
ffmpeg -i input.mp4 -s 375x500 -c:a copy output.mp4
收到此错误,[libx264 @ 0x5639d358ad60] 宽度不能被 2 整除 (375x500) 初始化输出流时出错 0:0 -- 打开输出流 #0:0 的编码器时出错 - 可能参数不正确,例如 bit_rate、速率、宽度或高度。
我尝试了很多命令,但没有得到解决方案。
今天早些时候,我发布了一个关于按编码顺序使用关键帧进行帧提取的问题(此处),我尝试运行答案之一中提供的命令,但 ffmpeg 返回:
Unrecognized option 'frame_pts'.
Run Code Online (Sandbox Code Playgroud)
分割参数列表时出错:未找到选项
有任何线索如何使 ffmpeg 识别“frame_pts”选项吗?我运行的完整命令是:
ffmpeg -i input.mp4 "select='eq(pict_type\,I)" -vsync 0 -frame_pts 1 thumbnails-%02d-I.png
Run Code Online (Sandbox Code Playgroud) -q:v 1
您能否提供ffmpeg 中处理视频/图像质量和压缩的参数的链接或解释。
让我解释...
for f in *
do
extension="${f##*.}"
filename="${f%.*}"
ffmpeg -i "$f" -q:v 1 "$filename"_lq."$extension"
rm -f "$f"
done
Run Code Online (Sandbox Code Playgroud)
上面的ffmpegfor
循环压缩工作目录中的所有图像和视频,它基本上会降低质量,从而导致文件大小变小(期望的结果)。
我对-q:v 1
这个for
循环的论证最感兴趣。参数1
中的-q:v 1
控制压缩量。但我找不到任何描述如何更改 的值1
以及描述其作用的文档。是百分比吗?乘数?如何调节这个旋钮?我可以/应该使用负值吗?仅整数?最小值/最大值?ETC。
我从官方文档开始,但我能找到的最好的内容是关于视频质量的部分,并且-q
标志描述很少。
-frames[:stream_specifier] 帧计数(输出,每个流)
在帧计数帧之后停止写入流。
。
-q[:stream_specifier] q(输出,每个流)
-qscale[:stream_specifier] q(输出,每个流)
使用固定质量比例 (VBR)。q/qscale 的含义取决于编解码器。如果在没有stream_specifier的情况下使用qscale,那么它仅适用于视频流,这是为了保持与以前的行为的兼容性,并且为2个不同的编解码器(音频和视频)指定相同的编解码器特定值通常不是没有stream_specifier时的预期目的用来。
我正在尝试压缩项目中的视频,因此使用 silicompressor。但是当我通过它时,我的应用程序获取并挂起目标路径并且什么也不做。但它确实在我的存储中创建了一个文件夹并存储了一个视频文件,但是当我尝试播放它时,它会出现错误“无法播放视频”。这个文件的大小为 24 字节。所以看看,告诉我做错了什么。
这是我的代码。
File destinationPath = new File("/storage/emulated/0/DCIM/Camera/myvideo");
destinationPath.mkdir();
File file = new File(destinationPath.getAbsolutePath());
Toast.makeText(Post.this, "folder: " + file, Toast.LENGTH_SHORT).show();
try {
filePath = SiliCompressor.with(Post.this).compressVideo(videouri, file.toString());
video.setVideoURI(Uri.parse(filePath));
Toast.makeText(Post.this, "Completed", Toast.LENGTH_SHORT).show();
} catch (URISyntaxException e) {
Log.d("EXCEPTION", e.toString());
Toast.makeText(Post.this, e.getMessage(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 我在我的 javascript 项目中包含了视频上传功能。项目中从本地存储选择视频正在上传,但我希望视频文件的大小被压缩并上传。我的主要重点是上传相机和手机录制的视频,尺寸非常大。我使用 HTML 5 来选择视频文件。
<input type= "file" id="fileselect" name="uploadvideo" accept=".mp4, .mov, .webm"/>
Run Code Online (Sandbox Code Playgroud)
视频文件的大小应在上传前进行压缩。
ffmpeg ×4
android ×3
compression ×3
javascript ×3
video ×2
h.264 ×1
html5-video ×1
keyframe ×1
linux ×1
node.js ×1
npm ×1
python ×1
react-native ×1