如何将两个 ffmpeg 查询合并到一个管道?
How to merge two ffmpeg queries to one pipe?
我有一个拜耳图像序列(100 张图像)(图像示例:https://drive.google.com/file/d/1V8HwOuIo9PBX3ix0eKFQFGimskU_H0mN/view?usp=sharing),我需要做的是
- 去拜耳
- 压缩
.h264
文件中的结果
所以,我使用了两个查询
去拜耳
ffmpeg -y -i D:\Buffer\Bayer\Time%7d_img.bmp -vf format=gray -f rawvideo pipe: -hide_banner | ffmpeg -y -f rawvideo -pixel_format bayer_rggb8 -video_size 4104x3006 -i pipe: -frames 100 D:\Buffer\res\result%7d.png -hide_banner
和压缩
ffmpeg -framerate 30 -i D:\Buffer\res\result%7d.png -c:v hevc_nvenc -qp 0 D:\Buffer\res264\test5.h264 -hide_banner
我需要将这两个查询合并为一个,我试过这样做
ffmpeg -y -i D:\Buffer\Bayer\Time%7d_img.bmp -vf format=gray -f rawvideo pipe: -hide_banner | ffmpeg -y -f rawvideo -pixel_format bayer_rggb8 -video_size 4104x3006 pipe: -hide_banner | ffmpeg -c:v hevc_nvenc -qp 0 -i pipe D:\Buffer\res264\test5.h264 -hide_banner
但是我在这里遇到错误
Input #0, image2, from 'D:\Buffer\Bayer\Time%7d_img.bmp':
Output #0, rawvideo, to 'pipe:': Duration:
00:00:40.0Output file #0 does not contain any stream0
, start: 0.000000, bitrate: N/AUnknown decoder 'hevc_nvenc'
Stream #0:0: Video: bmp, pal8, 2464x2056, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (bmp (native) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, rawvideo, to 'pipe:':
Metadata:
encoder : Lavf58.29.100
Stream #0:0: Video: rawvideo (Y800 / 0x30303859), gray, 2464x2056, q=2-31, 1013196 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.54.100 rawvideo
av_interleaved_write_frame(): Invalid argument
Error writing trailer of pipe:: Invalid argument
frame= 1 fps=0.0 q=-0.0 Lsize= 4947kB time=00:00:00.04 bitrate=1013196.8kbits/s speed= 2x
video:4947kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
Conversion failed!
我做错了什么?
几点注意事项:
- 无需先将帧转换为 PNG。
hevc_nvenc
应用 H.265 编解码器,并且您正在使用 .h264
文件扩展名。
我尝试了 h264_nvenc
,但出现错误,因为分辨率太高(对于 H.264 NVIDIA 编码器)。
result%7d.png
应该是 result%07d.png
- 建议select像素格式(yuv420p或yuv444p)。
语法如下:
ffmpeg -y -hide_banner -i Time%07d_img.bmp -vf format=gray -f rawvideo pipe: | ffmpeg -hide_banner -y -framerate 30 -f rawvideo -pixel_format bayer_rggb8 -video_size 4104x3006 -i pipe: -c:v hevc_nvenc -qp 0 -pix_fmt yuv444p test5.hevc
我有一个拜耳图像序列(100 张图像)(图像示例:https://drive.google.com/file/d/1V8HwOuIo9PBX3ix0eKFQFGimskU_H0mN/view?usp=sharing),我需要做的是
- 去拜耳
- 压缩
.h264
文件中的结果
所以,我使用了两个查询
去拜耳
ffmpeg -y -i D:\Buffer\Bayer\Time%7d_img.bmp -vf format=gray -f rawvideo pipe: -hide_banner | ffmpeg -y -f rawvideo -pixel_format bayer_rggb8 -video_size 4104x3006 -i pipe: -frames 100 D:\Buffer\res\result%7d.png -hide_banner
和压缩
ffmpeg -framerate 30 -i D:\Buffer\res\result%7d.png -c:v hevc_nvenc -qp 0 D:\Buffer\res264\test5.h264 -hide_banner
我需要将这两个查询合并为一个,我试过这样做
ffmpeg -y -i D:\Buffer\Bayer\Time%7d_img.bmp -vf format=gray -f rawvideo pipe: -hide_banner | ffmpeg -y -f rawvideo -pixel_format bayer_rggb8 -video_size 4104x3006 pipe: -hide_banner | ffmpeg -c:v hevc_nvenc -qp 0 -i pipe D:\Buffer\res264\test5.h264 -hide_banner
但是我在这里遇到错误
Input #0, image2, from 'D:\Buffer\Bayer\Time%7d_img.bmp':
Output #0, rawvideo, to 'pipe:': Duration:
00:00:40.0Output file #0 does not contain any stream0
, start: 0.000000, bitrate: N/AUnknown decoder 'hevc_nvenc'
Stream #0:0: Video: bmp, pal8, 2464x2056, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (bmp (native) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, rawvideo, to 'pipe:':
Metadata:
encoder : Lavf58.29.100
Stream #0:0: Video: rawvideo (Y800 / 0x30303859), gray, 2464x2056, q=2-31, 1013196 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.54.100 rawvideo
av_interleaved_write_frame(): Invalid argument
Error writing trailer of pipe:: Invalid argument
frame= 1 fps=0.0 q=-0.0 Lsize= 4947kB time=00:00:00.04 bitrate=1013196.8kbits/s speed= 2x
video:4947kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
Conversion failed!
我做错了什么?
几点注意事项:
- 无需先将帧转换为 PNG。
hevc_nvenc
应用 H.265 编解码器,并且您正在使用.h264
文件扩展名。
我尝试了h264_nvenc
,但出现错误,因为分辨率太高(对于 H.264 NVIDIA 编码器)。result%7d.png
应该是result%07d.png
- 建议select像素格式(yuv420p或yuv444p)。
语法如下:
ffmpeg -y -hide_banner -i Time%07d_img.bmp -vf format=gray -f rawvideo pipe: | ffmpeg -hide_banner -y -framerate 30 -f rawvideo -pixel_format bayer_rggb8 -video_size 4104x3006 -i pipe: -c:v hevc_nvenc -qp 0 -pix_fmt yuv444p test5.hevc