ゴリラに動画を その2

これは子供の為にカーナビを活用しようと奮闘記である。 我が家では古いポータブルカーナビが現役である。

Panasonic ゴリラ CN-GL711D 2012年発売らしい。

~前回までの悩み~
ナビの動画一覧(サムネイル)画面で「何の動画かさっぱりわからん」。
サムネイルが真っ黒か、内容が想像つかない画像ばかり。
ころで、サムネイルってどのあたりのシーンが表示されるの?

さて、前回の悩みを解決すべく考えた。

先頭にタイトル を入れたらGOODじゃ無いか!? と思い方針を考える。

<方針>

  1. 動画のタイトル部を短い動画として切り出し先頭に加える。
  2. 動画のタイトル部の画像を切り出して短い動画を作り先頭に加える。
  3. タイトルのテキストから短い動画を作り先頭に加える。
  4. さらに別の方法を考える。

■1. 動画のタイトル部を短い動画として切り出し先頭に加える。

HandBrakeで時間指定で切り出す方法が見つからなかった。 FFMPEGで時間指定切り出し&無音化の実験は成功。 ただiFrame間隔が長くタイトル切り出しに再エンコードが必要な動画があり、またiFrameの詳細時間の調査や切り出しは手動作業でかなり手間がかかる手順で辛い。Avidemux等のGUI切り出しは簡単だが、やはりiFrameの間隔が長い問題に対処できなかった。 HandBrakeでエンコード後にFFMPEGで再エンコードさせると画像の劣化を感じたので避けたい感じ。 別のプラント考える事とした。

今回試したFFMPEGのコマンド

例:iフレームのpts_timeを確認

ffprobe -hide_banner -select_streams v -show_entries frame=pkt_pts_time,pict_type -i "動画ファイル名" > iframes.txt

例:pts_timeで動画を切り出し

ffmpeg -hide_banner -y ^
-ss 119.410956 ^
-i ”動画ファイル名” ^
-copyts ^
-ss 0 -to 127.168700 ^
-c:v copy ^
-c:a copy -async 1 ^
-strict -2 ^
”切り出した動画ファイル名”
exit /b

■2. タイトル画像を切り出して短い動画を作り先頭に加える。

動画から静止画の切り出して短い動画を作るのはFFMPEGで実現できた。 しかし、私の現在の技術だとHandBrake生成動画とエンコードなしで結合できる動画が作れなかった。 さらに、タイトル画像のサムネイル表示だと文字がつぶれて判別不可能な場合やタイトル無し動画が対策が無い事が発覚。別のプラント考える事とした。

今回試したFFMPEGのコマンド

例:動画から一コマだけの画像を抽出

ffmpeg -hide_banner -i ”動画ファイル名” -ss 1 -vframes 1 -f image2 ”静止画ファイル名”

例:動画からタイトル付近の連続数コマ画像を抽出 ← 選びやすい

ffmpeg -hide_banner -y -i ”動画ファイル名”  -ss 3:54 -t 5 -r 30 -r 0.5 -f image2  temp%%02d.png

例:静止画から動画を生成 ← 選びやすい

ffmpeg ^
 -hide_banner ^
 -y
 -loop 1 ^
 -r 30000/1001 ^
 -i ”静止画ファイル名” ^
 -f lavfi -i aevalsrc=0 ^
 -vcodec mpeg4 ^
 -acodec aac -strict experimental -ab 96k -ac 2 -ar 44100 ^
 -pix_fmt yuv420p ^
 -vframes 100 ^
 ”動画ファイル名”
exit /b

例:2つ動画を連結する。エンコード条件が合わずコーデック”copy”では実現できなかった。

ffmpeg -i "concat:タイトル.mp4|本編.mp4" -c copy 本編withタイトル.mp4

■3. タイトルのテキストから短い動画を作り先頭に加える。

検索するとImageMagickと言うツールで、テキスト文字から画像が作れる事が分かった。 その画像から短い動画を作れば、文字が読めるサムネイル動画ができるはず。 しかし、私の現在の技術だとHandBrake生成動画とエンコードなしで結合できる動画が作れない問題は変わらず。

今回試したImageMagickFFMPEGのコマンド

例:ImageMagick labelで文字を書く

magick convert -size 640x360 ^
  -font c:\Windows\Fonts\meiryo.ttc ^
  -background "rgb(100,100,255)" ^
  -gravity Center -pointsize 144 ^
  label:タイトル jin01.png
exit /b

例:ImageMagick captionで文字を書くと文字サイズも自動なのでお勧め。

magick convert ^
  -size 640x854  ^
  -background "#C0C0C0"  ^
  -fill "#FFFF00"  ^
  -font c:\Windows\Fonts\meiryo.ttc ^
  caption:"タイトル\n改行も\nできます" ^
  output.png
exit /b

例:FFMPEGで静止画からサムネイル動画を生成する。

ffmpeg ^
-hide_banner -y ^
-loop 1 ^
-r 24000/1001 ^
-i ”静止画ファイル名” ^
-f lavfi -i aevalsrc=0 ^
-c:v mpeg4 -b:v 384k ^
-c:a aac -strict experimental -b:a 128k -ac 2  -ar 32000 ^
-pix_fmt yuv420p ^
-vframes 12 ^
”動画ファイル名”
exit /b

例:2つ動画を連結する。エンコード条件が合わずコーデック”copy”では実現できなかった。

ffmpeg -i "concat:タイトル.mp4|本編.mp4" -c copy 本編withタイトル.mp4

今日の結論

今までは2回エンコードが必要な方法しか実現できず。 画質劣化とエンコード時間を無駄にしない、1回エンコードで実現したい。

つづく