about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-09-04 06:21:51 +0000
committerEric Wong <e@80x24.org>2024-01-27 22:18:18 +0000
commit467b6941c7e9b5ecc299f92c7fa2f32d9326ba11 (patch)
tree391e7ccad2fb608b3e25a65a220678906076fa0c
parent63fb7405952428a3093ea32865ef0336e1a46bda (diff)
downloaddtas-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.
-rw-r--r--lib/dtas/source/av_ff_common.rb9
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']