ffmpeg: No se conserva el códec original para la pista de audio

ffmpeg: No se conserva el códec original para la pista de audio

Tengo 3 versiones del comando ffmpeg y ninguna es perfecta... Estoy estancado. A continuación se muestran los ejemplos que tengo y los problemas que enfrento con cada versión:

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"

Esta versión del comando transcodifica la pista de audio principal a EAC3, la etiqueta y establece el EAC3 como primera/pista principal. ¡También mantiene solo pistas en inglés y elimina todas las demás! Elimina los subtítulos, pero lamentablemente NO mantiene la pista de audio original en el formato original (es decir, DTS convertido a EAC3, faltará 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" 

Esta versión del comando elimina los subtítulos; transcodifica la pista de audio principal a EAC3, la etiqueta, configura el EAC3 como primera/pista principal, ¡pero también mantiene la pista original antes de la transcodificación! (es decir, DTS convertido a EAC3, DTS seguirá ahí) Pero el problema con esto es que NO conserva solo pistas en inglés. Si tengo track chino se quedará.

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"

Esta versión del comando extrae la primera pista de video, las pistas de audio en inglés del archivo, elimina todas las demás pistas y subtítulos (¡por lo tanto, SÍ conserva solo las pistas en inglés!) Pero no transcodifica el audio si DTS a EAC3, lo etiqueta, etc.

Quiero algo que sea una mezcla de estos, que lo haga todo, eso significaría que transcodifica la pista de audio principal (digamos, DTS) a EAC3, la etiqueta y configura el EAC3 como primera/pista principal. También conserva solo las pistas en inglés y elimina todas las demás, y mantendría la pista DTS en inglés original después de la transcodificación.

El ejemplo completo es:

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

Respuesta1

Hasta ahora lo hice funcionar con cualquiera de los siguientes 2 comandos:

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. Transcodifica la pista de audio principal, sea cual sea, a EAC3
  2. Etiquetas/Cambia el nombre de este nuevo EAC3 que creó.
  3. Establece el EAC3 como pista primera/principal y pista predeterminada
  4. Elimina todas las demás pistas que no sean inglesas o und.
  5. Elimina los subtítulos si los encuentra.
  6. Mantenga la pista de audio original en el formato de códec original como copia de seguridad.

Probado en 2 archivos de vídeo.

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. Transcodifica la pista de audio principal, sea cual sea, a EAC3
  2. Etiquetas/Cambia el nombre de este nuevo EAC3 que creó.
  3. Establece el EAC3 como pista primera/principal y pista predeterminada
  4. Elimina todas las demás pistas que no sean inglesas o und.
  5. Elimina los subtítulos si los encuentra.
  6. Mantenga la pista de audio original en el formato de códec original como copia de seguridad.

Probado en 2 archivos de vídeo.

**Asegúrese de incluir: -loglevel error -nostats al inicio del comando si desea suprimir la salida

información relacionada