以下整理了平时在开发测试过程中用到的一些ffmpeg命令行
ffmpeg下载地址
https://github.com/BtbN/FFmpeg-Builds/releases?page=4
分别提取一个视频中的video和另一个视频的audio,将其合并为一个新视频
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac output.mp4
将视频拆分为video only和audio only
ffmpeg -i input.mp4 -an -c:v copy video_only.mp4
ffmpeg -i input.mp4 -vn -c:a copy audio_only.mp4
从原视频30sec位置开始裁剪出10sec的视频
ffmpeg -ss 30 -i input.wmv -c copy -t 10 output.wmv
ffmpeg -i C:\Users\Desktop\in.ts -ss 00:00:30 -t 00:00:10 -c:v copy -c:a copy C:\Users\Desktop\out.ts
提取视频track 0 中所有帧的pts,dts并保存到文件中(-of 指定文件类型)
ffprobe.exe -show_frames -select_streams 0 -show_entries frame=pkt_dts_time C:\Users\dell\Desktop\test.mp4 -of xml >C:\Users\dell\Desktop\dts.xml
ffprobe.exe -show_frames -select_streams 0 -show_entries frame=pkt_pts_time C:\Users\dell\Desktop\test.mp4 >C:\Users\dell\Desktop\pts.txt
拼接多个mp4到一个大文件中(windows)
1. 创建一个batch file(concat.bat)内容如下
:: Create File List
echo file file1.mp4 > mylist.txt
echo file file2.mp4 >> mylist.txt
echo file file3.mp4 >> mylist.txt
:: Concatenate Files
ffmpeg -f concat -i mylist.txt -c copy output.mp4
batch文件,ffmpeg.exe和所有mp4文件需要放置在同一目录下
2. 运行batch文件
From https://stackoverflow.com/questions/7333232/how-to-concatenate-two-mp4-files-using-ffmpeg
-show_packets、-show_frames、-show_entries之间的区别
-show_packets
使用 -show_packets
选项,ffprobe
会输出每个媒体数据包的信息。媒体流是由一系列的数据包组成的,每个数据包包含了一部分的编码数据。对于视频来说,一个数据包可能包含一个或多个帧的数据;对于音频,可能包含一段时间内的音频数据。
输出的信息通常包括数据包的大小、时间戳、持续时间、标志等。这对于分析数据流的结构和传输特性非常有用。
-show_frames
使用 -show_frames
选项,ffprobe
会输出每一帧的详细信息。在视频文件中,每一帧是单独的图像,而在音频中,帧代表了一段离散的音频样本。
输出的信息可能包括帧的类型(如关键帧、B帧、P帧),帧的时间戳,帧的大小,以及其他编码相关的详细信息。这对于分析视频的编码细节和帧间关系非常有帮助。
-show_entries
-show_entries
选项允许你指定想要输出的特定信息字段。它可以与 -show_packets
或 -show_frames
结合使用,以便只显示你感兴趣的那些条目。
Reference:
using FFmpeg to convert media files
ffprobe -show_packets和-show_frames
How to trim a video using FFmpeg