xmlstarlet 更新值相同的元素值

xmlstarlet Update Value Same Element value

我想更新元素块的第二个值。 我的两个块具有相同元素结构的问题。

我的目标是更新

第二块
1. /job/input/audio_selector/track
2. /job/stream_assembly/audio_description/language_code

这是我试过的。

xmlstarlet edit -L \
          --update "//job/input//audio_selector/audio_selector/track" \
          --value "3,4" \
          --update "//job/stream_assembly//audio_description/audio_description/language_code" \
          --value "french" payload.xml

这是我的 xml:

   <?xml version="1.0" encoding="UTF-8"?>
<job href="/jobs/24883">
  <input>
    <deblock_enable>Auto</deblock_enable>
    <deblock_strength>0</deblock_strength>
    <no_psi>false</no_psi>
    <order>1</order>
    <timecode_source>zerobased</timecode_source>
    <file_input>
      <certificate_file nil="true"/>
      <password>xxx</password>
      <uri>source</uri>
      <username>xxx</username>
    </file_input>
    <name>input_1</name>
    <video_selector>
      <color_space>follow</color_space>
      <order>1</order>
      <program_id nil="true"/>
      <name>input_1_video_selector_0</name>
    </video_selector>
    <audio_selector>
      <default_selection>true</default_selection>
      <infer_external_filename>false</infer_external_filename>
      <order>1</order>
      <program_selection>1</program_selection>
      <selector_type>track</selector_type>
      <track>1</track>
      <unwrap_smpte337>true</unwrap_smpte337>
      <name>input_1_audio_selector_0</name>
    </audio_selector>
    <audio_selector>
      <default_selection>false</default_selection>
      <infer_external_filename>false</infer_external_filename>
      <order>2</order>
      <program_selection>1</program_selection>
      <selector_type>track</selector_type>
      <track>UPDATE THIS</track>
      <unwrap_smpte337>true</unwrap_smpte337>
      <name>input_1_audio_selector_1</name>
    </audio_selector>
  </input>
  <timecode_config>
    <require_initial_timecode>false</require_initial_timecode>
    <source>zerobased</source>
    <sync_threshold nil="true"/>
  </timecode_config>
  <ad_trigger>scte35_splice_insert</ad_trigger>
  <ad_avail_offset>0</ad_avail_offset>
  <priority>100</priority>
  <user_data/>
  <avsync_enable>true</avsync_enable>
  <avsync_pad_trim_audio>true</avsync_pad_trim_audio>
  <stream_assembly>
    <name>stream_assembly_0</name>
    <video_description>
      <afd_signaling>None</afd_signaling>
      <anti_alias>true</anti_alias>
      <drop_frame_timecode>true</drop_frame_timecode>
      <fixed_afd nil="true"/>
      <force_cpu_encode>false</force_cpu_encode>
      <height>1080</height>
      <insert_color_metadata>false</insert_color_metadata>
      <respond_to_afd>None</respond_to_afd>
      <sharpness>50</sharpness>
      <stretch_to_output>false</stretch_to_output>
      <timecode_passthrough>false</timecode_passthrough>
      <vbi_passthrough>false</vbi_passthrough>
      <width>1920</width>
      <h264_settings>
        <adaptive_quantization>medium</adaptive_quantization>
        <bitrate>14000000</bitrate>
        <buf_fill_pct nil="true"/>
        <buf_size nil="true"/>
        <cabac>true</cabac>
        <flicker_reduction>off</flicker_reduction>
        <force_field_pictures>false</force_field_pictures>
        <framerate_denominator nil="true"/>
        <framerate_follow_source>true</framerate_follow_source>
        <framerate_numerator nil="true"/>
        <gop_b_reference>false</gop_b_reference>
        <gop_closed_cadence>1</gop_closed_cadence>
        <gop_markers>false</gop_markers>
        <gop_num_b_frames>2</gop_num_b_frames>
        <gop_size>50.0</gop_size>
        <gop_size_units>frames</gop_size_units>
        <interpolate_frc>false</interpolate_frc>
        <look_ahead_rate_control>medium</look_ahead_rate_control>
        <max_bitrate nil="true"/>
        <max_qp nil="true"/>
        <min_buf_occ nil="true"/>
        <min_i_interval>0</min_i_interval>
        <min_qp nil="true"/>
        <num_ref_frames>1</num_ref_frames>
        <par_denominator nil="true"/>
        <par_follow_source>true</par_follow_source>
        <par_numerator nil="true"/>
        <passes>1</passes>
        <qp nil="true"/>
        <repeat_pps>false</repeat_pps>
        <rp2027_syntax>false</rp2027_syntax>
        <scd>true</scd>
        <sei_timecode>false</sei_timecode>
        <slices>1</slices>
        <slow_pal>false</slow_pal>
        <softness nil="true"/>
        <svq>0</svq>
        <telecine>None</telecine>
        <level>4.1</level>
        <profile>High</profile>
        <rate_control_mode>CBR</rate_control_mode>
        <gop_mode>fixed</gop_mode>
        <interlace_mode>progressive</interlace_mode>
      </h264_settings>
      <selected_gpu nil="true"/>
      <codec>h.264</codec>
    </video_description>
    <audio_description>
      <audio_type>0</audio_type>
      <follow_input_audio_type>false</follow_input_audio_type>
      <follow_input_language_code>false</follow_input_language_code>
      <language_code>English</language_code>
      <order>1</order>
      <stream_name nil="true"/>
      <timecode_passthrough>false</timecode_passthrough>
      <aac_settings>
        <ad_broadcaster_mix>false</ad_broadcaster_mix>
        <bitrate>192000</bitrate>
        <coding_mode>2_0</coding_mode>
        <latm_loas>false</latm_loas>
        <mpeg2>false</mpeg2>
        <sample_rate>48000</sample_rate>
        <profile>LC</profile>
        <rate_control_mode>CBR</rate_control_mode>
      </aac_settings>
      <codec>aac</codec>
      <audio_source_name>Audio Selector 1</audio_source_name>
    </audio_description>
    <audio_description>
      <audio_type>0</audio_type>
      <follow_input_audio_type>false</follow_input_audio_type>
      <follow_input_language_code>false</follow_input_language_code>
      <language_code>UPDATE THIS</language_code>
      <order>2</order>
      <stream_name nil="true"/>
      <timecode_passthrough>false</timecode_passthrough>
      <aac_settings>
        <ad_broadcaster_mix>false</ad_broadcaster_mix>
        <bitrate>192000</bitrate>
        <coding_mode>2_0</coding_mode>
        <latm_loas>false</latm_loas>
        <mpeg2>false</mpeg2>
        <sample_rate>48000</sample_rate>
        <profile>LC</profile>
        <rate_control_mode>CBR</rate_control_mode>
      </aac_settings>
      <codec>aac</codec>
      <audio_source_name>Audio Selector 2</audio_source_name>
    </audio_description>
  </stream_assembly>
  <output_group>
    <custom_name>file_group_4</custom_name>
    <name nil="true"/>
    <order>1</order>
    <file_group_settings>
      <rollover_interval nil="true"/>
      <destination>
        <password>xxx</password>
        <username>xxx</username>
        <uri>destination</uri>
      </destination>
    </file_group_settings>
    <type>file_group_settings</type>
    <output>
      <description nil="true"/>
      <extension>mov</extension>
      <log_edit_points>false</log_edit_points>
      <name_modifier/>
      <order>1</order>
      <mov_settings>
        <growing_reference>false</growing_reference>
        <include_clap>false</include_clap>
        <include_cslg>true</include_cslg>
        <omneon_padding>true</omneon_padding>
        <reference>self_contained</reference>
        <write_xdcam>false</write_xdcam>
      </mov_settings>
      <stream_assembly_name>stream_assembly_0</stream_assembly_name>
      <container>mov</container>
    </output>
  </output_group>
</job>

我是 xmlstarlet 的新手,我尝试了所有方法,但仍然无法正确使用。 我希望有人能帮助。

非常感谢

xmlstarlet 解决方案:

xmlstarlet ed -L -u "//job/input/audio_selector[2]/track" -v "3,4" \
-u "//job/stream_assembly/audio_description[2]/language_code" -v "french" payload.xml

  • ...audio_selector[2] - select audio_selector 个标签中的第二个节点