Моя шпаргалка по ffmpeg
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