以下碰到的問題的是 base on ffmpeg version 1.0
ffmpeg version 1.0.git Copyright (c) 2000-2012 the FFmpeg developers built on Oct 4 2012 11:38:26 with gcc 4.3 (SUSE Linux) configuration: --prefix=/usr/local --libdir=/usr/local/lib64 --shlibdir=/usr/local/lib64 --enable-gpl --enable-shared --enable-libmp3lame --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libxvid --enable-libx264 --enable-libfaac --enable-postproc --enable-pthreads --disable-ffserver --disable-ffplay --enable-nonfree --enable-version3 --extra-ldflags=-ldl --enable-libvpx --disable-decoder=amrnb --enable-decoder=wmapro libavutil 51. 73.101 / 51. 73.101 libavcodec 54. 63.100 / 54. 63.100 libavformat 54. 29.105 / 54. 29.105 libavdevice 54. 3.100 / 54. 3.100 libavfilter 3. 19.102 / 3. 19.102 libswscale 2. 1.101 / 2. 1.101 libswresample 0. 16.100 / 0. 16.100 libpostproc 52. 1.100 / 52. 1.100
1. ffmpeg 轉 h264 的 mp4 無法用 flash player 播, 但抓下來 client 可以播
- 解法 : 先轉成 flv, 再轉 mp4 即可; 量看起來很少, 算特例吧, 以後碰到手動做即可
- cmd ex :
# source encode to flv (sd) ffmpeg -i source.avi -loglevel quiet -v 0 -s 240x360 -y -acodec libfaac -ab 128k -ar 44100 -crf 23 -threads 0 -r 10 -f flv sd-output.flv # flv encode to mp4 ffmpeg -i sd-output.flv -f mp4 sd-output.mp4
2. ffmpeg 轉 m4a 完不能播
- 解法 : 先轉成 mp3, 再轉成 mp4; 這情況有點複雜, 用下面的判斷式來描述比較清楚
if ((轉 mp3 成功) || (轉 mp3 有錯誤訊息, 但 mp3 檔有產生)) {
# 先拿 source 轉 mp3, 再拿 mp3 轉成 mp4
} else if (轉 mp3 有錯誤訊息, 但 mp3 檔未產生) {
# 直接用 source 轉 mp4
} else {
# 目前還沒碰到
}
- cmd ex :
# 1.1 source encode to mp3 ffmpeg -i source.m4a -ss 00:00:00 -t 00:30:00 -loglevel quiet -v 0 -y -ab 128k -ar 44100 -ac 2 -vn -f mp3 output.mp3 # 1.2 mp3 encode to mp4 ffmpeg -i output.mp3 -ss 00:00:00 -t 00:30:00 -loglevel quiet -v 0 -y -ab 128k -ar 44100 -ac 2 -vn -f mp4 output.mp4 # 2. source encode to mp4 ffmpeg -i source.m4a -ss 00:00:00 -t 00:30:00 -loglevel quiet -v 0 -y -ab 128k -ar 44100 -ac 2 -vn -f mp4 output.mp4
3. ffmpeg 新版對 iphone 的自動旋轉問題 (前版不會有問題)
新版的 ffmpeg 轉完, flash 播比例會跑掉
原因在於 rotation 不是標準的 meta tag, 然後新版的轉完後,
rotation 值還在, 所以 flash player 就被影響了
原因在於 rotation 不是標準的 meta tag, 然後新版的轉完後,
rotation 值還在, 所以 flash player 就被影響了
- 解法 : 加一個 -map_metadata -1 參數(會清掉 ffmpeg 不認識的 meta)
- cmd ex :
ffmpeg -i i_SSndOE-5343270.mp4 -map_metadata -1 -c:v copy -c:a copy out.mp4
本來想只針對 rotation 這個 meta 去清,
# Rotation 非標準 meta tag, 僅 iphone 用, 故 ffmpeg 不認識; ffmpeg 只能對標準的 meta tag 做內容的修改 ffmpeg -i i_SSndOE-5343270.mp4 -metadata Rotation="" -c:v copy -c:a copy out2.mp4
但轉出的 mp4 在 flash player 播一樣比例會跑掉, 因為 ffmpeg 只異能動標準的 metadata
承上, 寫幾個 cmd sample
3.1 現在改好沒問題的 cmd
ffmpeg -i source.mov -vf 'scale=1280:720,transpose=1' -map_metadata -1 -loglevel quiet -v 0 -ss 00:00:00 -t 00:30:00 -y -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -vpre medium -crf 23 -bufsize 6M -maxrate 6M -threads 0 -r 29.97 -f mp4 output.mp4用 mediainfo parsing 的內容
mediainfo output.mp4 ...... Width : 720 pixels Height : 1 280 pixels # 沒有 Rotation ......
3.2 因為升級 ffmpeg 版本而造成問題的 cmd
ffmpeg -i source.mov -vf transpose=1 -loglevel quiet -v 0 -s 1280x720 -ss 00:00:00 -t 00:30:00 -y -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -vpre medium -crf 23 -bufsize 6M -maxrate 6M -threads 0 -r 29.97 -f mp4 output.mp4用 mediainfo parsing 的內容
mediainfo output.mp4 ...... Width : 1 280 pixels Height : 720 pixels Rotation : 90° # Rotation 還在, 所以 flash player 播放有問題; 而且 widthxheight 比例也不對 ......
3.3 前版的 ffmpeg 轉出來的影片, 用 mediainfo parsing 的內容
mediainfo output.mp4 ...... Width : 720 pixels Height : 1 280 pixels # 沒有 Rotation ......
後記 : 實際上要補做這段時間進來的影片時, 用 copy 方式是無法修正的, 一定要用 source 重轉過 (因為 width, height 值的關係)
# 還是不能播, 因為 media 的 width&height 已經亂掉了 ffmpeg -i output.mp4 -map_metadata -1 -c:v copy -c:a copy output2.mp4 =>
沒有留言:
張貼留言