FFmpeg¶
合并視頻文件¶
1.使用concat demuxer: 如果你的视频文件编解码器相同,可以使用concat demuxer方法。首先,你需要创建一个文本文件(例如mylist.txt),列出所有要合并的视频文件,然后,使用以下FFmpeg命令来合并视频。
#mylist.txt
file '\Downloads\2024-07-22T17_05_41.flv'
file '\Downloads\2024-07-22T17_11_56.flv'
file '\Downloads\2024-07-22T17_23_27.flv'
file '\Downloads\2024-07-22T17_47_19.flv'
file '\Downloads\2024-07-22T18_11_18.flv'
file '\Downloads\2024-07-22T18_23_15.flv'
file '\Downloads\2024-07-22T18_37_09.flv'
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.flv
FFmpeg命令中添加-safe 0参数,这将允许使用绝对路径。
2.使用concat filter: 如果视频文件的编解码器或格式不同,你可以使用concat filter。这需要对视频进行重新编码,可能会稍微降低处理速度。
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
3.使用concat protocol: 这种方法适用于支持文件级别连接的格式(如MPEG-2 transport streams)。对于不支持文件级连接的格式(如MP4),这种方法可能不适用。
ffmpeg -i "concat:input1.ts|input2.ts" -c copy output.ts
视频转换¶
mkv转mp4¶
# 查看視頻信息
ffmpeg -i Mechanic.Resurrection.mkv
# 視頻轉換
ffmpeg -i Mechanic.Resurrection.mkv -c copy Mechanic.Resurrection.mp4
# 將音訊轉碼為 AAC 格式
ffmpeg -i Mechanic.Resurrection.mkv -c:v copy -c:a aac -b:a 192k Mechanic.Resurrection.mp4
# 建議加上快啟標誌(可選):為了網頁或某些播放器更快播放,可以加 -movflags +faststart:
ffmpeg -i Mechanic.Resurrection.mkv -c:v copy -c:a aac -b:a 192k -movflags +faststart Mechanic.Resurrection.mp4
# 排除字幕流干擾,可以加上 -sn(不處理字幕)
ffmpeg -i Mechanic.Resurrection.mkv -c:v copy -c:a aac -b:a 192k -movflags +faststart -sn Mechanic.Resurrection.mp4
# -ac 2:將音訊混音為 2 聲道(立體聲)
ffmpeg -i Mechanic.Resurrection.mkv -c:v copy -c:a aac -b:a 192k -ac 2 -movflags +faststart -sn Mechanic.Resurrection.stereo.mp4
# -map 0:a:m:language:eng:選擇語言標籤為英文(eng)的音訊流。
ffmpeg -i Mechanic.Resurrection.mkv -map 0:v -map 0:a:m:language:eng -c:v copy -c:a aac -b:a 192k -ac 2 -movflags +faststart -sn Mechanic.Resurrection.eng.stereo.mp4
mp4转m3u8¶
ffmpeg -i ../[your-video].mp4 \
-c:v libx264 -profile:v high -level 4.1 -preset slow \
-crf 20 -g 48 -sc_threshold 0 \
-c:a aac -b:a 128k \
-vf "scale=w=1920:h=1080:force_original_aspect_ratio=decrease" \
-hls_time 6 -hls_playlist_type vod \
-hls_segment_filename "out_%04d.ts" \
[your-video].m3u8
ffmpeg -i 朴寶英粉絲.mp4 \
-c:v libx264 -profile:v high -level 4.1 -preset slow \
-crf 20 -g 48 -sc_threshold 0 \
-c:a aac -b:a 128k \
-vf "scale=w=720:h=934:force_original_aspect_ratio=decrease" \
-hls_time 6 -hls_playlist_type vod \
-hls_segment_filename "out_%04d.ts" \
朴寶英粉絲.m3u8
参数:
- -i ../[your-video].mp4
- 输入文件,指定待处理的视频文件。
- -c:v libx264
- 使用 H.264 编码器对视频进行编码。
- -profile:v high
- 设置 H.264 编码的 profile 为 high,适合高质量视频。
- -level 4.1
- 指定编码的 level 为 4.1,限制视频编码复杂度,兼容性更强。
- -preset slow
- 编码速度优化参数,slow 预设保证较高压缩率但编码较慢。
- -crf 20
- 常量质量参数,数值越小画质越好,20 是比较好的画质和压缩平衡。
- -g 48
- 关键帧间隔长度,设置为 48 帧,一般对应 GOP 大小,影响视频解码和拖动效果。
- -sc_threshold 0
- 关闭场景切换检测,控制关键帧插入位置。
- -c:a aac
- 使用 AAC 编码器对音频进行编码。
- -b:a 128k
- 音频码率设置为 128kbps。
- -vf "scale=w=1920:h=1080:force_original_aspect_ratio=decrease"
- 视频缩放过滤器,宽度最大 1920,高度最大 1080,保持原始宽高比,且最大边不超过1920x1080。
- -hls_time 6
- 每个 HLS 切片的时长为 6 秒。
- -hls_playlist_type vod
- 指定为点播(VOD)类型的 HLS 播放列表。
- -hls_segment_filename "out_%04d.ts"
- 指定切片文件的命名格式,文件名依次为 out_0000.ts, out_0001.ts, ...。
- [your-video].m3u8
- 输出的主播放列表文件,HLS 标准的索引文件。
webm转mp4¶
ffmpeg -i input.webm -c:v libx264 -c:a aac output.mp4
ffmpeg -i input.webm -c:v libx265 -c:a aac output.mp4
# -c:v libaom-av1 指定使用 AV1 编码器(libaom)。
# -crf 30 表示质量等级,数值越小画质越高,常见区间在 18–42 之间,实际最优需结合样本与硬件解码能力调整。
# -b:v 0 让编码器采用无固定比特率的模式,优先质量。
# -c:a aac -b:a 128k 指定 AAC 音频,128 kbps 常见平衡点;如果希望保留原始音频轨或使用 Opus,可以改为 -c:a libopus,并对应码率调整,但请注意 MP4 容器对 Opus 的兼容性可能不如 AAC。
# -movflags +faststart 使 MP4 的元数据在文件头部,便于网页端逐步加载播放。
ffmpeg -i input.webm -c:v libaom-av1 -crf 25 -b:v 0 -c:a aac -b:a 128k -movflags +faststart output.mp4
ffmpeg -i input.webm -c:v libaom-av1 -crf 25 -b:v 0 -c:a aac -movflags +faststart output.mp4
ffmpeg -i input.webm -c:v libsvtav1 -preset 6 -crf 25 -c:a aac -movflags +faststart output.mp4
# -q:v 30,设置视频质量因子(Quality Level),取值范围通常是 0–100 或 0–63,数值越小画质越高、文件越大。
# 在硬件编码中,-q:v 30 表示中等质量,适用于一般用途。建议范围:高质量:-q:v 20,平衡:-q:v 30,较高压缩:-q:v 40
ffmpeg -i input.webm -c:v hevc_videotoolbox -q:v 30 -c:a aac -movflags +faststart output.mp4
yt-dlp 下载视频¶
# 下载最高画质视频
yt-dlp [视频链接]
# 查看可下载格式,列出所有画质和音轨选项
yt-dlp -F URL
# 指定下载格式,下载最佳画质和音质并自动合并
yt-dlp -f "bestvideo+bestaudio" URL
# 获取「最佳视频流」和「最佳音频流」,合并为一个视频
yt-dlp -f "bv+ba/b" <video_url>
# 优先下载 MP4,如果没有,则下载最佳画质的其它格式
yt-dlp -S "ext" <video_url>
yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b" <video_url>
# 下载音频(MP3),直接提取为 MP3 音频
yt-dlp -x --audio-format mp3 URL
# 使用代理下载,适用于需要梯子的情况
yt-dlp --proxy socks5://127.0.0.1:10808 URL
# 使用 Cookie,适合 Bilibili 或登录用户专属视频下载
yt-dlp --cookies cookies.txt URL
#从文件批量下载,从文本文件中逐行读取多个 URL 下载
yt-dlp -a list.txt
小技巧:
- 使用 --no-mtime 可防止覆盖文件修改日期。
- 结合 --download-archive log.txt 可避免重复下载。
- 对 YouTube 频道使用命令 yt-dlp -ciw -o "%(playlist_title)s/%(title)s.%(ext)s)" URL 可批量下载并保持目录结构