背景:当你在看某片时,发现视频视角是"---"这样的,而更好的观感视角是 "|"这样的,为了旋转视频,你下载了各种编辑软件,但,不是付费的就是非常耗时,而且转换的像素还不好,怎么方便操作便成了你心结?
利用FFmpeg 视频旋转功能,并启用多线程的方式加快视频的处理:
java
ffmpeg -threads 4 -i input.mp4 -vf "transpose=1" -metadata:s:v:0 rotate=90 output.mp4
-
ffmpeg
: FFmpeg命令行工具的名称,用于处理音视频文件。 -
-threads 4
: 用于设置FFmpeg使用的线程数。在这个例子中,设置为4,表示使用4个线程来处理视频。 -
-i input.mp4
: 输入文件的路径和名称。-i
用于指定输入文件。 -
-vf "transpose=1"
: 视频过滤器选项,用于对视频进行旋转操作。transpose=1
表示将视频逆时针旋转90度。 -
-metadata:s:v:0 rotate=90
: 这是设置视频元数据的选项,用于设置视频旋转的角度。:s:v:0
表示设置视频流的第一个流的元数据。在这个例子中,设置视频旋转角度为90度。-metadata:s:v:0 rotate=90
的作用是将输出视频文件的第一个视频流(索引为0)的旋转角度元数据设置为90度。这是为了确保播放器在播放视频时能够正确地根据旋转角度进行渲染。通常情况下,如果视频被旋转了,但是没有正确地设置旋转元数据,播放器可能会错误地显示视频。因此,通过设置旋转元数据,可以确保视频在播放时以正确的方向显示。
java
try {
// 构建FFmpeg命令
ProcessBuilder builder = new ProcessBuilder(
ffmpegPath,
// "-threads", "4", // 设置线程数为4
"-i", inputVideo,
"-vf", "transpose=1",
"-metadata:s:v:0", "rotate=90",
outputVideo
);
// 启动进程并等待命令执行完成
builder.inheritIO();// 将FFmpeg输出重定向到Java的标准输出
Process process = builder.start();
process.waitFor();
System.out.println("Watermark added successfully!");
// 打印命令执行结果
if (process.exitValue() == 0) {
System.out.println("FFmpeg command executed successfully.");
} else {
System.out.println("FFmpeg command failed.");
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}