我正在尝试从较大的视频中提取一小部分,而无需更改编解码器、分辨率或其他内容。因此,我使用FFmpeg使用以下设置。
ffmpeg -vcodec copy -acodec copy -ss 01:00:00 -t 00:00:30 -metadata title="Custom title" -metadata artist="Artist Name" -metadata language="English" -i input_file_h264.mp4 output_file.mp4
我正在 Ubuntu 10.10 上处理视频,使用 FFmpeg 版本 0.6-4:0.6-2ubuntu6.2。
输出文件带有与输入文件相同的编解码器信息。不过,它确实以甚高频液晶和其他媒体播放器就像视频的分辨率改变了一样。输入源的分辨率为 720x576。使用的编解码器是 H264 - MPEG-4 AVC (part 10) (avc1)。当输出视频打开时显得更宽(16:9)尽管视频设置没有改变。
我在 VLC 中也没有发现任何类似纵横比配置错误的情况。
你知道 Ubuntu 上的 H264 存在问题吗?据我所知,使用的是 libx264。但是当我简单地切分视频时,这是否相关?
根据 slhck 的建议,我改变了参数的顺序。
ffmpeg -ss 01:00:00 -i 28c3-4906-en-lightning_talks_day_3_pecha_kucha_h264.mp4 -vcodec copy -acodec copy -t 00:00:30 output_file_slhck.mp4
- 以下是相应的FFmpeg 输出。
答案1
您实际上并没有复制视频流。
提供acodec
和vcodec
选项后选项i
。只需考虑如何处理它们。首先读取文件,然后决定如何编码,然后输出。如果不这样做,选项将以不同的方式解析1,这将根据您的日志解释输入和输出的差异:
Input: Stream #0.0(und): Video: h264, yuv420p, 720x576 [PAR 64:45 DAR 16:9]
Output: Stream #0.0(und): Video: libx264, yuv420p, 720x576 [PAR 89:44 DAR 445:176]
注意到像素长宽比 (PAR) 的差异了吗?目前,您正在尝试解码带有编解码器的视频copy
,这显然不存在。FFmpeg 中的选项位置有时确实很重要。2
手册上也是这么说的:
为一个或多个流选择一个编码器(在输出文件之前使用时)或一个解码器(在输入文件之前使用时)
因此,总结一下 — — 为了便于阅读,元数据被省略了:
ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4
copy
1 – 对于较新版本的 FFmpeg,由于不存在解码器,命令将会失败。
2 – 另外,将t
选项放在编码过程之后,并留ss
在开头。放在ss
开头可确保文件一直被读取到时间,然后开始编码。如果将其放在ss
后面i
,则会从头开始对文件进行编码,这可能需要很长时间。