ffmpeg-将MOV文件转换为MP4 [关闭]


145

我刚刚安装了ffmpeg,并且尝试将所有上传的视频编码为.mp4文件。目前,大多数用户都上载.mov,我想将每个视频都转换为.mp4。

我正在运行以下命令:

ffmpeg -i movie.mov -vcodec copy -acodec cop out.mp4

但是我得到的只是以下错误

ffmpeg version 0.8.5, Copyright (c) 2000-2011 the FFmpeg developers
  built on Aug 19 2012 11:38:20 with clang 3.1 (tags/Apple/clang-318.0.61)
  configuration: --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libfaac --enable-libxvid --enable-libx264 --enable-libvpx --enable-hardcoded-tables --enable-shared --enable-pthreads --disable-indevs --cc=clang
  libavutil    51.  9. 1 / 51.  9. 1
  libavcodec   53.  7. 0 / 53.  7. 0
  libavformat  53.  4. 0 / 53.  4. 0
  libavdevice  53.  1. 1 / 53.  1. 1
  libavfilter   2. 23. 0 /  2. 23. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'movie.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2012-03-28 07:13:20
  Duration: 00:00:26.23, start: 0.000000, bitrate: 12974 kb/s
    Stream #0.0(eng): Video: mjpeg, yuvj420p, 1280x720 [PAR 72:72 DAR 16:9], 12972 kb/s, 11.67 fps, 600 tbr, 600 tbn, 600 tbc
    Metadata:
      creation_time   : 2012-03-28 07:13:20
File 'out.mp4' already exists. Overwrite ? [y/N] y
Output #0, mp4, to 'out.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2012-03-28 07:13:20
    encoder         : Lavf53.4.0
    Stream #0.0(eng): Video: mjpeg, yuvj420p, 1280x720 [PAR 72:72 DAR 16:9], q=2-31, 12972 kb/s, 600 tbn, 600 tbc
    Metadata:
      creation_time   : 2012-03-28 07:13:20
Stream mapping:
  Stream #0.0 -> #0.0
Press [q] to stop, [?] for help
frame=  121 fps=  0 q=-1.0 size=   16408kB time=00:00:10.08 bitrate=13332.2kbitsframe=  306 fps=  0 q=-1.0 Lsize=   41543kB time=00:00:26.12 bitrate=13025.0kbits/s    
video:41538kB audio:0kB global headers:0kB muxing overhead 0.012531%

您确定这些是错误吗?在我看来,这更像是一个日志文件。它甚至要求覆盖以前的mp4:文件'out.mp4'已经存在。覆盖?[y / N] y
康拉德·洛兹

SuperUser中的类似问题
legends2k

Answers:


254

仅将其流传输到某些诸如Adobe Premiere Pro之类的应用程序所需的新容器(mp4)而不进行编码(快速)的命令是:

ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4

替代如在评论,从而重新编码具有最好退换(提及-qscale 0):

ffmpeg -i input.mov -q:v 0 output.mp4

70
由于这会在搜索结果中显示,因此我将在撰写本文时为ffmpeg添加更新的命令: ffmpeg -i input.mov -qscale 0 output.mp4
StudioEvoque 2013年

14
@StudioEvoque -qscale 0标志的作用是什么?
Cyber​​Skull

4
@Cyber​​Skull -qscale设置压缩级别。qscale值越低,质量越好。可用的qscale值的范围从1(最高质量)到31(最低质量)。
RonnyKnoxville 2015年

8
@MiguelBartelsman @Baodad一个容器打包了多个视频和音频流,添加了标题和目录。Quicktime(mov)和MPEG(mp4)容器在技术上完全不同。如果只是将Quicktime文件重命名为mp4,则可以将其假装为MPEG视频,但它仍然是Quicktime容器。请注意:由于您copy将codec参数用于,因此您告诉FFMpeg复制实际的媒体数据,而无需将其重新编码为另一个codec。
Ichthyo

10
@StudioEvoque当心!您在这里提出的建议与OP所做的和可能想要的完全不同。您没有提供编解码器规范,因此您要求FFMpeg 将实际的媒体数据转码为与MP4容器关联的标准编解码器。即使您使用最高质量设置,转码也总是会降低质量。只有在使用时,-c copy请确保不触及原始媒体数据,只有容器发生了变化
Ichthyo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.