2016-09-05

FFmpeg 使用時的詭異狀況

FFmpeg
https://ffmpeg.org/

FFmpeg 是一個自由軟體,可以執行音訊和視訊多種格式的錄影、轉檔、串流功能,包含了 libavcodec ——這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及 libavformat —— 一個音訊與視訊格式轉換函式庫。

以下是一堆雜七雜八收集來的用法(用來將帶字幕的 mkv 轉成 mp4)
ffmpeg -i sp06.mkv -vf subtitles=sp06.mkv -vcodec h264 -acodec aac  -b:v 2M -b:a 256k  out2.mp4

ffmpeg -i sp06.mkv -vcodec copy -acodec copy out3.mp4

ffmpeg -i sp06.mkv -vf subtitles=sp06.mkv  -c:v libx264 -crf 20  -c:a aac out3.20.mp4

ffmpeg -i sp06.mkv -vf subtitles=sp06.mkv -c:v libx264 -q:v 0 out4.mp4
ffmpeg -i sp06.mkv -vf subtitles=sp06.mkv -c:v libx264 -crf 0 out4.crf.mp4

ffmpeg -i sp06.mkv -vf subtitles=sp06.mkv -c:v libx264 -q:v 0 -profile:v baseline out4.baseline.mp4

 ffmpeg -i sp06.mkv -vf subtitles=sp06.mkv -vcodec h264 -acodec aac  -profile:v baseline  out5.mp4
 ffmpeg -i sp06.mkv -vf subtitles=sp06.mkv -vcodec h264 -acodec aac  -q:v 0 -profile:v baseline  out5.q0.mp4

但是每次都要複製指令來執行好麻煩
所以弄了個批次黨可以接收檔案直接拖拉

但是卻在字幕處理上一直出現錯誤
試過很多種方式 都無效

包含將檔案短換成短檔名
加上 "' 等符號
都會出錯

最後的解法是將檔案複製成簡易名
然後進行處理

@echo off

set FILENAME1=%~n1%~x1
set FILENAME2=T:/cache/temp%~x1

copy "%FILENAME1%" "%FILENAME2%"

cd /D T:
cd "T:\cache"

"%~dp0/ffmpeg" -i temp%~x1 -vf subtitles=temp%~x1 -c:v libx264 -q:v 0 -profile:v baseline temp.mp4

call explorer "T:\cache"

pause