FFmpeg: MD5 ha sh плейлистов M3U8, созданных из одного и того же входного видео с разной длительностью сегмента (после применения видеофильтра), не совпадают - PullRequest
0 голосов
/ 19 июня 2020

Вот несколько команд, которые я использую для преобразования и преобразования видео в формате MP4 в список воспроизведения M3U8 .

Для заданного входного видео (формат MP4) создать несколько видео сегменты продолжительностью 30 секунд.

ffmpeg -loglevel error -i input.mp4 -dn -sn -an -c:v copy -bsf:v h264_mp4toannexb -copyts -start_at_zero -f segment -segment_time 30 30%03d.mp4 -dn -sn -vn -c:a copy audio.aac

Примените видеофильтр (в данном случае масштабирование) к каждому сегменту и преобразуйте его в формат M3U8.

ls 30*.mp4 | parallel 'ffmpeg -loglevel error -i {} -vf scale=-2:144 -hls_list_size 0 {}.m3u8'

Сохраните список Файлы m3u8, созданные в list.txt в этом формате file 'segment-name.m3u8'

for f in 30*.m3u8; do echo "file '$f'" >> list.txt; done

Используя concat demuxer, объедините все файлы сегментов (которые находятся в формате M3U8) и аудио, чтобы получить один окончательный список воспроизведения m3u8, указывающий на сегменты с продолжительность 10 секунд.

ffmpeg -loglevel error -f concat -i list.txt -i audio.aac -c copy -hls_list_size 0 -hls_time 10 output_30.m3u8

Я могу изменить длительность сегмента на первом этапе с 30 секунд до 60 секунд и сравнить MD5 ha sh окончательного списка воспроизведения M3U8, созданного в обоих случаях, с помощью этой команды:

ffmpeg -loglevel error -i <input m3u8 playlist> -f md5 -

MD5 ha sh выходных файлов различаются, то есть видеопотоки output_30.m3u8 и output_60.m3u8 не совпадают.

Может ли кто-нибудь уточнить это?

( Я ожидал, что MD5 га sh будет таким же )

Ответы [ 2 ]

0 голосов
/ 15 июля 2020

Добавление -crf 0 (что подразумевает кодирование без потерь) на втором этапе дает те же контрольные суммы.

В случае кодирования с потерями, из того, что я узнал до сих пор, сегментированное кодирование обязательно будет другим от нормального кодирования из-за потоков (качество отличается по мере использования большего количества потоков) и кода с потерями c. Даже с такими параметрами, как --stitchable (параметр x264) и --threads 1 (параметр вывода FFmpeg), контрольная сумма отличается.

0 голосов
/ 20 июня 2020

Файл M3U8 - это просто текстовый файл. Запустите diff для них, и он точно скажет вам, в чем разница.

...