gstreamer。解密&重密MKV,保存视频。

问题描述 投票:0回答:1

我试图重新编码一个MKV文件的音频部分,其中包含一些 video/x-h264 和一些 audio/x-raw. 我不能管理只是解调MKV和重塑它。 即使是简单的。

gst-launch-1.0 filesrc location=test.mkv ! matroskademux name=demux \
    matroskamux name=mux ! filesink location=test2.mkv \
    demux.video_00 ! mux.video_00 \
    demux.audio_00 ! mux.audio_00

惨遭失败,

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
WARNING: from element /GstPipeline:pipeline0/GstMatroskaDemux:demux: Delayed linking failed.
Additional debug info:
../gstreamer/gst/parse/grammar.y(506): gst_parse_no_more_pads (): /GstPipeline:pipeline0/GstMatroskaDemux:demux:
failed delayed linking pad  video_00 of GstMatroskaDemux named demux to pad  video_00 of GstMatroskaMux named mux
WARNING: from element /GstPipeline:pipeline0/GstMatroskaDemux:demux: Delayed linking failed.
Additional debug info:
../gstreamer/gst/parse/grammar.y(506): gst_parse_no_more_pads (): /GstPipeline:pipeline0/GstMatroskaDemux:demux:
failed delayed linking pad  audio_00 of GstMatroskaDemux named demux to pad  audio_00 of GstMatroskaMux named mux
ERROR: from element /GstPipeline:pipeline0/GstMatroskaDemux:demux: Internal data stream error.
Additional debug info:
../gst-plugins-good/gst/matroska/matroska-demux.c(5715): gst_matroska_demux_loop (): /GstPipeline:pipeline0/GstMatroskaDemux:demux:
streaming stopped, reason not-linked (-1)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

我最好的尝试 在上面提到的转码去,

gst-launch-1.0 -v filesrc location=test.mkv ! matroskademux name=demux \
   matroskamux name=mux ! filesink location=test2.mkv \
   demux.video_00 ! queue ! 'video/x-h264' ! h264parse ! mux. \
   demux.audio_00 ! queue ! rawaudioparse ! audioconvert ! audioresample ! avenc_aac ! mux.   

与同样的结果。 删除垫子名称 audio_00 导致 gst 卡在 PREROLLING.

我看到有几个人面临类似的问题。

如其中,只保留视频或只保留音频工作。

gstreamer video-processing gstreamer-1.0 mkv
1个回答
1
投票

我想 rawaudioparse 不应该在这里。我试过你的管道,也遇到了麻烦。我只是想出了一些东西,因为我会做它,它似乎工作。

filesrc location=test.mkv ! matroskademux \
  matroskademux0. ! queue ! audioconvert ! avenc_aac ! matroskamux ! filesink location=test2.mkv \
  matroskademux0. ! queue ! h264parse ! matroskamux0.

音频在我的情况下是:

Stream #0:0(eng): Audio: pcm_f32le, 44100 Hz, 2 channels, flt, 2822 kb/s (default)

另一种格式可能需要额外的转换... ...


0
投票

问题是,垫子 video_00audio_00 已改名为 video_0audio_0. 这可以用 gst-inspect-1.0 matroskademux,这表明现在焊盘的格式为 video_%u. 请注意,gstreamer的一些文档页面没有更新以反映这一点。

第一条命令,MKV to MKV应为:"MKV to MKV"。

gst-launch-1.0 filesrc location=test.mkv ! matroskademux name=demux \
    matroskamux name=mux ! filesink location=test2.mkv \
    demux.video_0 ! queue ! mux.video_0 \
    demux.audio_0 ! queue ! mux.audio_0

(注意增加了 queues)

第二条命令,MKV转MKV重新编码音频应改为。

gst-launch-1.0 -v filesrc location=test.mkv ! matroskademux name=demux \
   matroskamux name=mux ! filesink location=test2.mkv \
   demux.video_0 ! queue ! 'video/x-h264' ! h264parse ! mux. \
   demux.audio_0 ! queue ! rawaudioparse ! audioconvert ! audioresample ! avenc_aac ! mux.

同样的结果可以通过 不指定垫子 并在需要时使用上限过滤器。

感谢用户Florian Zwoch提供的工作管道。

© www.soinside.com 2019 - 2024. All rights reserved.