<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>2014/01/18 on Yano&#39;s digital garage</title>
    <link>https://www.bravotouring.com/~yano/archives/2014/01/18/</link>
    <description>Recent content in 2014/01/18 on Yano&#39;s digital garage</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 18 Jan 2014 15:40:50 +0900</lastBuildDate>
    <atom:link href="https://www.bravotouring.com/~yano/archives/2014/01/18/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>get_stream_map</title>
      <link>https://www.bravotouring.com/~yano/diary/it/20140118ts_map.htm</link>
      <pubDate>Sat, 18 Jan 2014 15:40:50 +0900</pubDate>
      <guid>https://www.bravotouring.com/~yano/diary/it/20140118ts_map.htm</guid>
      <description>&lt;p&gt;&lt;span class=&#34;Software&#34;&gt;epgrec&lt;/span&gt;でCS放送を録画する場合には&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20121109epgrec.htm&#34;&gt;録画モードを&#34;Minimum TS&#34;&lt;/a&gt;にしておかないとトランスポンダ単位で複数のチャンネルが保存されてしまうので、&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20121014ffmpeg.htm&#34;&gt;TSファイルをmp4にエンコードする&lt;/a&gt;際に期待したのとは異なる番組がエンコードされてしまったり、エンコードに失敗してしまうケースがある。&lt;/p&gt;&#xA;&lt;p&gt;具体的には&lt;span class=&#34;Software&#34;&gt;ffmpeg&lt;/span&gt;で映像・音声チャンネルをそれぞれ選択する必要があり、地上波やBSでは映像が0:0が音声が0:1となるStreamIDをCS放送波に合わせて変更する事になる。&lt;/p&gt;&#xA;&lt;p&gt;というわけで、一旦&lt;span class=&#34;Software&#34;&gt;ffmpeg&lt;/span&gt;を通してProgramIDに合わせた映像・音声のStreamIDを拾うスクリプトを作ってみた。&lt;/p&gt;&#xA;&lt;span class=&#34;Path&#34;&gt;~/bin/get_stream_map.pl&lt;/span&gt;&#xA;&lt;blockquote cite=&#34;~/bin/get_stream_map.pl&#34; class=&#34;Log&#34;&gt;&#xA;#!/usr/bin/perl&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;use strict;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;#ARGV[0] Target TS File&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;my $cmd = &#34;/usr/local/bin/ffmpeg&#34;;&lt;br/&gt;&#xA;my $ffpreset = &#34;/var/www/html/epgrec/libx264-hq-ts.ffpreset&#34;;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;my $str;&lt;br/&gt;&#xA;my @lines;&lt;br/&gt;&#xA;my $br;            #Audio BitRate&lt;br/&gt;&#xA;my ($vstr,$astr);  #StreamID&lt;br/&gt;&#xA;my ($prg_target, $prg_crnt); #ProgramID&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;# 20131225_2030_CS2_CS298_ふたりはプリキュア_#26.ts&#39;:&lt;br/&gt;&#xA;if ($ARGV[0] =~ /^.*\/?2[0-9]*_[0-9]*_CS[0-9]_CS([0-9]*)_.*$/){&lt;br/&gt;&#xA;    $prg_target = $1;&lt;br/&gt;&#xA;}&lt;br/&gt;&#xA;# 20140101_2100_31_GRhd_相棒_season12_元日スペシャル.ts&lt;br/&gt;&#xA;# 20140117_0800_236_BShd_【字】スイートプリキュア♪_#20.ts&lt;br/&gt;&#xA;if ($ARGV[0] =~ /^.*\/?2[0-9]*_[0-9]*_([0-9]*)_(GR|BS)(hd|sd)_.*$/){&lt;br/&gt;&#xA;    $prg_target = $1;&lt;br/&gt;&#xA;}&lt;br/&gt;&#xA;# print &#34;Program $prg_target\n&#34;;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;$str = `$cmd -i $ARGV[0] 2&gt;&amp;1`;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;@lines = split(/\n/,$str);&lt;br/&gt;&#xA;foreach(@lines){&lt;br/&gt;&#xA;    chomp;&lt;br/&gt;&#xA;# print &#34;$_ \n&#34;;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;    #Get Program ID&lt;br/&gt;&#xA;    if($_ =~ /^ +Program ([0-9]+) *$/){&lt;br/&gt;&#xA;        $prg_crnt = $1;&lt;br/&gt;&#xA;    }&lt;br/&gt;&#xA;    #Check Program ID&lt;br/&gt;&#xA;    if($prg_crnt != $prg_target){&lt;br/&gt;&#xA;        next;&lt;br/&gt;&#xA;    }&lt;br/&gt;&#xA;# print &#34;$_ \n&#34;;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;    #Get Video StreamID&lt;br/&gt;&#xA;    if($_ =~ /\#([0-9:]+)\[.+Video: mpeg2video/ &amp;&amp; $vstr eq &#34;&#34;){&lt;br/&gt;&#xA;        $vstr = &#34;-map $1&#34;;&lt;br/&gt;&#xA;    }&lt;br/&gt;&#xA;    #Get Audio StreamID&lt;br/&gt;&#xA;    elsif($_ =~ /\#([0-9:]+)\[.+Audio: .+, ([0-9]+) kb\/s/){&lt;br/&gt;&#xA;        if($2 &gt; $br){&lt;br/&gt;&#xA;            $astr = &#34;-map $1&#34;;&lt;br/&gt;&#xA;            $br = $2;&lt;br/&gt;&#xA;        }&lt;br/&gt;&#xA;    }&lt;br/&gt;&#xA;}&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;if($vstr eq &#34;&#34; &amp;&amp; $astr eq &#34;&#34;){&lt;br/&gt;&#xA;    $vstr = &#34;-map 0:0&#34;;&lt;br/&gt;&#xA;    $astr = &#34;-map 0:1&#34;;&lt;br/&gt;&#xA;}&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;print &#34;$vstr $astr\n&#34;;&lt;br/&gt;&#xA;&lt;br/&gt;&#xA;1;&lt;/blockquote&gt;&#xA;&lt;p&gt;パタメータの形式は&lt;a href=&#34;https://www.bravotouring.com/~yano/diary/it/20130221ffmpeg.htm&#34;&gt;FFmpeg 1.1.2&lt;/a&gt;対応で、ファイル名から正しいProgramIDが拾えない地上波等でStreamIDがうまく拾えなかった場合は、デフォルトの&#34;-map 0:0 -map 0:1&#34;を返す。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
