Как заставить файлы, закодированные в Transport Stream, правильно отображать изображение значка файла?

Как заставить файлы, закодированные в Transport Stream, правильно отображать изображение значка файла?

Не знаю, правильно ли я спрашиваю, но вот. Я получил DVD-бокс на день рождения и перекодировал файлы, чтобы сохранить их на своем компьютере для просмотра. После сброса необработанных файлов на свой компьютер я сжал их следующей пакетной командой;

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

В результате сжатие и качество были отличными, но когда я посмотрел на папку, файлы, находящиеся в значках, стали просто серыми квадратами, тогда как у исходных файлов в той же папке отображалось изображение видео. (Лол, я знаю, что это просто косметический эффект, но меня это раздражает :)

Если я использую команду;

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

Значок изображения отображается нормально, но кодируется как (AVC1) вместо (h264), а это не то, что мне нужно.

Есть ли способ решить эту проблему в моей команде пакетного файла, чтобы она отображала значок файла по желанию? Спасибо!

решение1

Благодаря информации, предоставленной Гьяном, мне удалось найти эффективное решение моего вопроса по изменению команды пакетного файла, которое выглядит следующим образом.

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

Однако, учитывая информацию, предоставленную Джианом, мы можем пропустить этап кодирования в файл потока передачи, а затем преобразовать его в mp4 и просто сжать файл mp4 с помощью следующей пакетной команды.

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

Имея в виду, что это было сделано с использованием более старой версии ffmpeg. Для более новых версий ffmpeg используйте следующее, чтобы сжать видео, сохраняя правильный значок изображения видео, которое вы сжимаете;

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

Единственная проблема при использовании команды пакетного файла заключается в том, что она добавляет дополнительное расширение к имени файла (filename.mp4.mp4), и я решаю эту проблему с помощью pyrenamer, удаляя лишнее расширение во всех файлах в нескольких каталогах одним щелчком мыши.

Если кто-то знает, как решить эту проблему внутри пакетной команды, пожалуйста, прокомментируйте, и я изменю этот ответ. Я пробовал вариации команды 'mv', но безуспешно.

Связанный контент