V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  xinghen57  ›  全部回复第 5 页 / 共 31 页
回复总数  611
1  2  3  4  5  6  7  8  9  10 ... 31  
本地搭个服务端可否?
视频换 vp9 等最新编码,体积能比 x.264 小一半。
331 天前
回复了 easyii 创建的主题 iOS iOS17.2 新系统有人升级吗?
iPhone11 就不掺和 iOS 17 了。
@jurassic2long 赛博贤者时间,这名字真好
@Richex #16 刚才的交流之后,也有类似的猜测。总是,再次感谢。
@Richex #14 exit code 为 0 ,我打错了。

> 我的理解是 ffprobe -i 'video.mp4' 在终端输出的那些信息 ffmpeg 官方认为只是辅助信息或者说是调试信息,并不作为程序输出,所以 exit 0 并且 stdout 是空算是正常情况。

你说的这种思路,我特意用 yt-dlp 对比了一下。还真是这样。

yt-dlp 中有一条输出:
“WARNING: [youtube] Preferring "zh-CN" translated fields. Note that some metadata extraction may fail or be incorrect.”
这条输出字面上应属于 warning ,但实际却被输出到 stderr ,在 powershell output stream 的编号是 2 。

ffprobe 也是类似的“选择”,姑且认为是 ffmpeg 的选择。如果说是辅助或调试信息,放 information stream 或 debug stream 中可能更不容易让人迷惑。毕竟 powershell 提供了 6 条 stream ,其中就有 information stream (编号 6 ) 和 debug stream (编号 5 )。

我不太确定 bash 中是否只有 stdin 、stdout 和 stderr 。如果只有这 3 个,这么设计也没问题,但如果和 powershell 一样有多个 output stream ,辅助调试信息放 stderr 就容易让不熟悉的人迷惑。

ffprobe 的标准格式是 “ ffprobe [OPTIONS] INPUT_FILE”。
我当时默认 “ffprobe -i 'video.mp4'” 输出应该放到 stdout ,打算从其输出提取信息却遇到无法提取情况,最后发现原因是输出被放到了 stderr 。因此,产生了是否有现成命令识别 output stream 编号的想法。
@Richex #12 感谢回答。
通常的逻辑确是你说的这样。通常 error 信息会有 error 提示。exit code 确是可以判断正常与否。
因此,我认为 exit code 0 的输出应该走 stdout stream 。

ffprobe -i 'video.mp4'

上面命令,exit code 0 ,但输出却走了 stderr 。

而你给出的命令

ffprobe -i "in.mp4" -show_format > info.txt

它的输出使用的是 stdout stream ,命令的 exit code 1 。

很令人费解。

也是因此,才会有帖子的疑问,想找有没有显示输出 stream 编号的命令。
@Richex #8 并不行的。

情况一:
```powershell

ffprobe -i 'video.mp4'

echo $?
```
此时 echo 输出 true ,ffprobe 输出实际走的 stderr 。

情况二:
```powershell

ffmpeg -i 'video.mp4'

echo $?
```
此时 echo 输出 false ,ffmpeg 输出实际走的 stderr 。

上述两种情况,powershell 内核的 windows terminal 都会显示 ffmpeg 或 ffprobe 的输出。
也即 echo $? 无法判断输出用的是 stream 几。
@Tumblr #6 这两篇我都看过,里面只是介绍了 stream 。
下面我找到的这篇有兴趣兄台可以看看,说的更深一些。

Understanding Streams, Redirection, and Write-Host in PowerShell
https://devblogs.microsoft.com/scripting/understanding-streams-redirection-and-write-host-in-powershell/
@wangtian2020 #4
@ns09005264 #5
@Tumblr #6
@huangmiaomiao233 #7
感谢诸位。最简单直接的是用重定向,就像 @huangmiaomiao233 #7 说的,也即靠经验和调试。

其实我向寻找的是类似 Get-Member 的命令,直接可以显示输出内容去了 stream x ,貌似没有这类命令。
@matepi #1
```powershell
function Write-Messages
{

Write-Host "Host message"
Write-Output "Output message"
Write-Verbose "Verbose message"
Write-Warning "Warning message"
Write-Error "Error message"
Write-Debug "Debug message"
}

Write-Messages

# 输出结果如下

Host Messages
Output Messages
WARNING: Warning Messages
Write-Messages: Error Messages
```

上面的代码,可以看到,终端显示的输出,可能是 stdout ,也可能是 stderr ,还可能是 warning 。

所以如果在终端看到一段输出结果,怎么确定是 stdout ,或 stderr ,还是 warning ?
@matepi #1 谢谢,想问的不是重定向。
我的意思是,终端上有一行输出,如果没有报错信息,通常我会当成 stdout 。但 ffmpeg ,额,这个有报错信息,ffprobe ,这个没报错信息,它的输出却走的 stderr ,也即 stream 2 。
比如的代码

```
# powershell 下
ffprobe -i 'video.mp4'

# 输出如下
ffprobe version 6.0-full_build-www.gyan.dev Copyright (c) 2007-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Input #0, matroska,webm, from '.\洞穴 burrow.mkv':
Metadata:
ENCODER : Lavf60.3.100
Duration: 00:05:19.02, start: 0.000000, bitrate: 1756 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 1k tbn
Metadata:
HANDLER_NAME : ISO Media file produced by Google Inc.
VENDOR_ID : [0][0][0][0]
DURATION : 00:05:18.985000000
Stream #0:1(eng): Audio: opus, 48000 Hz, stereo, fltp
Metadata:
DURATION : 00:05:19.016000000

```

有什么方式能确定输出是走的 stdout 还是 stderr ,或者其他 stream 么?

查了官方文档,没找到相关内容。
@MiketsuSmasher #66 稳定性还没经历历史考验
有没有可能是国产化?
请问下 OP ,Momo 是在哪里下的?我没找到下载地址。酷安也没有呀
2023-08-21 22:40:44 +08:00
回复了 xinghen57 创建的主题 Android 安卓 root 后,防火墙类软件有推荐么
@rev1si0n #18 谢谢。已经了解了。iPhone 换 Android 进行中,见笑了。
@gadore #117 这有点太不方便了
1  2  3  4  5  6  7  8  9  10 ... 31  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1084 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 77ms · UTC 19:01 · PVG 03:01 · LAX 11:01 · JFK 14:01
Developed with CodeLauncher
♥ Do have faith in what you're doing.