¿Cómo hacer que los archivos codificados con Transport Stream muestren correctamente la imagen del icono del archivo?

¿Cómo hacer que los archivos codificados con Transport Stream muestren correctamente la imagen del icono del archivo?

No sé si estoy preguntando esto correctamente pero ahí va. Recibí una caja de DVD para mi cumpleaños y transcodifiqué los archivos para guardarlos en mi computadora y verlos. Después de descargar los archivos sin formato a mi computadora, los comprimí con el siguiente comando por lotes;

INPUT="$1"
for i in *.mp4 ; do
ffmpeg -i "$i" -vcodec h264 -acodec libfaac "$i.ts"
mv "$i.ts" "$i.mp4"
sleep 3
done

Lo que resultó en una gran compresión y calidad, pero cuando miro la carpeta, los archivos ubicados en los íconos son solo cuadros grises, cuando los archivos originales en la misma carpeta tenían una imagen del video mostrada. (Lol, sé que es sólo cosmético pero me molesta :)

Si uso el comando;

ffmpeg -i input.mp4 -vcodec h264 -acodec libfaac output.mp4

Muestra bien el ícono de la imagen pero codifica como (AVC1) en lugar de (h264), que no es lo que quiero.

¿Hay alguna manera de solucionar esto en el comando de mi archivo por lotes para que muestre el ícono del archivo como lo deseo? ¡Gracias!

Respuesta1

Gracias a la información que me proporcionó Gyan, pude encontrar una solución efectiva a la pregunta que pedí sobre la modificación de mi comando de archivo por lotes, que es la siguiente.

INPUT="$1"
for i in *.mp4 ; do
ffmpeg -i "$i" -vcodec h264 -acodec libfaac "$i.ts"
ffmpeg -i "$i.ts" -bsf:a aac_adtstoasc -c copy "$i.mp4"
rm *.ts
sleep 3
done

Sin embargo, dada la información que proporcionó Gyan, podemos omitir el paso de codificar en un archivo de flujo de transmisión y luego remux a mp4 y simplemente comprimir el archivo mp4 en el siguiente comando por lotes.

INPUT="$1"
for i in *.mp4 ; do
ffmpeg -i "$i" -vcodec h264 -acodec libfaac "$i.mp4"
sleep 3
done

Teniendo en cuenta que esto se hizo usando una versión anterior de ffmpeg. Para versiones más nuevas de ffmpeg, use lo siguiente para comprimir su video manteniendo un ícono de imagen adecuado del video que está comprimiendo;

INPUT="$1"
for i in *.mp4 ; do
ffmpeg -i "$i" -vcodec h264 -acodec aac "$i.mp4"
sleep 3
done

El único problema al usar el comando de archivo por lotes es que agregará una extensión de archivo adicional al nombre del archivo (nombre de archivo.mp4.mp4), que soluciono usando pyrenamer para eliminar la extensión de archivo adicional en todos los archivos en varios directorios con un solo clic.

Si alguien sabe cómo solucionar esto dentro del comando por lotes, comente y modificaré esta respuesta. Probé variaciones del comando 'mv' pero no tuve suerte.

información relacionada