Como fazer com que os arquivos codificados do Transport Stream exibam corretamente a imagem do ícone do arquivo?

Como fazer com que os arquivos codificados do Transport Stream exibam corretamente a imagem do ícone do arquivo?

Não sei se estou perguntando corretamente, mas aqui vai. Ganhei uma caixa de DVD de aniversário e transcodifiquei os arquivos para armazená-los em meu computador para visualização. Depois de despejar os arquivos brutos em meu computador, compactei-os com o seguinte comando em lote;

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

O que resultou em uma ótima compactação e qualidade mas quando olho a pasta os arquivos estão localizados nos ícones são apenas caixas cinzas, quando os arquivos originais na mesma pasta tinham uma imagem do vídeo exibida. (Lol, eu sei que é apenas cosmético, mas está me incomodando :)

Se eu usar o comando;

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

Ele exibe o ícone da imagem corretamente, mas codifica como (AVC1) em vez de (h264), o que não é o que eu quero.

Existe uma maneira de resolver isso em meu comando de arquivo em lote para exibir o ícone do arquivo conforme desejado? Obrigado!

Responder1

Graças às informações fornecidas por Gyan, consegui encontrar uma solução eficaz para a pergunta que fiz sobre a modificação do meu comando de arquivo em lote, que é a seguinte.

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

No entanto, dadas as informações fornecidas por Gyan, podemos pular a etapa de codificação para um arquivo de fluxo de transmissão e, em seguida, remuxar para mp4 e simplesmente compactar o arquivo mp4 no seguinte comando em lote.

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

Lembrando que isso foi feito usando uma versão mais antiga do ffmpeg. Para versões mais recentes do ffmpeg, use o seguinte para compactar seu vídeo, mantendo um ícone de imagem adequado do vídeo que você está compactando;

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

O único problema ao usar o comando de arquivo em lote é que ele adicionará uma extensão de arquivo extra ao nome do arquivo (nome do arquivo.mp4.mp4), que endereçarei usando o pyrenamer para remover a extensão de arquivo extra em todos os arquivos em vários diretórios com um único clique.

Se alguém souber como resolver isso dentro do comando em lote, comente e modificarei esta resposta. Eu tentei variações do comando 'mv', mas sem sorte.

informação relacionada