最近買了一隻 CP 值很高的手錶,這次實驗對象是 KKTICK TANK T6(沒有業配就不上連結了)。
因為有一些小需求,我想把自製影片放進手錶裡播放,但一開始就遇到問題
他附的內建轉檔軟體竟然一直出錯..
看到錯誤訊息後大概就知道它底層是用 ffmpeg,但看起來不像是沒安裝的問題。我重新下載官方版本的 ffmpeg 測試,發現直接轉出來的 avi 不是不能播放,就是比例變形。
後來我乾脆把手錶連到電腦,找到裡面的 sample video,然後用:
ffmpeg -i show_gps_demo_video_cn.avi把它的編碼資訊完整拆出來,才確認這支手錶真正吃的規格。順帶一提,它要求的影片解析度是 466x466。
[aist#0:1/adpcm_ima_wav @ 000002a46ee4afc0] Guessed Channel Layout: mono
Input #0, avi, from 'show_gps_demo_video_cn.avi':
Metadata:
software : Lavf61.1.100
Duration: 00:01:40.83, start: 0.000000, bitrate: 4710 kb/s
Stream #0:0: Video: mjpeg (Baseline) (MJPG / 0x47504A4D), yuvj420p(pc, bt470bg/unknown/unknown), 466x466 [SAR 1:1 DAR 1:1], 4523 kb/s, 30 fps, 30 tbr, 30 tbn
Stream #0:1: Audio: adpcm_ima_wav ([17][0][0][0] / 0x0011), 44100 Hz, mono, s16p, 176 kb/s
At least one output file must be specified
接著我依照 sample 的規格對齊,再請 ChatGPT 協助微調,最後整理出這條指令:
ffmpeg -i "source.mp4" -vf "scale=466:466:force_original_aspect_ratio=decrease,pad=466:466:(ow-iw)/2:(oh-ih)/2" -pix_fmt yuvj420p -r 30 -c:v mjpeg -q:v 6 -c:a adpcm_ima_wav -ar 44100 -ac 1 -y "output.avi"
命令提示字元好閱讀版本
ffmpeg -i "source.mp4" ^
-vf "scale=466:466:force_original_aspect_ratio=decrease,pad=466:466:(ow-iw)/2:(oh-ih)/2" ^
-pix_fmt yuvj420p ^
-r 30 ^
-c:v mjpeg ^
-q:v 6 ^
-c:a adpcm_ima_wav ^
-ar 44100 ^
-ac 1 ^
-y "output.avi"
這裡面主要修正幾個重點:
1. 對齊聲音格式(ADPCM 44100Hz mono),設備對音訊編碼有明顯限制
2. 使用等比例縮放並補黑邊,避免畫面變形
3. 將 -q:v 調整為 6 以控制體積,如果想要畫質更好可以改成 2,但檔案會明顯變大
另外要注意,因為它只能播放 .avi,而且使用的是 MJPEG 編碼,壓縮效率非常低
所以檔案體積會偏大。我測試一個 33 分鐘的影片,最後產生的檔案大約 800 多 MB,這是格式本身的限制,沒辦法 AVI 就是這樣
補上成功播放畫面:
--
本文首發於 : TANK T6 手錶影片轉檔教學:466x466 AVI 正確 ffmpeg 參數解析
--
---
The bug existed in all possible states.
Until I ran the code.