python scrcpy录屏损坏
时间: 2025-06-04 18:07:42 浏览: 19
### Python 使用 Scrcpy 录屏时文件损坏的解决方案
在使用 Python 调用 Scrcpy 进行录屏时,如果通过直接终止进程的方式停止录屏,可能会导致录屏文件损坏[^2]。这是由于在录制过程中,Scrcpy 需要正确地捕获信号并完成文件保存操作。如果进程被强制终止,Scrcpy 无法完成这一过程,从而导致文件损坏。
为了解决这一问题,可以参考以下方法:
1. **通过发送 Ctrl+C 信号停止录屏**
在 Python 中,可以通过 `subprocess` 模块启动 Scrcpy 的录屏进程,并使用 `console_ctrl.send_ctrl_c` 方法向子进程发送 Ctrl+C 信号来优雅地停止录屏。这种方式能够确保 Scrcpy 正确捕获信号并完成文件保存操作[^4]。
```python
import subprocess
import console_ctrl # 需要安装 pip install console-ctrl
SCRCPY_PATH = "scrcpy" # Scrcpy 可执行文件路径
SERIAL = "your_device_serial" # 设备序列号
TMP_PATH = "./output" # 输出目录
command = f"{SCRCPY_PATH} --serial {SERIAL} --no-display --record {TMP_PATH}/file.mp4"
record_proc = subprocess.Popen(command, shell=True, creationflags=subprocess.CREATE_NEW_CONSOLE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def stop_recording():
if record_proc.poll() is None: # 如果进程还在运行
console_ctrl.send_ctrl_c(record_proc.pid) # 发送 Ctrl+C 信号
```
2. **避免使用 `pkill` 或直接终止进程**
使用 `adb shell pkill app_process` 来杀死 Scrcpy-server 进程可能导致录屏文件损坏[^1]。因此,建议避免这种直接终止进程的方式,而采用上述发送 Ctrl+C 信号的方法。
3. **升级 Scrcpy 版本**
确保使用的 Scrcpy 是最新版本(如 v1.24),因为较新的版本可能修复了与录屏文件损坏相关的问题[^3]。
4. **选择合适的录屏格式**
在某些情况下,选择 MKV 格式进行录屏可以减少文件损坏的风险[^1]。可以通过命令行参数 `--record-format mkv` 指定录屏格式。
```python
command = f"{SCRCPY_PATH} --serial {SERIAL} --no-display --record {TMP_PATH}/file.mkv --record-format mkv"
```
5. **检查设备兼容性**
如果仍然遇到问题,可以尝试使用 Android 系统自带的 `screenrecord` 工具作为备用方案[^1]。部分设备可能存在兼容性问题,导致 Scrcpy 的录屏功能不稳定。
### 注意事项
- 确保在调用 Scrcpy 前已正确配置 ADB 和 Scrcpy 的环境变量。
- 如果需要自动化控制录屏开始和结束时间,可以在 Python 中结合定时器或事件触发机制实现。
```python
import time
def start_recording():
global record_proc
record_proc = subprocess.Popen(command, shell=True, creationflags=subprocess.CREATE_NEW_CONSOLE)
def stop_recording_after(seconds):
time.sleep(seconds)
stop_recording()
```
阅读全文
相关推荐
















