ffmpeg:不保留音軌的原始編解碼器

ffmpeg:不保留音軌的原始編解碼器

我有 3 個版本的 ffmpeg 命令,但沒有一個是完美的......我被困住了。以下是我的範例以及每個版本遇到的問題:

ffmpeg -i "%%a" -map 0:v:0 -map 0:a:m:language:eng -c copy -f matroska - | ffmpeg -i - -map 0:v -map 0:a:0 -c copy -c:a eac3 -metadata:s:a:0 title="EAC3 Transcoded" -b:a:0 640k "%%~dpna.EACConverted%%~xa"

此版本的命令確實將主音軌轉碼為 EAC3、為其添加標籤、將 EAC3 設定為第一/主軌道。它還只保留英文曲目並刪除所有其他曲目!刪除字幕,但遺憾的是沒有保留原始音軌的原始格式(即 DTS 轉換為 EAC3,DTS 將會遺失。)

ffmpeg -i "%%a" -map 0:v -map 0:a:0 -map 0:a -c:v copy -c:a copy -c:a:0 eac3 -metadata:a:0 title="EAC3 Transcoded" -b:a:0 640k "%%~dpna.EACConverted%%~xa" 

此版本的命令確實刪除了字幕;將主音軌轉碼為 EAC3,對其進行標記,將 EAC3 設定為第一/主音軌,但它也會保留轉碼之前的原始音軌! (即 DTS 轉換為 EAC3,DTS 仍然存在)但問題是它不只保留英文曲目。如果我有中文曲目,它就會保留。

ffmpeg -i "%%a" -map 0:v:0 -map 0:a:m:language:eng -c copy -f matroska - | ffmpeg -i - -map 0:v -map 0:a:0 -c copy "%%~dpna.EACConverted%%~xa"

此版本的命令從文件中提取第一個視頻軌道、英文音軌,刪除所有其他軌道和字幕。進行標記, ETC。

我想要的是這些的混合體,它可以完成這一切,這意味著它將主音軌(比方說,DTS)轉碼為EAC3,對其進行標記,將EAC3 設定為第一/主軌道。它還只保留英文軌道並刪除所有其他軌道,並在轉碼後保留原始英文 DTS 軌道。

完整的例子是:

@echo off
cls
set rootfolder="M:\Movies\"
echo Enumerating all MKVs under %rootfolder%
echo.
for %%a in (*.mkv) do (
    for /f %%b in ('mkvmerge -i "%%a" ^| find /c /i "TrueHD"') do (
        if [%%b]==[0] (
            echo "%%a" has no TrueHD Audio
        ) else (
            echo.
            echo "%%a" has TrueHD Audio
            ffmpeg -i "%%a" -map 0:v:0 -map 0:a:m:language:eng -c copy -f matroska - | ffmpeg -i - -map 0:v -map 0:a:0 -c copy -c:a eac3 -metadata:s:a:0 title="EAC3 Transcoded" -b:a:0 640k "%%~dpna.EACConverted%%~xa"
            if errorlevel 1 (
                echo Warnings/errors generated during remuxing, original file not deleted
            ) else (
                del /f "%%a"
                echo Successfully remuxed to "%%~dpna.EACConverted%%~xa", original file deleted
            )
            echo.
        )
    )
)

答案1

到目前為止,我讓它可以使用以下兩個命令之一:

ffmpeg -i "%%a" -map 0:v:0 -c:v:0 copy -map 0:a:m:language:eng -c:a copy -disposition:a:2 0 -map 0:a:0 -c:a:0 eac3 -metadata:s:a:0 title="Transcoded Compatibility Track" "%%~dpna.EACConverted%%~xa"
  1. 將主音軌轉碼為 EAC3
  2. 標記/更改其建立的新 EAC3 的名稱。
  3. 將 EAC3 設定為第一/主軌道和預設軌道
  4. 刪除所有其他非英語或非英語曲目。
  5. 如果找到字幕,則將其刪除。
  6. 保留原始編解碼器格式的原始音軌作為備份。

在 2 個視訊檔案上進行了測試。

ffmpeg -i "%%a" -map 0:v:0 -map 0:a:0 -map 0:a:m:language:eng -disposition:a:1 0 -c copy -f matroska - | ffmpeg -i - -map 0:v:0 -c:v:0 copy -map 0:a:0 -c:a:0 eac3 -metadata:s:a:0 title="Transcoded Compatibility Track" -map 0:a:1 -c:a:1 copy "%%~dpna.EACConverted%%~xa"
  1. 將主音軌轉碼為 EAC3
  2. 標記/更改其建立的新 EAC3 的名稱。
  3. 將 EAC3 設定為第一/主軌道和預設軌道
  4. 刪除所有其他非英語或非英語曲目。
  5. 如果找到字幕,則將其刪除。
  6. 保留原始編解碼器格式的原始音軌作為備份。

在 2 個視訊檔案上進行了測試。

**如果要抑制輸出,請確保在命令開頭包含:-loglevel error -nostats

相關內容