自然语言进行音视频处理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lgc653
V2EX    分享发现

自然语言进行音视频处理

  •  
  •   lgc653 2024-12-03 13:38:05 +08:00 1001 次点击
    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变。

    概述

    音视频处理是大家日常离不开的操作,一般大家有好几种解决方案

    • 使用各种专业的剪辑工具 这个有一定学习门,打开软件可能都需要几十秒
    • 使用各种音视频处理工具 这个用一会儿他就要你充会员了
    • FFmpeg 上面这些工具底层都离不开 FFmpeg ,我们用 FFmpeg 更加直接快速,但是 FFmpeg 命令太难记

    这时候,AI 就能来大显身手了,所以简而言之,就是把 AI 和 FFmpeg 命令结合起来使用,起到我下命令它执行的奇妙效果,可能比自己用图形化界面还爽,因为使用界面即使你是 VIP ,你还要找到这个功能在哪里

    前期准备

    FFmpeg 这个当然少不了,推荐大家去官网下载:Download FFmpeg

    不过大家不要慌着去下载,可以在你本机搜索一下,十之八九你机器上已经有了

    看下图,我说的没错吧

    image-20241203111517171

    第二步当然是把 ffmpeg 加入 path ,这个对于码农来说很简单了,如果你不会,可以问问 AI

    开始实践

    这里我把终端和 AI 整合在一起,方便大家操作,来看看几个常见的操作

    分离音视频

    随着 AI 技术的发展,要理解一个视频的内容,一个捷径是进行语音识别,这个时候我们就需要将音视频进行分离,来看看这个怎么来实现,有了 AI ,我们就不用去查询命令和帮助了

    我们只需要下指令:将 C:\Users\lgc653\Downloads\HarvardXSOC1.longx-V004200.mp4 的音频分离出来

    image-20241203112413915

    这种下命令的感觉是不是很爽,速度也很快,你打开一个视频剪辑工具的时间它早就处理完了

    视频转换压缩

    视频要转换成各种格式和分辨率,这可是很多工具的 VIP 功能,是要花小钱钱的,我们现在只要下命令就行了

    我们只需要下指令:把 C:\Users\lgc653\Downloads\Wdo_xPLBS_TotQyQ.mp4 降低到 480p

    image-20241203112746768

    这就搞定了

    加水印

    加水印是一个常见操作了,我们来看看 AI 做这个怎么样

    我们只需要下指令:给 C:\Users\lgc653\Downloads\HarvardXSOC1.longx-V004200.mp4 加上右上方加上水印,文字是“FFmpeg”

    image-20241203113626816

    看看效果,果然实现了

    但是要添加中文水印,就比较纠结了,主要要和字体结合,AI 就容易犯错了

    image-20241203113640849

    我们就不折腾 AI 添加中文水印了,再添加一个图片的水印看看效果,这个应该是比较主流的需求

    给出指令给 C:\Users\lgc653\Downloads\HarvardXSOC1.longx-V004200.mp4 加上右上方加上图片水印,水印图片是 C:\Users\lgc653\Downloads\icon.png

    image-20241203115109883

    水印太大了,喧宾夺主,直接指示他把尺寸换成 100*100

    image-20241203115317297

    喜不喜欢这种指挥别人干活的感觉

    疑难问题

    ffmpeg 还能删除视频中重复的画面,你还不知道把,常见的收费工具也没提供这个功能,我们来做个实验看看

    指使 AI 来做这个:把 C:\Users\lgc653\Downloads\HarvardXSOC1.longx-V004200.mp4 随机创建一些重复帧

    AI 给出的指令如下,这个命令会在视频的末尾添加 5 秒的重复帧。

    ffmpeg -i C:\Users\lgc653\Downloads\HarvardXSOC1.longx-V004200.mp4 -vf "tpad=stop_mode=clone:stop_duration=5" -c:a copy C:\Users\lgc653\Downloads\output.mp4 

    很快就完成了,生成了一个output.mp4文件,可以看到视频从 49 秒变成了 53 秒

    下面开始删除重复帧了……怎么有点监守自盗的意思

    指使 AI 来做这个:从 C:\Users\lgc653\Downloads\output.mp4 删除重复的画面

    可以看到生成了 cleaned_output.mp4 ,视频又变回了 49 秒

    image-20241203121358746

    AI 编码

    当然你非要做个小应用,这个也是小 case ,以下程序完全使用自然语言指使由 AI 生成,本人未做任何修改

    image-20241203122802962

    import tkinter as tk from tkinter import filedialog import subprocess def choose_video(): """打开文件选择对话框,选择 MP4 视频文件""" global video_path video_path = filedialog.askopenfilename( initialdir="/", title="选择视频文件", filetypes=(("MP4 files", "*.mp4"), ("all files", "*.*")), ) if video_path: video_label.config(text=video_path) def get_video_info(): """使用 FFprobe 获取视频信息""" if not video_path: return command = [ "ffprobe", "-v", "quiet", "-show_format", "-show_streams", video_path, ] output = subprocess.check_output(command).decode("utf-8") info_text.delete("1.0", tk.END) info_text.insert(tk.END, output) def convert_format(): """将视频转换为指定格式""" if not video_path: return new_format = format_entry.get() if not new_format: return output_path = video_path.replace(".mp4", f".{new_format.lower()}") command = [ "ffmpeg", "-i", video_path, "-c:v", "copy", "-c:a", "copy", output_path, ] subprocess.call(command) def trim_video(): """裁剪视频的指定时间段""" if not video_path: return start_time = start_entry.get() end_time = end_entry.get() if not start_time or not end_time: return output_path = video_path.replace(".mp4", "_trimmed.mp4") command = [ "ffmpeg", "-i", video_path, "-ss", start_time, "-to", end_time, "-c", "copy", output_path, ] subprocess.call(command) def add_watermark(): """为视频添加文字水印""" if not video_path: return text = watermark_entry.get() if not text: return output_path = video_path.replace(".mp4", "_watermarked.mp4") command = [ "ffmpeg", "-i", video_path, "-vf", f"drawtext=text='{text}':fOntcolor=white:fOntsize=24:box=1:[email protected]:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2", output_path, ] subprocess.call(command) # 创建主窗口 root = tk.Tk() root.title("视频处理工具") # 选择视频文件 video_label = tk.Label(root, text="请选择视频文件") video_label.pack() choose_button = tk.Button(root, text="选择文件", command=choose_video) choose_button.pack() # 显示视频信息 info_button = tk.Button(root, text="获取视频信息", command=get_video_info) info_button.pack() info_text = tk.Text(root) info_text.pack() # 转换格式 format_label = tk.Label(root, text="目标格式 (例如: avi, mov):") format_label.pack() format_entry = tk.Entry(root) format_entry.pack() convert_button = tk.Button(root, text="转换格式", command=convert_format) convert_button.pack() # 裁剪视频 start_label = tk.Label(root, text="开始时间 (HH:MM:SS):") start_label.pack() start_entry = tk.Entry(root) start_entry.pack() end_label = tk.Label(root, text="结束时间 (HH:MM:SS):") end_label.pack() end_entry = tk.Entry(root) end_entry.pack() trim_button = tk.Button(root, text="裁剪视频", command=trim_video) trim_button.pack() # 添加水印 watermark_label = tk.Label(root, text="水印文字:") watermark_label.pack() watermark_entry = tk.Entry(root) watermark_entry.pack() watermark_button = tk.Button(root, text="添加水印", command=add_watermark) watermark_button.pack() root.mainloop() 

    总结

    • 使用自然语言进行音视频处理非常靠谱
    • 只要 ffmpeg 能做到,你就能做到,再也不用等待打开大型软件,再也不用充 VIP 了

    相关软件

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2674 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 14:00 PVG 22:00 LAX 06:00 JFK 09:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86