Решил я глянуть широкоформатное кино на телевизоре. Телевизор может воспроизводить файлы с флешки, но только если флешка отформатирована в FAT32. А в FAT32 можно записать файл с максимальным объемом в 232-1=4294967295 байт, т.е. 4 ГБ без одного байта, даже если свободное место на флешке еще есть. Мой файл в формате "матрешка" (.mkv) оказался объемом побольше, а, именно, 4,7 ГБ.
К счастью Ubuntu умеет записывать данные на флешку "до упора", только сообщает по окончании процесса, что, мол, "записала сколько смогла, но извини, больше не лезет". Файл при этом не удаляется. Телевизор такой файл видит, воспроизводит, однако, ощущает его поврежденность: "перемотать" видео до заданной позиции невозможно, а скорость перемотки ограничена лишь двойной скоростью.
Что же делать?
На помощь приходит FFmpeg — универсальный перекодировщик видео. Первой идеей было сконвертировать видео в формат H.264:
# ffmpeg -i "Video.1080p.mkv" -vcodec libx264 -acodec aac -strict -2 "Video.1080p.mp4"
Не детские математические преобразования загрузили процессор и скорость конвертации оказалась 4,7 кадров в секунду... очень медленно. Затем родилась иная светлая мысль: нужно нарезать исходный файл кусками без(!) конвертации. Отрезаем первый кусок, длительностью в час:
# ffmpeg -y -i "Video.1080p.mkv" -t 01:00:00.000 -vcodec copy -acodec copy "Video.1080p.p1.mkv"
Отсутствие математики хорошо влияет на скорость конвертации — более 400 кадров в секунду! Затем отрезаем второй кусок, пропуская первый час:
# ffmpeg -ss 01:00:00.000 -y -i "Video.1080p.mkv" -vcodec copy -acodec copy "Video.1080p.p2.mkv"
Здесь стоит отметить что для FFmpeg важна последовательность параметров, быстрее всего процесс идет, если -ss
стоит вначале — на все ушло около 5 минут. В результате получаются 2 полноценных файла, весом 2 и 2,7 ГБ соответственно, успешно записываемые на флешку. :)