ffmpeg - набор библиотек для обработки аудио и видео. Шпаргалка содержит примеры консольных команд и примеры кода с использованием python библиотеки ffmpeg-python

Аргументы

  • -map_metadata 0 переносит “известные” метаданные, такие как create date. Кастомные теги не переносятся (Location, Android Version, Android Capture Fps итд)
  • -movflags use_metadata_tags Перенос кастомных ключей метаданных

Конкатенация видео

Создать файл join.txt

file 1.mp4
file 2.mp4
file 3.mp4
ffmpeg -f concat -safe 0 -i join.txt -c copy joined.mp4

При конкатенации возникают предупреждения вида: [mp4 @ 0x7ff9f8436380] Non-monotonous DTS in output stream 0:0; previous: 4399686, current: 4399684; changing to 4399687. This may result in incorrect timestamps in the output file.

На стековерфлоу есть вариант исправления, но он перекодирует видео.

Поворот видео

Поворот без перекодировки видео. Сохраняет информацию о повороте в метаданные.

ffmpeg -ss 00:01:00 -to 00:02:00 -i in.mp4 -map_metadata 0 -movflags use_metadata_tags -c copy out.mp4

Разрезать видео (python)

import os

import ffmpeg

inputfile = 'video.mp4'
fragments = [
    ('00:05', '00:10'),
    ('00:15', '00:20'),
]
for i, (start, end) in enumerate(fragments):
    filename, file_extension = os.path.splitext(inputfile)
    newfilename = f'{filename}_cut{i + 1}{file_extension}'
    stream = ffmpeg.input(inputfile, ss=start, to=end)
    stream = ffmpeg.output(
        stream,
        newfilename,
        codec='copy',
        movflags='use_metadata_tags',
        map_metadata='0'
    )
    print(stream.get_args())
    if not os.path.exists(newfilename):
        stream.run()
    else:
        print(f'skip {newfilename}')

Извлечь аудио:

без перекодировки:

ffmpeg -i video.mp4 -vn -acodec copy audio.m4a

преобразовать в mp3:

ffmpeg -i video.mp4 -f mp3 -ab 192000 -vn audio.mp3