【问题标题】:Redirect file contents from android to computer [duplicate]将文件内容从android重定向到计算机[重复]
【发布时间】:2017-12-12 00:32:46
【问题描述】:

我正在执行 adb shell 调用以使用 ffmpeg 创建一个新的图像文件。目前,我将ffmpeg转换后输出的jpg保存到设备中,然后使用adb pull将文件拉到电脑上。我想知道我是否可以不必先将其保存在 android 上,而直接将其保存到计算机上。

这是我试图运行的代码(基本上):

adb shell "screencap | /data/local/tmp/tools/./ffmpeg -f rawvideo -vcodec mjpeg -q:v 5 -" > C:/Users/User/Desktop/new.jpg

不幸的是,当我运行它时,它不仅会复制 ffmpeg 调用的输出数据,还会复制本应打印到 adb 标准输出的所有内容。所以我留下了一个 jpg 文件,其中包含我所有的图像数据,但顶部有一堆单词(adb shell 调用的输出)。

谢谢。

【问题讨论】:

    标签: android adb io-redirection


    【解决方案1】:

    如果您知道 jpg 文件的开头字符串,则可以在重定向到文件之前将其通过管道传输到 sed:

    adb shell "screencap | /data/local/tmp/tools/./ffmpeg -f rawvideo -vcodec mjpeg -q:v 5 - | sed -n ‘/PATTERN/,$p’" > C:/Users/User/Desktop/new.jpg
    

    Sed 将从模式匹配到文件末尾,并仅将这些行打印到您的 jpg 文件中。

    【讨论】:

      【解决方案2】:

      如果您的 Android 设备或 Windows 主机有 grep 实用程序,您可以通过 grep -v 命令管道输出并抑制多余的行。为了尽量减少需要提供给 grep 的模式数量,您可以通过 -loglevel quiet 将 ffmpeg 日志记录选项设置为 quiet。

      【讨论】:

      • loglevel quiet 将输出减少到零,但图像仍然无法打开...有什么建议吗?
      • 听起来还有一些额外的行需要使用 grep 等过滤掉。您是否检查了生成的文件以查看顶部和/或底部添加了哪些额外的内容?由于您使用的是 Windows,因此您可能必须手动查找并安装类似 grep 的工具。
      • 可能,但我相信这实际上是现在的问题。 stackoverflow.com/questions/13578416/…
      • 哦,是的。我忘记了从 Android-Linux 到 Windows 会涉及行尾转换,而 ADB 会尽职尽责地为您进行更改。正如您对链接的 S/O Q&A 的几个答案中所述,即时修复行尾相当容易;不幸的是,这意味着使用另一个 Linux 风格的命令行工具,例如 sed。
      猜你喜欢
      • 2012-06-12
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      相关资源
      最近更新 更多