ffmpeg: Original-Codec für Audiospur wird nicht beibehalten

ffmpeg: Original-Codec für Audiospur wird nicht beibehalten

Ich habe 3 Versionen des ffmpeg-Befehls und keine davon ist perfekt... Ich stecke fest. Unten sind die Beispiele, die ich habe, und die Probleme, die ich mit jeder Version habe:

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"

Diese Version des Befehls transkodiert die primäre Audiospur in EAC3, beschriftet sie und legt EAC3 als erste/primäre Spur fest. Außerdem behält sie nur englische Spuren bei und entfernt alle anderen! Entfernt Untertitel, behält aber leider NICHT die ursprüngliche Audiospur im Originalformat (d. h. wenn DTS in EAC3 konvertiert wird, fehlt 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" 

Diese Version des Befehls entfernt die Untertitel, transkodiert die primäre Audiospur in EAC3, beschriftet sie, setzt EAC3 als erste/primäre Spur, behält aber auch die Originalspur vor der Transkodierung bei! (d. h. DTS wird in EAC3 konvertiert, DTS bleibt weiterhin vorhanden.) Das Problem dabei ist jedoch, dass NICHT nur englische Spuren beibehalten werden. Wenn ich eine chinesische Spur habe, bleibt diese erhalten.

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"

Diese Version des Befehls extrahiert die erste Videospur und die englischen Audiospuren aus der Datei und löscht alle anderen Spuren und Untertitel (es bleiben also tatsächlich nur die englischen Spuren erhalten!) Der Ton wird jedoch nicht von DTS in EAC3 transkodiert, beschriftet usw.

Ich möchte etwas, das eine Mischung aus beidem ist und alles kann. Das heißt, es transkodiert die primäre Audiospur (sagen wir, DTS) in EAC3, beschriftet sie und setzt EAC3 als erste/primäre Spur. Es behält außerdem nur englische Spuren und entfernt alle anderen und behält nach der Transkodierung die ursprüngliche englische DTS-Spur.

Das vollständige Beispiel lautet:

@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.
        )
    )
)

Antwort1

Bisher habe ich es mit einem der folgenden beiden Befehle zum Laufen gebracht:

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. Transkodiert die primäre Audiospur, egal um was es sich handelt, in EAC3
  2. Beschriftet/ändert den Namen dieses neuen, erstellten EAC3.
  3. Legt den EAC3 als ersten/primären Track und Standardtrack fest
  4. Entfernt alle anderen Titel, die nicht Englisch oder Spanisch sind.
  5. Entfernt Untertitel, falls gefunden.
  6. Bewahren Sie die Original-Audiospur als Backup im Original-Codec-Format auf.

An 2 Videodateien getestet.

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. Transkodiert die primäre Audiospur, egal um was es sich handelt, in EAC3
  2. Beschriftet/ändert den Namen dieses neuen, erstellten EAC3.
  3. Legt den EAC3 als ersten/primären Track und Standardtrack fest
  4. Entfernt alle anderen Titel, die nicht Englisch oder Spanisch sind.
  5. Entfernt Untertitel, falls gefunden.
  6. Bewahren Sie die Original-Audiospur als Backup im Original-Codec-Format auf.

An 2 Videodateien getestet.

**Stellen Sie sicher, dass Sie am Anfang des Befehls Folgendes angeben: -loglevel error -nostats, wenn Sie die Ausgabe unterdrücken möchten.

verwandte Informationen