Android 投屏技术

命令行

利用 screenrecord 和 ffmpeg 投屏

1
adb exec-out screenrecord --output-format h264 --size 640x310 - | ffmpeg -i - -f sdl -

可以根据选择自由调整屏幕

使用 Python PyAV 库解析

PyAV 是 python 的 ffmpeg 绑定,并且提供 wheel 包,就算没装 ffmpeg 也能用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import subprocess
import sys

import av


class Wrapper:
"""
Wrapper which only exposes the `read` method to avoid PyAV
trying to use `seek`.
"""

name = "<wrapped>"

def __init__(self, fh):
self._fh = fh

def read(self, buf_size):
return self._fh.read(buf_size)


wrapper = Wrapper(sys.stdin.buffer)
with av.open(wrapper, "r") as container:
for frame in container.decode():
print(frame)
pil_image = frame.to_image()
pil_image.save("test.jpg")
break

代码保存为test.py,通过下面的命令就可以解析

1
adb exec-out screenrecord --output-format=h264 - | python test.py

打开 test.jpg 就可能看到一张完美的截图了。

如果手机上没有 screenrecord 这个程序,也可以通过 scrcpy 来代替。这里就暂时不写了。

参考

作者

codeskyblue

发布于

2023-07-20

更新于

2024-05-13

许可协议