diff options
author | Eric Wong <e@80x24.org> | 2023-09-04 06:21:51 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2024-01-27 22:18:18 +0000 |
commit | 467b6941c7e9b5ecc299f92c7fa2f32d9326ba11 (patch) | |
tree | 391e7ccad2fb608b3e25a65a220678906076fa0c /lib/dtas/source | |
parent | 63fb7405952428a3093ea32865ef0336e1a46bda (diff) | |
download | dtas-467b6941c7e9b5ecc299f92c7fa2f32d9326ba11.tar.gz |
As with sox, these will be dealing with legacy encodings and badly-encoding software until the end of days, so do our best to fix them up.
Diffstat (limited to 'lib/dtas/source')
-rw-r--r-- | lib/dtas/source/av_ff_common.rb | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/dtas/source/av_ff_common.rb b/lib/dtas/source/av_ff_common.rb index d096aba..f67ab83 100644 --- a/lib/dtas/source/av_ff_common.rb +++ b/lib/dtas/source/av_ff_common.rb @@ -104,13 +104,14 @@ module DTAS::Source::AvFfCommon # :nodoc: prev_cmd = cmd end while incomplete.compact[0] + enc = Encoding.default_external # typically Encoding::UTF_8 # old avprobe s.scan(%r{^\[FORMAT\]\n(.*?)\n\[/FORMAT\]\n}m) do |_| f = $1.dup f =~ /^duration=([\d\.]+)\s*$/nm and @duration = $1.to_f # TODO: multi-line/multi-value/repeated tags f.gsub!(/^TAG:([^=]+)=(.*)$/ni) { |_| - @comments[$1.upcase] = -($2) + @comments[-DTAS.try_enc($1.upcase, enc)] = $2 } end @@ -118,13 +119,17 @@ module DTAS::Source::AvFfCommon # :nodoc: s.scan(%r{^\[format\.tags\]\n(.*?)\n\n}m) do |_| f = $1.dup f.gsub!(/^([^=]+)=(.*)$/ni) { |_| - @comments[$1.upcase] = -$2 + @comments[-DTAS.try_enc($1.upcase, enc)] = $2 } end s.scan(%r{^\[format\]\n(.*?)\n\n}m) do |_| f = $1.dup f =~ /^duration=([\d\.]+)\s*$/nm and @duration = $1.to_f end + comments.each do |k,v| + v.chomp! + comments[k] = -DTAS.try_enc(v, enc) + end # ffprobe always uses "track", favor FLAC convention "TRACKNUMBER": if @comments['TRACK'] && !@comments['TRACKNUMBER'] |