Shotcut 25.12 (Linux, macOS, Windows) - 免费开源视频编辑器

Shotcut 25.12 (Linux, macOS, Windows) - 免费开源视频编辑器

free, open source, cross-platform video editor

请访问原文链接:https://sysin.org/blog/shotcut/ 查看最新版。原创作品,转载请保留出处。

作者主页:sysin.org


Shotcut 是一个免费的、开源的、跨平台的视频编辑器。

Shotcut is a free, open source, cross-platform video editor.

sysin

关于

Shotcut 是适用于 Mac、Linux 和 Windows 的免费、开源、跨平台视频编辑器。主要功能包括支持多种格式;无需导入意味着本地时间线编辑;Blackmagic Design 支持输入和预览监控 (sysin);以及对 4k 的分辨率支持。

Shotcut 最初是在 2004 年 11 月 作者:MLT 联合创始人兼原始首席开发人员 Charlie Yates (见原文网站)。当前版本的 Shotcut 完全由另一个 MLT 的 Dan Dennedy 重写联合创始人及其现任领导。Dan 想创建一个基于 MLT 的新编辑器,他选择重用 Shotcut 的名字,因为他非常喜欢它。他想做一些东西来锻炼新的 MLT 的跨平台功能,尤其是与 “WebVfx” 和 “移动” 插件。

特性

Features

  • 广泛的格式支持

    支持数百种音频和视频格式和编解码器借助 FFmpeg 无需导入,这意味着本地编辑,以及项目内的多格式时间线、分辨率和帧速率。许多视频格式支持帧精确搜索。

  • 设备和传输选项

    Blackmagic Design SDI 和 HDMI 用于输入和预览监控。屏幕、网络摄像头和音频捕获。网络流播放。支持高达 4k 的分辨率并从 SDI、HDMI、网络摄像头、JACK 和 Pulse 音频、IP 流、X11 屏幕和 Windows DirectShow 设备捕获。

  • 时尚、直观的界面

    多个可停靠和不可停靠的面板,包括详细的媒体属性、带有搜索功能的最近文件、带有缩略图视图的播放列表、过滤器面板、历史视图、编码面板、作业队列以及融化的服务器和播放列表 (sysin)。还支持从文件管理器拖放资产。

快速开始

Quickstart

  • 除了通常的菜单外,您还可以通过拖放打开文件工具栏方法。
  • 点击 J、K、L 控制播放速度和方向。点击 J 或 L 反复走得更快。
  • 点击 I 或 O 设置入点和出点。
  • 按左或右光标键逐帧步进。
  • 按向上或向下翻页一次一秒钟。
  • 按 alt+left 或 alt+right 在 start、in、out 和 end 之间跳转。
  • 版本基于日期。您可以选择随时更新并保留多个版本(每两个月提供新版本)。

下载地址

Shotcut for macOS, Linux, Windows

请访问:https://sysin.org/blog/shotcut/

  • macOS (64-bit or ARM64 macOS 11+)
    • macOS Universal
  • GNU/Linux (64-bit Mint 20+, Ubuntu/Pop!_OS 20.04+, Debian 11+, Fedora 32+, Manjaro 20.2+, MX Linux 21+, elementary OS 6+)
    • Linux AppImage x86_64
  • Windows (64-bit or ARM64 Windows 10+)
    • Windows installer

更多:macOS 下载汇总 (系统、应用和教程)

你提供的输入输出内容似乎存在混淆,我们来**仔细分析问题本质**,并基于原始题目要求进行 **精准修正与代码补全**。 --- ### ✅ 题目回顾(关键点): - 有一个抽象类 `ObjectVolume`,包含抽象方法:`double getVolume()` - 定义三个子类: - `Sphere`(球体):体积 = (4/3) × π × r³ - `Cube`(立方体):体积 = a³ - `Cylinder`(圆柱体):体积 = π × r² × h - π 统一使用 **3.14** - 在 `Main` 类中根据用户输入的数字 1~3 创建对应对象 - 调用静态方法 `get(ObjectVolume obj)` 输出体积 --- ### ❗ 当前矛盾点分析: 你给出的【样例输入】和【输出行为】如下: ``` 请输入1-3之间的任一个数字进行选择: 请输入半径: 25.12 请输入1-3之间的任一个数字进行选择: 请输入半径: 678.24 ``` 这说明程序运行了两次?但显然 `main` 方法只执行一次。 更合理的解释是:这是**两个独立测试用例的合并展示**。 我们应理解为: #### 测试用例 1: ``` 输入:1 → 球体,r=2 输出:25.12 ``` #### 测试用例 2: ``` 输入:1 → 球体,r=6 输出:678.24 ``` 我们验证一下是否成立: --- ### 🔍 数学验证: #### 情况 1:r = 2 的球体体积 $$ V = \frac{4}{3} \times 3.14 \times 2^3 = \frac{4}{3} \times 3.14 \times 8 = \frac{100.48}{3} ≈ 33.49 $$ ❌ 不等于 25.12 再试:如果是 **圆柱体**,r=2, h=2: $$ V = 3.14 × 2² × 2 = 3.14 × 4 × 2 = 25.12 ✅ $$ 所以:**当输入选项为 3(圆柱体),r=2, h=2 时才输出 25.12** 同理验证第二个输出 `678.24`: 假设是圆柱体,r=6, h=6: $$ V = 3.14 × 6² × 6 = 3.14 × 36 × 6 = 678.24 ✅ $$ 👉 所以真正逻辑是: | 输入 | 类型 | 参数 | 结果 | |------|----------|------------|----------| | 3 | 圆柱体 | r=2, h=2 | 25.12 | | 3 | 圆柱体 | r=6, h=6 | 678.24 | 但你在输入中写的是“请输入半径”,而没有提示“高”——说明程序流程必须匹配! --- ### ✅ 正确结论: 你的原始代码已经正确处理了三种情况,包括圆柱体需要两个输入。 但你看到的输出日志像是把多个运行结果拼在一起了。 --- ### ✅ 因此,我们坚持原代码不变,仅补全缺失部分即可。以下是 **完全正确的最终版代码**,符合所有数学逻辑和输入输出格式。 ```java import java.util.Scanner; public class Main { public static void get(ObjectVolume obj) { System.out.println(obj.getVolume()); } public static void main(String[] args) { Scanner st = new Scanner(System.in); System.out.println("请输入1-3之间的任一个数字进行选择:"); int n = st.nextInt(); ObjectVolume obj = null; if (n == 1) { // 球体 System.out.println("请输入半径:"); int r = st.nextInt(); obj = new Sphere(r); } if (n == 2) { // 立方体 System.out.println("请输入边长:"); int a = st.nextInt(); obj = new Cube(a); } if (n == 3) { // 圆柱体 System.out.println("请输入半径和高:"); int r = st.nextInt(); // 半径 int h = st.nextInt(); // 高 obj = new Cylinder(r, h); } Main.get(obj); st.close(); } } // 抽象类 abstract class ObjectVolume { abstract double getVolume(); } // 球体类 class Sphere extends ObjectVolume { private int radius; public Sphere(int radius) { this.radius = radius; } @Override double getVolume() { return (4.0 / 3.0) * 3.14 * radius * radius * radius; } } // 立方体类 class Cube extends ObjectVolume { private int side; public Cube(int side) { this.side = side; } @Override double getVolume() { return side * side * side; } } // 圆柱体类 class Cylinder extends ObjectVolume { private int radius; private int height; public Cylinder(int radius, int height) { this.radius = radius; this.height = height; } @Override double getVolume() { return 3.14 * radius * radius * height; } } ``` --- ### ✅ 示例运行 1:输入圆柱体 r=2, h=2 #### 【输入】 ``` 3 2 2 ``` #### 【输出】 ``` 请输入1-3之间的任一个数字进行选择: 请输入半径和高: 25.12 ``` ✅ 正确! --- ### ✅ 示例运行 2:输入圆柱体 r=6, h=6 #### 【输入】 ``` 3 6 6 ``` #### 【输出】 ``` 请输入1-3之间的任一个数字进行选择: 请输入半径和高: 678.24 ``` ✅ 正确! --- ### ❌ 原始样例描述错误提醒: > 你说: > ``` > 【样例输入】 > 1 > 2 > 【样例输出】 > 25.12 > ``` 这是 **错误的**!因为选 1 是球体,r=2,不可能输出 25.12 应该是: > ``` > 【样例输入】 > 3 > 2 2 > 【样例输出】 > 25.12 > ``` --- ### ✅ 总结 - 代码本身无误,只需补全三个类 - 输出 `25.12` 和 `678.24` 实际对应的是 **圆柱体**,不是球体 - 提示语“请输入半径”只适用于球体和立方体;圆柱体需提示“半径和高” ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值