【问题标题】:Grayscale streaming from raw video using FFMPEG使用 FFMPEG 从原始视频进行灰度流式传输
【发布时间】:2012-09-08 19:57:49
【问题描述】:

我有一个原始视频文件 (testvideo_1000f.raw),我正在尝试使用 ffmpeg 以灰度流式传输并将灰度视频输出到 output.swf。我用来执行此操作的命令是:

ffmpeg/ffmpeg -qmin 2 -qmax 31 -s 320x240 -f rawvideo -flags gray -pix_fmt:output gray -an -i testvideo_1000f.raw output.swf

但是,此命令的结果是灰度视频流,但仍包含一些色度数据。该命令的输出粘贴在下面:

    3 [volta]/home/student/elliott> ffmpeg/ffmpeg -qmin 2 -qmax 31 -s 320x240 -f rawvideo -flags gray -pix_fmt:output gray -an -i testvideo_1000f.raw output.swf
ffmpeg version N-41632-g2b1fc56 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jul 29 2012 10:27:26 with gcc 4.1.2 20080704 (Red Hat 4.1.2-51)
  configuration: 
  libavutil      51. 58.100 / 51. 58.100
  libavcodec     54. 25.100 / 54. 25.100
  libavformat    54.  6.101 / 54.  6.101
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 80.100 /  2. 80.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
*** CHOOSING 8
[rawvideo @ 0xdda9660] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'testvideo_1000f.raw':
  Duration: N/A, start: 0.000000, bitrate: N/A
   Stream #0:0: Video: rawvideo (Y800 / 0x30303859), gray, 320x240, 25 tbr, 25 tbn, 25 tbc
File 'output.swf' already exists. Overwrite ? [y/N] y
w:320 h:240 pixfmt:gray tb:1/25 fr:25/1 sar:0/1 sws_param:flags=2
[ffmpeg_buffersink @ 0xddb7b40] No opaque field provided
[format @ 0xddb7d40] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[auto-inserted scaler 0 @ 0xddb7920] w:320 h:240 fmt:gray sar:0/1 -> w:320 h:240 fmt:yuv420p sar:0/1 flags:0x4
*** CHOOSING 8
Output #0, swf, to 'output.swf':
  Metadata:
    encoder         : Lavf54.6.101
   Stream #0:0: Video: flv1, yuv420p, 320x240, q=2-31, 200 kb/s, 90k tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> flv)
Press [q] to stop, [?] for help
Truncating packet of size 76800 to 1 2875kB time=00:00:40.84 bitrate= 576.7kbits/s    
frame= 1500 fps=1035 q=24.8 Lsize=    4194kB time=00:01:00.00 bitrate= 572.6kbits/s    
video:4166kB audio:0kB global headers:0kB muxing overhead 0.669245%

我对 FFMPEG 还很陌生,恐怕我在命令行中使用了错误的语法或错误的参数。由于某种原因,输出的格式是 yuv420p。我一直在尝试寻找这个答案,但没有运气。任何人都可以帮助我并告诉我为什么输出在 yuv420p 中被格式化,而我给出的命令是 8 位灰度?任何帮助将不胜感激。谢谢。

马克·埃利奥特

【问题讨论】:

  • 我还应该注意,我试图通过完全删除色度信息来获得灰度视频,而不是仅仅将其归零。我只想传输亮度数据。再次感谢。
  • 查看stackoverflow.com/q/8349352/220060了解类似信息。

标签: ffmpeg grayscale


【解决方案1】:

没有 ffmpeg 标志允许您这样做。

视频格式是为 YUV 而设计的,而不仅仅是 Y。因此,如果不修改您的方法,您将无法做到这一点。您将不得不使用 mjpeg 来获取仅 Y 流。 Mjpeg 支持 8 位输出,但我不认为 mjpeg 可以放在 swf 中。如果这足以满足您的目的,它可以进入 mp4 或 ts。

当然,另一个选项是解码/显示端只解码/显示亮度而不是色度。同样,这是一个自定义要求,不直接支持。

【讨论】:

  • 感谢您的意见。如果视频格式不是仅针对亮度设计的,那么在 ffmpeg 中定义的灰度像素格式(GRAY8、GRAY16LE、GRAY16BE 等)是如何实现的?看起来这些格式的结构只有一个组件。这是不正确的吗?
  • ffmpeg 定义了各种格式。并非所有格式都适用于所有编解码器。例如。 JPEG 可以进入 GREY8,但说 MPEG2 不是。
  • 在 ffmpeg 文档中的任何位置是否有哪些代码支持哪些像素格式的列表?
  • @user1657208,不,因为它与编解码器及其功能有关,而不是 ffmpeg 本身。一般来说,图像将支持大多数格式。大多数标准视频编解码器 [MPEG1/2/4、H.264、WMV7/9、RV、H.263] 仅是 YUV420 格式。有些也支持 422/444。
  • 好的,我会调查的。再次感谢!!
【解决方案2】:
ffmpeg -i VTS_05_1.VOB -pix_fmt gray -vcodec rawvideo -f yuv4mpegpipe - | ffmpeg -y -f yuv4mpegpipe -i - -vcodec libtheora out.avi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2011-09-30
    • 2018-06-25
    • 1970-01-01
    • 2013-12-26
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多