是否可以将文本文件作为 stdinput 传递到其中,ffmpeg
以便从中读取文本文件中存在的所有参数?
像这样的东西:
ffmpeg < foo.txt
Run Code Online (Sandbox Code Playgroud)
其中foo.txt
包含
-i < file.mkv -c:v libx265 -preset medium "Encoded_file.mkv"
Run Code Online (Sandbox Code Playgroud)
原因:隐藏程序中的文件/参数,例如htop
可以使用预设文件为 ffmpeg 提供一些选项,请查看此处的文档。这样,只有预设文件的名称应该在 htop 中可见。有关预设文件的一些提示可以在此答案中找到。根据我从文档中收集的信息,您将无法隐藏编解码器参数,只能隐藏该编解码器的选项。更多实践示例可以在这里找到。
从您的示例来看,您没有提供任何可以写入预设文件的选项。
输入文件可以通过标准输入传递,方法是指定特殊文件-
并将文件内容通过管道传递给 ffmpeg,如下所示:
cat kooky_720p.mp4 | ffmpeg -i - -c:v libx265 -preset medium out.mkv
Run Code Online (Sandbox Code Playgroud)
该命令的 htop 显示如下所示: htop extract 1
同样,可以将输出文件更改为特殊文件,-
该文件会将转换后的文件重定向到标准输出。为此,您必须手动指定容器格式,因为 ffmpeg 将无法从文件名猜测它。
然后您可以将转换后的数据通过管道传输到目标文件。这可能看起来像这样:
cat kooky_720p.mp4 | ffmpeg -i - -c:v libx265 -preset medium -f matroska - > out.mkv
Run Code Online (Sandbox Code Playgroud)
该命令的 htop 显示如下所示:htop extract 2
我不知道在什么情况下 htop 会显示正在输入的文件,但我猜这是在 shell 内部处理的,所以它很可能也不会显示在zsh
.
为了也从 htop 中隐藏,cat input.ext
您可以使用像这样的小 python 脚本从文本文件中读取文件名并将内容复制到 stdout:
cat kooky_720p.mp4 | ffmpeg -i - -c:v libx265 -preset medium out.mkv
Run Code Online (Sandbox Code Playgroud)
用法可能是这样的,而在我们的示例中,filename.txt 是一个简单的文本文件,其中包含一行文本,其中包含要读取的视频文件kooky_720p.mp4
。
./pipe.py filename.txt | ffmpeg -i - -c:v libx265 -preset medium -f matroska - > out.mkv
Run Code Online (Sandbox Code Playgroud)
该命令的 htop 显示如下所示:htop extract 3
我相信这是您最接近从 htop 隐藏信息的方法。但请记住,仍然可以通过查看打开的文件句柄来获取正在处理的文件的信息,例如使用lsof
:
$ pidof python3
... 19013 ...
$ lsof -a -p 19013
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 19013 oliver cwd DIR 8,84 4096 31197648 /home/oliver/Videos/Kooky
python3 19013 oliver rtd DIR 8,66 4096 2 /
python3 19013 oliver txt REG 8,66 9992 7781733 /usr/bin/python3.6
python3 19013 oliver mem REG 8,66 11752 8020773 /usr/lib/python3.6/lib-dynload/grp.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 154344 7743563 /usr/lib/liblzma.so.5.2.3
python3 19013 oliver mem REG 8,66 36856 8012780 /usr/lib/python3.6/lib-dynload/_lzma.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 66960 7739636 /usr/lib/libbz2.so.1.0.6
python3 19013 oliver mem REG 8,66 21400 8012783 /usr/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 92056 7736853 /usr/lib/libz.so.1.2.11
python3 19013 oliver mem REG 8,66 36744 8012786 /usr/lib/python3.6/lib-dynload/zlib.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 21384 8020788 /usr/lib/python3.6/lib-dynload/_heapq.cpython-36m-x86_64-linux-gnu.so
python3 19013 oliver mem REG 8,66 3268160 7787080 /usr/lib/locale/locale-archive
python3 19013 oliver mem REG 8,66 1358168 7735428 /usr/lib/libm-2.26.so
python3 19013 oliver mem REG 8,66 10048 7735415 /usr/lib/libutil-2.26.so
python3 19013 oliver mem REG 8,66 14144 7735429 /usr/lib/libdl-2.26.so
python3 19013 oliver mem REG 8,66 3327592 7785916 /usr/lib/libpython3.6m.so.1.0
python3 19013 oliver mem REG 8,66 2065840 7735493 /usr/lib/libc-2.26.so
python3 19013 oliver mem REG 8,66 145336 7735516 /usr/lib/libpthread-2.26.so
python3 19013 oliver mem REG 8,66 176880 7735494 /usr/lib/ld-2.26.so
python3 19013 oliver 0u CHR 136,1 0t0 4 /dev/pts/1
python3 19013 oliver 1w FIFO 0,11 0t0 1276096 pipe
python3 19013 oliver 2u CHR 136,1 0t0 4 /dev/pts/1
python3 19013 oliver 3r REG 8,84 4363354747 31198177 /home/oliver/Videos/Kooky/kooky_720p.mp4
Run Code Online (Sandbox Code Playgroud)
如您所见,它列出了我在此处用作示例的视频文件。输出文件将显示在 ffmpeg 进程的句柄中。