FFmpeg使用笔记
CentOS 7 下安装FFmpeg
dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$\(rpm -E %fedora).noarch.rpm
intel核显也可以直接使用支持qsv的dockerffmpeg-qsv
检查视频完整性
ffmpeg -v error -i file.avi -f null -
输出到日志
ffmpeg -v error -i file.avi -f null - 2>error.log
查看信息
ffmpeg -i file.mp4
指定码率和分辨率
ffmpeg -i A.mp4 -vcodec libx264 -b:v 1500k -vf scale=1280:720 B.mp4
缩放为固定分辨率的命令行:
ffmpeg -i 1.mp4 -vf scale=640:480 output.mp4
缩放为自适应宽高比的命令行:
ffmpeg -i 1.mp4 -vf scale=640:-2 output.mp4
合并
创建一个文本文件,列出要合并的视频文件。以下是一个示例:
首先,创建一个文本文件,比如 input.txt,内容如下:
file 'input1.mp4'
file 'input2.mp4'
可使用脚本生成
Windows:
(for %i in (*.wmv) do @echo file '%i') > input.txt
Linux:
printf "file '%s'\n" *.wmv > input.txt
然后,使用以下命令将这两个视频文件合并成一个:
ffmpeg -f concat -i input.txt -c copy output.mp4
在这个例子中,input.txt 包含了要合并的视频文件列表。-f concat 告诉 FFmpeg 使用 concat 协议,-i input.txt 指定了输入文件,-c copy 告诉 FFmpeg 只进行复制而不重新编码,这样可以加快处理速度并且保持视频质量,最后的 output.mp4 是合并后的输出文件名。
提取ISO中的文件,我这里取的都是第一条流
ffmpeg -i input.iso -map 0:v:0 -map 0:a:0 -c copy output.mp4
截图功能
ffmpeg -ss 00:12:39.0 -i input.wmv -frames:v 1 /share/media/output.jpg
截取视频
ffmpeg -ss 00:45:35 -to 00:57:47 -i input.mp4 -c copy test.mp4
下载m3u8文件
ffmpeg -i 视频地址 -c copy -bsf:a aac_adtstoasc output.mp4
ffmpeg毕竟不是下载工具,下载也可以使用m3u8-downloader,支持更多参数。
合并字幕
推荐使用外挂字幕形式,合并成mkv格式
ffmpeg -i input.mp4 -i sub.srt -c copy output.mkv
也可以使用mkvmerge
进行处理
参考MKVToolNix 26.0.0 Released, How to Install it in Ubuntu进行安装
sudo sh -c 'echo "deb https://mkvtoolnix.download/ubuntu/ $(lsb_release -sc) main" >> /etc/apt/sources.list.d/bunkus.org.list'
wget -q -O - https://mkvtoolnix.download/gpg-pub-moritzbunkus.txt | sudo apt-key add -
sudo apt-get update
sudo apt-get install mkvtoolnix
合并字幕,并且设置默认字幕为中文
mkvmerge -o merge/Game.of.Thrones.S02E08.mkv Game.of.Thrones.S02E08.mkv --language 0:chi Game.of.Thrones.S02E08.ass
反交错
隔行扫描的视频可以在转码阶段进行反交错处理
ffmpeg -i input.mp4 -vf yadif output.mp4
若视频包含大量快速运动场景可使用mdeint、bwdif、mcdeint滤镜
参考文档
FFmpeg使用笔记
https://blog.yjll.blog/post/9539654e.html