LINUX.ORG.RU

Как с ffmpeg обрезать файл с обновлением времени?

 , ,


1

2

Обрезал файл ключами -ss и -to, но в информации о получившемся файле показывает неправильную продолжительность, показывает время, которое было в источнике.

Как сделать, чтобы в информации о файле показывало правильную длительность?

★★★★★

Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: комментарий от gagarin0

-reset_timestamps 1

не меняет. а в мане вообще такого ключа нет.

первая ссылка в гугле

не нашёл. а чатботы вообще втирают какую-то дичь.

teod0r ★★★★★
() автор топика
Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: комментарий от teod0r

тогда пора выкладывать полностью строчку ffmpeg, она должна выглядеть примерно так:

ffmpeg -vsync -1 -i $fixed_file -ss $ffmpeg_ss -to $ffmpeg_to -c copy -reset_timestamps 1 -fflags +igndts -fflags +genpts -y /tmp/result${i}.mp4

так же уточните версию ffmpeg

и если есть возможность - залейте куда-нибудь исходный видео файл

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от gagarin0

так же уточните версию ffmpeg

7.0.2

выяснилось, что не работает для аудиофайла формата opus. Для видео работает нормально, даже без всяких -reset_timestamps 1 -fflags +igndts -fflags +genpts.

и если есть возможность - залейте куда-нибудь исходный видео файл

yt-dlp -f137+251 https://youtu.be/MzcxPTvEHis
потом сделал

ffmpeg -i имя_файла -acodec copy -map 0:1 -- 'Garmarna - Herr Holger.opus'
потом делаю
ffmpeg -i Garmarna\ -\ Herr\ Holger.opus -ss 98.4 -c copy -reset_timestamps 1 -fflags +igndts -fflags +genpts -- 2Garmarna\ -\ Herr\ Holger.opus
что с -reset_timestamps 1 -fflags +igndts -fflags +genpts, что без них, время в выходном файле - 00:13:22.168000000

teod0r ★★★★★
() автор топика

Как сделать, чтобы в информации о файле показывало правильную длительность?

На самом деле, ffprobe показывает правильную длительность:

$ URL="https://youtu.be/MzcxPTvEHis"
$ yt-dlp -f137+251 ${URL}
$ URL_FILENAME='Garmarna - Herr Holger - Live at Schlachthof Wiesbaden, 15 September 2022 [MzcxPTvEHis].mkv'
$ OPUS_FILENAME=out.opus
$ ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${URL_FILENAME}"
# покажет длительность исходного ролика ~802 секунды
$ ffmpeg -i "${URL_FILENAME}" -ss 98.4 -c copy -reset_timestamps 1 -fflags +igndts -fflags +genpts -- ${OPUS_FILENAME}
$ ffprobe -i "${OPUS_FILENAME}" -show_entries format=duration -v quiet -of csv="p=0"
# покажет длительность opus файла как ~802 - ~98 = ~703
gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от teod0r

и что не так?

неплохо было бы добавить в ОП пост хотя бы медиа формат с которым вы работаете, те советы которые я вам давал были относительны «видео файлов»

gagarin0
()
Последнее исправление: gagarin0 (всего исправлений: 1)
Ответ на: комментарий от gagarin0

ну сначала обрезаешь исходное видео:

ffmpeg -i видео -ss 98.4 -c copy -f matroska -- Garmarna\ -\ Herr\ Holger.tmp
а только потом отделяешь звук:
ffmpeg -i 'Garmarna - Herr Holger.tmp' -acodec copy -map 0:1 -- 'Garmarna - Herr Holger.opus'
тогда и время в метаданных становится правильным...

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

я проверяю длительность медиа-файла при помощи команды:

$ ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${URL_FILENAME}"

тогда и время в метаданных становится правильным…

это решило вашу проблему ?

gagarin0
()
Ответ на: комментарий от gagarin0

я проверяю длительность медиа-файла при помощи команды:

так показывает правильно. неправильно только в метаданных, что показывает ffmpeg -i 'Garmarna - Herr Holger.opus', если сначала отделить звук, а только потом обрезать. но я это не сразу понял, что дело только в метаданных, и что проблема только со звуковым файлом без видео.

это решило вашу проблему ?

проблема остаётся, только её можно обойти, если делать не в правильном порядке.

teod0r ★★★★★
() автор топика